xref: /llvm-project/clang/test/CXX/special/class.init/class.base.init/p9-0x.cpp (revision 9ca5c425826329d5b23300bbc8a1a7c10a19c64d)
1*9ca5c425SRichard Smith // RUN: %clang_cc1 -triple x86_64-pc-linux-gnu -std=c++11 %s -O1 -emit-llvm -o - | FileCheck %s
2938f40b5SRichard Smith 
3938f40b5SRichard Smith struct S {
4938f40b5SRichard Smith   int n = 10;
5938f40b5SRichard Smith   int m = 2 * n;
6938f40b5SRichard Smith 
SS7938f40b5SRichard Smith   S() {}
SS8938f40b5SRichard Smith   S(int a) : n(a) {}
SS9938f40b5SRichard Smith   S(int a, int b) : n(a), m(b) {}
10938f40b5SRichard Smith 
11938f40b5SRichard Smith   struct T {
12938f40b5SRichard Smith     T *that = this;
13938f40b5SRichard Smith   };
14938f40b5SRichard Smith };
15938f40b5SRichard Smith 
16938f40b5SRichard Smith template<typename T>
17938f40b5SRichard Smith struct U {
18938f40b5SRichard Smith   T *r = &q;
19938f40b5SRichard Smith   T q = 42;
20938f40b5SRichard Smith   U *p = this;
21938f40b5SRichard Smith };
22938f40b5SRichard Smith 
23938f40b5SRichard Smith S a;
24938f40b5SRichard Smith // CHECK: @a = {{.*}} { i32 10, i32 20 }
25938f40b5SRichard Smith 
26938f40b5SRichard Smith S b(5);
27938f40b5SRichard Smith // CHECK: @b = {{.*}} { i32 5, i32 10 }
28938f40b5SRichard Smith 
29938f40b5SRichard Smith S c(3, 9);
30938f40b5SRichard Smith // CHECK: @c = {{.*}} { i32 3, i32 9 }
31938f40b5SRichard Smith 
32938f40b5SRichard Smith S::T d;
33938f40b5SRichard Smith // CHECK: @d = {{.*}} { {{.*}} @d }
34938f40b5SRichard Smith 
35938f40b5SRichard Smith U<S> e;
36938f40b5SRichard Smith // CHECK: @e = {{.*}} { {{.*}} { i32 42, i32 84 }, {{.*}} @e }
37