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