11d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith// RUN: %clang_cc1 -std=c++11 -verify %s
21d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smithstruct A { // expected-note 2{{candidate}}
31d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith  A(int); // expected-note {{candidate}}
41d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith  int n;
51d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith};
61d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smithint a = A().n; // expected-error {{no matching constructor}}
71d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith
81d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smithstruct B {
95bdaac5454d93d1dcdc2319818497b685be56fcfRichard Smith  B() = delete; // expected-note 3{{here}}
101d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith  int n;
111d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith};
121d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smithint b = B().n; // expected-error {{call to deleted}}
131d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith
146c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smithstruct C {
156c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smith  B b; // expected-note {{deleted default constructor}}
161d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith};
17e4e68d45f89ff4899d30cbd196603d09b7fbc150Douglas Gregorint c = C().b.n; // expected-error {{call to implicitly-deleted default}}
181d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith
196c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smithstruct D {
206c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smith  D() = default; // expected-note {{here}}
215bdaac5454d93d1dcdc2319818497b685be56fcfRichard Smith  B b; // expected-note {{'b' has a deleted default constructor}}
221d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith};
23e4e68d45f89ff4899d30cbd196603d09b7fbc150Douglas Gregorint d = D().b.n; // expected-error {{call to implicitly-deleted default}}
241d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith
251d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smithstruct E {
261d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith  E() = default;
271d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith  int n;
281d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith};
291d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smithint e = E().n; // ok
301d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith
311d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smithstruct F {
321d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith  F();
331d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith  int n;
341d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith};
351d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smithint f = F().n; // ok
361d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith
376c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smithunion G {
386c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smith  F f; // expected-note {{non-trivial default constructor}}
391d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith};
40e4e68d45f89ff4899d30cbd196603d09b7fbc150Douglas Gregorint g = G().f.n; // expected-error {{call to implicitly-deleted default}}
411d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith
421d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smithstruct H {
431d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith  int n;
441d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smithprivate:
451d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith  H(); // expected-note {{here}}
461d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith};
471d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smithint h = H().n; // expected-error {{private constructor}}
481d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith
496c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smithstruct I {
506c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smith  H h; // expected-note {{inaccessible default constructor}}
511d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith};
52e4e68d45f89ff4899d30cbd196603d09b7fbc150Douglas Gregorint i = I().h.n; // expected-error {{call to implicitly-deleted default}}
531d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith
541d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smithstruct J {
551d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith  J();
561d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith  virtual int f();
571d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith  int n;
581d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith};
591d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smithint j1 = J().n; // ok
601d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smithint j2 = J().f(); // ok
611d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith
626c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smithunion K {
636c4c36c4ed1007143f5b8655eb68b313a7e12e76Richard Smith  J j; // expected-note 2{{non-trivial default constructor}}
641d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith  int m;
651d0c9a8d0573d1f670f484cc17aa94f06be971a5Richard Smith};
66e4e68d45f89ff4899d30cbd196603d09b7fbc150Douglas Gregorint k1 = K().j.n; // expected-error {{call to implicitly-deleted default}}
67e4e68d45f89ff4899d30cbd196603d09b7fbc150Douglas Gregorint k2 = K().j.f(); // expected-error {{call to implicitly-deleted default}}
68