Commit 65196e37 by Mark Mitchell Committed by Mark Mitchell

re PR c++/14230 (ICE in cp_expr_size)

	PR c++/14230
	* call.c (initialize_reference): Handle initializers that are
	class-member access expressions applies to rvalues.

	PR c++/14230
	* g++.dg/init/ref11.C: New test.

From-SVN: r79165
parent fab45930
2004-03-09 Mark Mitchell <mark@codesourcery.com>
PR c++/14230
* call.c (initialize_reference): Handle initializers that are
class-member access expressions applies to rvalues.
2004-03-09 Mark Mitchell <mark@codesourcery.com>
PR c++/14432
* name-lookup.c (supplement_binding): Ignore functions that are
marked DECL_ANTICIPATED.
......
......@@ -6463,6 +6463,16 @@ initialize_reference (tree type, tree expr, tree decl, tree *cleanup)
type = TREE_TYPE (expr);
var = make_temporary_var_for_ref_to_temp (decl, type);
layout_decl (var, 0);
/* If the rvalue is the result of a function call it will be
a TARGET_EXPR. If it is some other construct (such as a
member access expression where the underlying object is
itself the result of a function call), turn it into a
TARGET_EXPR here. It is important that EXPR be a
TARGET_EXPR below since otherwise the INIT_EXPR will
attempt to make a bitwise copy of EXPR to intialize
VAR. */
if (TREE_CODE (init) != TARGET_EXPR)
expr = get_target_expr (expr);
/* Create the INIT_EXPR that will initialize the temporary
variable. */
init = build (INIT_EXPR, type, var, expr);
......
2004-03-09 Mark Mitchell <mark@codesourcery.com>
PR c++/14230
* g++.dg/init/ref11.C: New test.
2004-03-09 Mark Mitchell <mark@codesourcery.com>
PR c++/14432
* g++.dg/parse/builtin2.C: New test.
......
// PR c++/14230
struct A {
A ();
A (const A&);
A& operator= (const A&);
};
struct D {
A a;
};
const A& z = D().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