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 Rupprecht int main() {
19*99451b44SJordan Rupprecht   IndirectlyDeletedCopyCstr{};
20*99451b44SJordan Rupprecht }
21