re PR c++/51137 ([C++0x] [4.7 Regression] ICE with -std=c++0x and virtual inheritance)
PR c++/51137 * class.c (build_base_path): Don't do calculation in templates. From-SVN: r181444
This commit is contained in:
parent
f14c43566a
commit
a8e237782f
@ -1,3 +1,8 @@
|
||||
2011-11-17 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/51137
|
||||
* class.c (build_base_path): Don't do calculation in templates.
|
||||
|
||||
2011-11-15 Torvald Riegel <triegel@redhat.com>
|
||||
|
||||
* parser.c (cp_parser_transaction_expression): Require parentheses
|
||||
|
@ -304,8 +304,13 @@ build_base_path (enum tree_code code,
|
||||
virtual_access = (v_binfo && fixed_type_p <= 0);
|
||||
|
||||
/* Don't bother with the calculations inside sizeof; they'll ICE if the
|
||||
source type is incomplete and the pointer value doesn't matter. */
|
||||
if (cp_unevaluated_operand != 0)
|
||||
source type is incomplete and the pointer value doesn't matter. In a
|
||||
template (even in fold_non_dependent_expr), we don't have vtables set
|
||||
up properly yet, and the value doesn't matter there either; we're just
|
||||
interested in the result of overload resolution. */
|
||||
if (cp_unevaluated_operand != 0
|
||||
|| (current_function_decl
|
||||
&& uses_template_parms (current_function_decl)))
|
||||
{
|
||||
expr = build_nop (ptr_target_type, expr);
|
||||
if (!want_pointer)
|
||||
@ -359,11 +364,6 @@ build_base_path (enum tree_code code,
|
||||
V_BINFO. That offset is an entry in D_BINFO's vtable. */
|
||||
tree v_offset;
|
||||
|
||||
/* In a constructor template, current_in_charge_parm isn't set,
|
||||
and we might end up here via fold_non_dependent_expr. */
|
||||
if (fixed_type_p < 0 && !(cfun && current_in_charge_parm))
|
||||
fixed_type_p = 0;
|
||||
|
||||
if (fixed_type_p < 0 && in_base_initializer)
|
||||
{
|
||||
/* In a base member initializer, we cannot rely on the
|
||||
|
@ -1,3 +1,8 @@
|
||||
2011-11-17 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/51137
|
||||
* g++.dg/template/virtual2.C: New.
|
||||
|
||||
2011-11-17 Michael Matz <matz@suse.de>
|
||||
|
||||
PR middle-end/50644
|
||||
|
11
gcc/testsuite/g++.dg/template/virtual2.C
Normal file
11
gcc/testsuite/g++.dg/template/virtual2.C
Normal file
@ -0,0 +1,11 @@
|
||||
// PR c++/51137
|
||||
|
||||
struct A {};
|
||||
|
||||
template<int> struct B : virtual A
|
||||
{
|
||||
void foo()
|
||||
{
|
||||
(new A(*this))->A::~A();
|
||||
}
|
||||
};
|
Loading…
Reference in New Issue
Block a user