1*99451b44SJordan Rupprecht struct NoCopyCstr { NoCopyCstrNoCopyCstr2*99451b44SJordan Rupprecht NoCopyCstr() {} 3*99451b44SJordan Rupprecht // No copy constructor but a move constructor means we have an 4*99451b44SJordan Rupprecht // implicitly deleted copy constructor (C++11 [class.copy]p7, p18). 5*99451b44SJordan Rupprecht NoCopyCstr(NoCopyCstr &&); 6*99451b44SJordan Rupprecht }; 7*99451b44SJordan Rupprecht struct IndirectlyDeletedCopyCstr { 8*99451b44SJordan Rupprecht // This field indirectly deletes the implicit copy constructor. 9*99451b44SJordan Rupprecht NoCopyCstr field; 10*99451b44SJordan Rupprecht // Completing in the constructor or constructing the class 11*99451b44SJordan Rupprecht // will cause Sema to declare the special members of IndirectlyDeletedCopyCstr. 12*99451b44SJordan Rupprecht // If we correctly set the deleted implicit copy constructor in NoCopyCstr then this 13*99451b44SJordan Rupprecht // should have propagated to this record and Clang won't crash. IndirectlyDeletedCopyCstrIndirectlyDeletedCopyCstr14*99451b44SJordan Rupprecht IndirectlyDeletedCopyCstr() { //%self.expect_expr("IndirectlyDeletedCopyCstr x; 1+1", result_type="int", result_value="2") 15*99451b44SJordan Rupprecht //%self.dbg.GetCommandInterpreter().HandleCompletion("e ", len("e "), 0, -1, lldb.SBStringList()) 16*99451b44SJordan Rupprecht } 17*99451b44SJordan Rupprecht }; main()18*99451b44SJordan Rupprechtint main() { 19*99451b44SJordan Rupprecht IndirectlyDeletedCopyCstr{}; 20*99451b44SJordan Rupprecht } 21