// PR c++/8186 | |
// Bug: In f, convert_for_arg_passing wrapped the A TARGET_EXPR in an | |
// ADDR_EXPR for passing by invisible ref. stabilize_throw_expr copied the | |
// resulting pointer into a temporary. cp_convert_parm_for_inlining then | |
// dereferences it and tries to initialize B::am with the INDIRECT_REF, | |
// which calls for a bitwise copy. Which is broken. | |
// { dg-options "-O" } | |
struct A | |
{ | |
A(); | |
A(const A&); | |
A& operator=(const A&); | |
}; | |
struct B { | |
A am; | |
B(A a) { am = a; } | |
}; | |
void f () | |
{ | |
throw B(A()); | |
} |