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