re PR c++/50114 (ICE with declaration inside for statement)
authorJason Merrill <jason@redhat.com>
Tue, 30 Aug 2011 21:27:18 +0000 (17:27 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Tue, 30 Aug 2011 21:27:18 +0000 (17:27 -0400)
PR c++/50114
* decl.c (poplevel): Disable for scope compatibility hack
in C++11 mode.

From-SVN: r178338

gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-for.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/forscope2.C

index c2c00a7..799fc2a 100644 (file)
@@ -1,5 +1,9 @@
 2011-08-30  Jason Merrill  <jason@redhat.com>
 
+       PR c++/50114
+       * decl.c (poplevel): Disable for scope compatibility hack
+       in C++11 mode.
+
        PR c++/50220
        * semantics.c (add_capture): Call complete_type for copy.
 
index c375cf7..9090b11 100644 (file)
@@ -643,6 +643,9 @@ poplevel (int keep, int reverse, int functionbody)
   for (link = decls; link; link = TREE_CHAIN (link))
     {
       if (leaving_for_scope && TREE_CODE (link) == VAR_DECL
+         /* It's hard to make this ARM compatibility hack play nicely with
+            lambdas, and it really isn't necessary in C++11 mode.  */
+         && cxx_dialect < cxx0x
          && DECL_NAME (link))
        {
          tree name = DECL_NAME (link);
index a8fbdd6..9cc012f 100644 (file)
@@ -1,3 +1,8 @@
+2011-08-30  Jason Merrill  <jason@redhat.com>
+
+       PR c++/50114
+       * g++.dg/cpp0x/lambda/lambda-for.C: New.
+
 2011-08-30  Uros Bizjak  <ubizjak@gmail.com>
 
        * gcc.target/i386/fma-compile.c: Escape [ and ] in scan strings.
diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-for.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-for.C
new file mode 100644 (file)
index 0000000..f161da8
--- /dev/null
@@ -0,0 +1,12 @@
+// PR c++/50114
+// { dg-options "-std=c++0x -w" }
+
+int open()
+{
+  int *x2feed_i = 0;
+  auto insert_feed = [&](unsigned char venue, int* newfeed)
+  {
+     for(int x2feed_i = 1; 0; ) ;
+     x2feed_i = newfeed;
+  };
+}
index b883eff..4c63bab 100644 (file)
@@ -1,5 +1,5 @@
 // { dg-do compile }
-// { dg-options -fpermissive }
+// { dg-options "-fpermissive -std=c++98" }
 
 // Copyright (C) 2001 Free Software Foundation, Inc.
 // Contributed by Nathan Sidwell 4 Sept 2001 <nathan@codesourcery.com>