]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/32108 (ICE with __label__ outside of block scope)
authorPaolo Carlini <pcarlini@suse.de>
Mon, 30 Jul 2007 15:38:39 +0000 (15:38 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Mon, 30 Jul 2007 15:38:39 +0000 (15:38 +0000)
cp/
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.

From-SVN: r127064

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

index 50bff48ec6cef4858a26e28d8a8397cd97dccef9..a35ffdf33bbc2530a8963833e7714e7700c1ff2f 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-28  Simon Martin  <simartin@users.sourceforge.net>
            Mark Mitchell  <mark@codesourcery.com>
 
index 8ad197858d0f359d1dc62345ed4b47802a9a70be..9c37b36cea340762206cb272778da50abe5694d2 100644 (file)
@@ -1320,8 +1320,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 8372068f7780d509d02c79c3cd6fe1a2a4f474ef..7a904c901d39bb2e1497808dde9b7d2dff4466b9 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-28  Simon Martin  <simartin@users.sourceforge.net>
 
        PR c++/30917
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" }