summaryrefslogtreecommitdiffstats
path: root/clang/test/Sema/block-labels.c
diff options
context:
space:
mode:
authorSteve Naroff <snaroff@apple.com>2009-02-28 16:48:43 +0000
committerSteve Naroff <snaroff@apple.com>2009-02-28 16:48:43 +0000
commitd123bd05cab62bb3c641d0c2343fd94e6a96235e (patch)
tree710a9706402f096e1bed6df64d28b5e65dccab2c /clang/test/Sema/block-labels.c
parent638b836aab3e6df7a568913fad46fd70225a1d21 (diff)
downloadbcm5719-llvm-d123bd05cab62bb3c641d0c2343fd94e6a96235e.tar.gz
bcm5719-llvm-d123bd05cab62bb3c641d0c2343fd94e6a96235e.zip
Fix <rdar://problem/6451399> problems with labels and blocks.
- Move the 'LabelMap' from Sema to Scope. To avoid layering problems, the second element is now a 'StmtTy *', which makes the LabelMap a bit more verbose to deal with. - Add 'ActiveScope' to Sema. Managed by ActOnStartOfFunctionDef(), ObjCActOnStartOfMethodDef(), ActOnBlockStmtExpr(). - Changed ActOnLabelStmt(), ActOnGotoStmt(), ActOnAddrLabel(), and ActOnFinishFunctionBody() to use the new ActiveScope. - Added FIXME to workaround in ActOnFinishFunctionBody() (for dealing with C++ nested functions). llvm-svn: 65694
Diffstat (limited to 'clang/test/Sema/block-labels.c')
-rw-r--r--clang/test/Sema/block-labels.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/clang/test/Sema/block-labels.c b/clang/test/Sema/block-labels.c
new file mode 100644
index 00000000000..15e6f61cede
--- /dev/null
+++ b/clang/test/Sema/block-labels.c
@@ -0,0 +1,17 @@
+// RUN: clang %s -verify -fblocks -fsyntax-only
+
+int a() {
+ A:if (1) xx();
+ return ^{A:return 1;}();
+}
+int b() {
+ A: return ^{int a; A:return 1;}();
+}
+
+int d() {
+ A: return ^{int a; A: a = ^{int a; A:return 1;}() + ^{int b; A:return 2;}(); return a; }();
+}
+
+int c() {
+ goto A; return ^{ A:return 1;}(); // expected-error {{use of undeclared label 'A'}}
+}
OpenPOWER on IntegriCloud