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
This commit is contained in:
parent
fab459303f
commit
65196e3724
4 changed files with 34 additions and 0 deletions
|
@ -1,3 +1,9 @@
|
|||
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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
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
|
||||
|
|
13
gcc/testsuite/g++.dg/init/ref11.C
Normal file
13
gcc/testsuite/g++.dg/init/ref11.C
Normal file
|
@ -0,0 +1,13 @@
|
|||
// PR c++/14230
|
||||
|
||||
struct A {
|
||||
A ();
|
||||
A (const A&);
|
||||
A& operator= (const A&);
|
||||
};
|
||||
|
||||
struct D {
|
||||
A a;
|
||||
};
|
||||
|
||||
const A& z = D().a;
|
Loading…
Add table
Reference in a new issue