xref: /aosp_15_r20/external/clang/test/PCH/cxx1y-default-initializer.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -pedantic -std=c++1y %s -o %t
2*67e74705SXin Li // RUN: %clang_cc1 -pedantic -std=c++1y -emit-pch %s -o %t
3*67e74705SXin Li // RUN: %clang_cc1 -pedantic -std=c++1y -include-pch %t -verify %s
4*67e74705SXin Li 
5*67e74705SXin Li #ifndef HEADER_INCLUDED
6*67e74705SXin Li 
7*67e74705SXin Li #define HEADER_INCLUDED
8*67e74705SXin Li 
9*67e74705SXin Li struct A {
10*67e74705SXin Li   int x;
11*67e74705SXin Li   int y = 3;
12*67e74705SXin Li   int z = x + y;
13*67e74705SXin Li };
make()14*67e74705SXin Li template<typename T> constexpr A make() { return A {}; }
make(T t)15*67e74705SXin Li template<typename T> constexpr A make(T t) { return A { t }; }
16*67e74705SXin Li 
17*67e74705SXin Li struct B {
18*67e74705SXin Li   int z1, z2 = z1;
BB19*67e74705SXin Li   constexpr B(int k) : z1(k) {}
20*67e74705SXin Li };
21*67e74705SXin Li 
22*67e74705SXin Li #else
23*67e74705SXin Li 
24*67e74705SXin Li static_assert(A{}.z == 3, "");
25*67e74705SXin Li static_assert(A{1}.z == 4, "");
26*67e74705SXin Li static_assert(A{.y = 5}.z == 5, ""); // expected-warning {{C99}}
27*67e74705SXin Li static_assert(A{3, .y = 1}.z == 4, ""); // expected-warning {{C99}}
28*67e74705SXin Li static_assert(make<int>().z == 3, "");
29*67e74705SXin Li static_assert(make<int>(12).z == 15, "");
30*67e74705SXin Li 
31*67e74705SXin Li #endif
32