]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
cp/
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 30 Jul 2007 09:37:20 +0000 (09:37 +0000)
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 30 Jul 2007 09:37:20 +0000 (09:37 +0000)
2007-07-30  Paolo Carlini  <pcarlini@suse.de>

PR c++/32108
* semantics.c (finish_label_stmt): Reject the __label__
extension outside function scopes.

testsuite/
2007-07-30  Paolo Carlini  <pcarlini@suse.de>

PR c++/32108
* g++.dg/ext/label6.C: New.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@127059 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/semantics.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/ext/label6.C [new file with mode: 0644]

index 24006fefdaa70f431d3fd90d8f334972dd4d9758..8004e19149324515e13613b395069de4d0e09769 100644 (file)
@@ -1,3 +1,9 @@
+2007-07-30  Paolo Carlini  <pcarlini@suse.de>
+
+       PR c++/32108
+       * semantics.c (finish_label_stmt): Reject the __label__
+       extension outside function scopes.
+
 2007-07-29  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
        * parser.c (eof_token): Un-constify.
index b03ec2f59ae9861394a45935a1d63b4753a80c77..d80cd2b1128ce6802fe5351ddf15b26218b7821d 100644 (file)
@@ -1343,8 +1343,13 @@ finish_label_stmt (tree name)
 void
 finish_label_decl (tree name)
 {
-  tree decl = declare_local_label (name);
-  add_decl_expr (decl);
+  if (!at_function_scope_p ())
+    {
+      error ("__label__ declarations are only allowed in function scopes");
+      return;
+    }
+
+  add_decl_expr (declare_local_label (name));
 }
 
 /* When DECL goes out of scope, make sure that CLEANUP is executed.  */
index 7d4be5e8b300992416bf70ac6ec5330155ff5c41..f60df69a862e22d7779359ab5051241f14410bae 100644 (file)
@@ -1,3 +1,8 @@
+2007-07-30  Paolo Carlini  <pcarlini@suse.de>
+
+       PR c++/32108
+       * g++.dg/ext/label6.C: New.
+
 2007-07-29  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        PR libfortran/32858
diff --git a/gcc/testsuite/g++.dg/ext/label6.C b/gcc/testsuite/g++.dg/ext/label6.C
new file mode 100644 (file)
index 0000000..d026777
--- /dev/null
@@ -0,0 +1,3 @@
+// PR c++/32108
+
+__label__ L; // { dg-error "function scopes" }