1*99451b44SJordan Rupprecht // This structure has a non-trivial copy constructor so
2*99451b44SJordan Rupprecht // it needs to be passed by reference.
3*99451b44SJordan Rupprecht struct PassByRef {
4*99451b44SJordan Rupprecht   PassByRef() = default;
PassByRefPassByRef5*99451b44SJordan Rupprecht   PassByRef(const PassByRef &p){x = p.x;};
6*99451b44SJordan Rupprecht 
7*99451b44SJordan Rupprecht   int x = 11223344;
8*99451b44SJordan Rupprecht };
9*99451b44SJordan Rupprecht 
returnPassByRef()10*99451b44SJordan Rupprecht PassByRef returnPassByRef() { return PassByRef(); }
takePassByRef(PassByRef p)11*99451b44SJordan Rupprecht int takePassByRef(PassByRef p) {
12*99451b44SJordan Rupprecht     return p.x;
13*99451b44SJordan Rupprecht }
14*99451b44SJordan Rupprecht 
main()15*99451b44SJordan Rupprecht int main() {
16*99451b44SJordan Rupprecht     PassByRef p = returnPassByRef();
17*99451b44SJordan Rupprecht     p.x = 42;
18*99451b44SJordan Rupprecht     return takePassByRef(p); // break here
19*99451b44SJordan Rupprecht }
20