re PR c++/46065 (ICE: tree check: expected tree that contains 'decl minimal' structur...
authorNathan Froyd <froydnj@codesourcery.com>
Wed, 10 Nov 2010 21:05:50 +0000 (21:05 +0000)
committerNathan Froyd <froydnj@gcc.gnu.org>
Wed, 10 Nov 2010 21:05:50 +0000 (21:05 +0000)
gcc/cp/
PR c++/46065
* decl.c (poplevel_named_label_1): Use TREE_CHAIN if necessary.

gcc/testsuite/
PR c++/46065
* g++.dg/pr46065.C: New test.

From-SVN: r166558

gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/pr46065.C [new file with mode: 0644]

index 51e21714091fca4bb89400ab484dece613fa81df..04f95bbbc977f34b82b06d1d1c0d91a9259b6139 100644 (file)
@@ -1,3 +1,8 @@
+2010-11-10  Nathan Froyd  <froydnj@codesourcery.com>
+
+       PR c++/46065
+       * decl.c (poplevel_named_label_1): Use TREE_CHAIN if necessary.
+
 2010-11-09  Jakub Jelinek  <jakub@redhat.com>
 
        PR c++/45894
index c37284083687d88555d286b0e0ccfb4946e7eaa0..93af4b45ff741fd9e4c49cb73abbf23f149de2f6 100644 (file)
@@ -475,7 +475,11 @@ poplevel_named_label_1 (void **slot, void *data)
     {
       tree decl;
 
-      for (decl = ent->names_in_scope; decl; decl = DECL_CHAIN (decl))
+      /* ENT->NAMES_IN_SCOPE may contain a mixture of DECLs and
+        TREE_LISTs representing OVERLOADs, so be careful.  */
+      for (decl = ent->names_in_scope; decl; decl = (DECL_P (decl)
+                                                    ? DECL_CHAIN (decl)
+                                                    : TREE_CHAIN (decl)))
        if (decl_jump_unsafe (decl))
          VEC_safe_push (tree, gc, ent->bad_decls, decl);
 
index 0d711956ced75bc764d1c54833f41a578bcd0324..5560edeb4ac2a3d86e6b6f1bdfb3ca85f37c93ed 100644 (file)
@@ -1,3 +1,8 @@
+2010-11-10  Nathan Froyd  <froydnj@codesourcery.com>
+
+       PR c++/46065
+       * g++.dg/pr46065.C: New test.
+
 2010-11-10  Jan Hubicka  <jh@suse.cz>
 
        PR tree-optimize/33172
diff --git a/gcc/testsuite/g++.dg/pr46065.C b/gcc/testsuite/g++.dg/pr46065.C
new file mode 100644 (file)
index 0000000..75c171d
--- /dev/null
@@ -0,0 +1,11 @@
+// PR c++/46065
+// { dg-do compile }
+
+void bar ();
+
+void
+foo ()
+{
+  using ::bar;
+label:;
+}