diff options
Diffstat (limited to 'test/CodeGenCXX/captured-statements.cpp')
-rw-r--r-- | test/CodeGenCXX/captured-statements.cpp | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/test/CodeGenCXX/captured-statements.cpp b/test/CodeGenCXX/captured-statements.cpp index fb35446..ebb3833 100644 --- a/test/CodeGenCXX/captured-statements.cpp +++ b/test/CodeGenCXX/captured-statements.cpp @@ -21,6 +21,8 @@ struct TestClass { Foo f; #pragma clang __debug captured { + static double inner = x; + (void)inner; f.y = x; } } @@ -29,22 +31,26 @@ struct TestClass { void test1() { TestClass c; c.MemberFunc(); - // CHECK-1: %[[Capture:struct\.anon[\.0-9]*]] = type { %struct.Foo*, %struct.TestClass* } + // CHECK-1: %[[Capture:struct\.anon[\.0-9]*]] = type { %struct.TestClass*, %struct.Foo* } + // CHECK-1: [[INNER:@.+]] = {{.+}} global double // CHECK-1: define {{.*}} void @_ZN9TestClass10MemberFuncEv // CHECK-1: alloca %struct.anon - // CHECK-1: getelementptr inbounds %[[Capture]]* %{{[^,]*}}, i32 0, i32 0 + // CHECK-1: getelementptr inbounds %[[Capture]], %[[Capture]]* %{{[^,]*}}, i32 0, i32 0 + // CHECK-1: getelementptr inbounds %[[Capture]], %[[Capture]]* %{{[^,]*}}, i32 0, i32 1 // CHECK-1: store %struct.Foo* %f, %struct.Foo** - // CHECK-1: getelementptr inbounds %[[Capture]]* %{{[^,]*}}, i32 0, i32 1 - // CHECK-1: call void @[[HelperName:[A-Za-z0-9_]+]](%[[Capture]]* + // CHECK-1: call void @[[HelperName:[\.A-Za-z0-9_]+]](%[[Capture]]* // CHECK-1: call {{.*}}FooD1Ev // CHECK-1: ret } // CHECK-1: define internal void @[[HelperName]] -// CHECK-1: getelementptr inbounds %[[Capture]]* {{[^,]*}}, i32 0, i32 1 -// CHECK-1: getelementptr inbounds %struct.TestClass* {{[^,]*}}, i32 0, i32 0 -// CHECK-1: getelementptr inbounds %[[Capture]]* {{[^,]*}}, i32 0, i32 0 +// CHECK-1: getelementptr inbounds %[[Capture]], %[[Capture]]* {{[^,]*}}, i32 0, i32 0 +// CHECK-1: call i32 @__cxa_guard_acquire( +// CHECK-1: store double %{{.+}}, double* [[INNER]], +// CHECK-1: call void @__cxa_guard_release( +// CHECK-1: getelementptr inbounds %struct.TestClass, %struct.TestClass* {{[^,]*}}, i32 0, i32 0 +// CHECK-1: getelementptr inbounds %[[Capture]], %[[Capture]]* {{[^,]*}}, i32 0, i32 1 void test2(int x) { int y = [&]() { @@ -62,9 +68,9 @@ void test2(int x) { // CHECK-2: call void @[[HelperName:["$_A-Za-z0-9]+]](%[[Capture:.*]]* // // CHECK-2: define internal void @[[HelperName]] - // CHECK-2: getelementptr inbounds %[[Capture]]* - // CHECK-2: load i32** - // CHECK-2: load i32* + // CHECK-2: getelementptr inbounds %[[Capture]], %[[Capture]]* + // CHECK-2: load i32*, i32** + // CHECK-2: load i32, i32* } void test3(int x) { @@ -88,7 +94,7 @@ void test4() { f.x = 5; } // CHECK-4-LABEL: define void @_Z5test4v - // CHECK-4: call void @[[HelperName:["$_A-Za-z0-9]+]](%[[Capture:.*]]* + // CHECK-4: call void @[[HelperName:[\."$_A-Za-z0-9]+]](%[[Capture:.*]]* // CHECK-4: ret void // // CHECK-4: define internal void @[[HelperName]] |