Commit a8e23778 by Jason Merrill Committed by Jason Merrill

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
parent f14c4356
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
......
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
......
// PR c++/51137
struct A {};
template<int> struct B : virtual A
{
void foo()
{
(new A(*this))->A::~A();
}
};
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment