19f7df0c0SRichard Smith // RUN: %clang_cc1 -std=c++1z -verify %s
29f7df0c0SRichard Smith 
39f7df0c0SRichard Smith namespace pr32864_0 {
49f7df0c0SRichard Smith   struct transfer_t {
59f7df0c0SRichard Smith     void *fctx;
69f7df0c0SRichard Smith   };
79f7df0c0SRichard Smith   template <typename Ctx> class record {
run()89f7df0c0SRichard Smith     void run() {
99f7df0c0SRichard Smith       transfer_t t;
109f7df0c0SRichard Smith       Ctx from{t.fctx};
119f7df0c0SRichard Smith     }
129f7df0c0SRichard Smith   };
139f7df0c0SRichard Smith }
149f7df0c0SRichard Smith 
159f7df0c0SRichard Smith namespace pr33140_0a {
169f7df0c0SRichard Smith   struct S {
Spr33140_0a::S179f7df0c0SRichard Smith     constexpr S(const int &a = 0) {}
189f7df0c0SRichard Smith   };
foo(void)199f7df0c0SRichard Smith   void foo(void) { S s[2] = {}; }
209f7df0c0SRichard Smith }
219f7df0c0SRichard Smith 
229f7df0c0SRichard Smith namespace pr33140_0b {
239f7df0c0SRichard Smith   bool bar(float const &f = 0);
foo()249f7df0c0SRichard Smith   bool foo() { return bar() && bar(); }
259f7df0c0SRichard Smith }
269f7df0c0SRichard Smith 
279f7df0c0SRichard Smith namespace pr33140_2 {
289f7df0c0SRichard Smith   // FIXME: The declaration of 'b' below should lifetime-extend two int
29d87aab93SRichard Smith   // temporaries.
30afe48f9dSRichard Smith   struct A { int &&r = 0; }; // expected-note 2{{initializing field 'r' with default member initializer}}
319f7df0c0SRichard Smith   struct B { A x, y; };
32afe48f9dSRichard Smith   B b = {}; // expected-warning 2{{not supported}}
339f7df0c0SRichard Smith }
349f7df0c0SRichard Smith 
359f7df0c0SRichard Smith namespace pr33140_3 {
369f7df0c0SRichard Smith   typedef struct Y { unsigned int c; } Y_t;
379f7df0c0SRichard Smith   struct X {
389f7df0c0SRichard Smith     Y_t a;
399f7df0c0SRichard Smith   };
40*5030928dSRichard Smith   struct X foo[2] = {[0 ... 1] = {.a = (Y_t){.c = 0}}}; // expected-warning {{C99 extension}}
419f7df0c0SRichard Smith }
429f7df0c0SRichard Smith 
439f7df0c0SRichard Smith namespace pr33140_6 {
449f7df0c0SRichard Smith   struct Y { unsigned int c; };
459f7df0c0SRichard Smith   struct X { struct Y *p; };
f()469f7df0c0SRichard Smith   int f() {
479f7df0c0SRichard Smith     // FIXME: This causes clang to crash.
489f7df0c0SRichard Smith     //return (struct X[2]){ [0 ... 1] = { .p = &(struct Y&)(struct Y&&)(struct Y){0} } }[0].p->c;
499f7df0c0SRichard Smith     return 0;
509f7df0c0SRichard Smith   }
519f7df0c0SRichard Smith }
529f7df0c0SRichard Smith 
539f7df0c0SRichard Smith namespace pr33140_10 {
549f7df0c0SRichard Smith   int a(const int &n = 0);
b()559f7df0c0SRichard Smith   bool b() { return a() == a(); }
569f7df0c0SRichard Smith }
57