1 // PR c++/8186
2 
3 // Bug: In f, convert_for_arg_passing wrapped the A TARGET_EXPR in an
4 // ADDR_EXPR for passing by invisible ref.  stabilize_throw_expr copied the
5 // resulting pointer into a temporary.  cp_convert_parm_for_inlining then
6 // dereferences it and tries to initialize B::am with the INDIRECT_REF,
7 // which calls for a bitwise copy.  Which is broken.
8 
9 // { dg-options "-O" }
10 
11 struct A
12 {
13   A();
14   A(const A&);
15   A& operator=(const A&);
16 };
17 
18 struct B {
19   A am;
BB20   B(A a) { am = a; }
21 };
22 
f()23 void f ()
24 {
25   throw B(A());
26 }
27