aboutsummaryrefslogtreecommitdiff
path: root/test/CXX/expr/expr.prim/expr.prim.lambda
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2012-05-16 17:01:33 +0000
committerDouglas Gregor <dgregor@apple.com>2012-05-16 17:01:33 +0000
commitd57f52ca4d0e9d5d42dd6947d1e66d693625cf2c (patch)
tree2fccc81f2b9b7d2ce2da0dd34c2171db49b12356 /test/CXX/expr/expr.prim/expr.prim.lambda
parent29a93f810ae5277446f610e8b6cdf0985febb989 (diff)
Clean up r156925, so that we only mark the capturing DeclRefExpr of a
lambda as referring to a local in an enclosing scope if we're in the enclosing scope of the lambda (not it's function call operator). Also, turn the test into an IR generation test, since that's where the crashes occurred. Really fixes PR12746 / <rdar://problem/11465120>. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@156926 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CXX/expr/expr.prim/expr.prim.lambda')
-rw-r--r--test/CXX/expr/expr.prim/expr.prim.lambda/blocks-irgen.mm29
-rw-r--r--test/CXX/expr/expr.prim/expr.prim.lambda/blocks.mm22
2 files changed, 29 insertions, 22 deletions
diff --git a/test/CXX/expr/expr.prim/expr.prim.lambda/blocks-irgen.mm b/test/CXX/expr/expr.prim/expr.prim.lambda/blocks-irgen.mm
new file mode 100644
index 0000000000..9adecd0ee3
--- /dev/null
+++ b/test/CXX/expr/expr.prim/expr.prim.lambda/blocks-irgen.mm
@@ -0,0 +1,29 @@
+// RUN: %clang_cc1 -std=c++11 -fblocks -emit-llvm -o - -triple x86_64-apple-darwin11.3 %s | FileCheck %s
+
+namespace PR12746 {
+ // CHECK: define zeroext i1 @_ZN7PR127462f1EPi
+ bool f1(int *x) {
+ // CHECK: store i8* bitcast (i1 (i8*)* @__f1_block_invoke_0 to i8*)
+ bool (^outer)() = ^ {
+ auto inner = [&]() -> bool {
+ return x == 0;
+ };
+ return inner();
+ };
+ return outer();
+ }
+
+ // CHECK: define internal zeroext i1 @__f1_block_invoke_0
+ // CHECK: call zeroext i1 @"_ZNK7PR127462f119__f1_block_invoke_03$_0clEv"
+
+ bool f2(int *x) {
+ auto outer = [&]() -> bool {
+ bool (^inner)() = ^ {
+ return x == 0;
+ };
+ return inner();
+ };
+ return outer();
+ }
+}
+
diff --git a/test/CXX/expr/expr.prim/expr.prim.lambda/blocks.mm b/test/CXX/expr/expr.prim/expr.prim.lambda/blocks.mm
index 941443a0d6..0c3fdb2d80 100644
--- a/test/CXX/expr/expr.prim/expr.prim.lambda/blocks.mm
+++ b/test/CXX/expr/expr.prim/expr.prim.lambda/blocks.mm
@@ -86,25 +86,3 @@ namespace overloading {
int &ir = accept_lambda_conv([](int x) { return x + 1; });
}
}
-
-namespace PR12746 {
- bool f1(int *x) {
- bool (^outer)() = ^ {
- auto inner = [&]() -> bool {
- return x == 0;
- };
- return inner();
- };
- return outer();
- }
-
- bool f2(int *x) {
- auto outer = [&]() -> bool {
- bool (^inner)() = ^ {
- return x == 0;
- };
- return inner();
- };
- return outer();
- }
-}