]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR c++/46538 (ICE: SIGSEGV in cp_make_fname_decl (decl.c:3690) on invali...
authorJakub Jelinek <jakub@redhat.com>
Tue, 7 Dec 2010 18:58:18 +0000 (19:58 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 7 Dec 2010 18:58:18 +0000 (19:58 +0100)
Backport from mainline
2010-11-20  Jakub Jelinek  <jakub@redhat.com>

PR c++/46538
* decl.c (cp_make_fname_decl): Return error_mark_node if
current_binding_level has already sk_function_parms kind.

* g++.dg/other/error34.C: New test.

From-SVN: r167559

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

index 1b491594c7133b5775ca4f07864914b58f87c70a..e780d2a25bae8e89f83a7aeea42c218eec2f69f7 100644 (file)
@@ -1,3 +1,12 @@
+2010-12-07  Jakub Jelinek  <jakub@redhat.com>
+
+       Backport from mainline
+       2010-11-20  Jakub Jelinek  <jakub@redhat.com>
+       PR c++/46538
+       * decl.c (cp_make_fname_decl): Return error_mark_node if
+       current_binding_level has already sk_function_parms kind.
+
 2010-10-01  Release Manager
 
        * GCC 4.4.5 released.
index 6f208764ea54087a1d8bd56307fcf659c92df689..5b05d5627c644bd89d306ae572411d4fa3f0a239 100644 (file)
@@ -3536,6 +3536,8 @@ cp_make_fname_decl (tree id, int type_dep)
   if (current_function_decl)
     {
       struct cp_binding_level *b = current_binding_level;
+      if (b->kind == sk_function_parms)
+       return error_mark_node;
       while (b->level_chain->kind != sk_function_parms)
        b = b->level_chain;
       pushdecl_with_scope (decl, b, /*is_friend=*/false);
index 80b9b208f2bf34ac44e35eae8498a73aa35845d9..f65d67d21d78b3e16d1acaa6aa41e1d523d662c3 100644 (file)
@@ -1,7 +1,13 @@
 2010-12-07  Jakub Jelinek  <jakub@redhat.com>
 
        Backport from mainline
+       2010-11-20  Jakub Jelinek  <jakub@redhat.com>
+       PR c++/46538
+       * g++.dg/other/error34.C: New test.
+
        2010-11-18  Jakub Jelinek  <jakub@redhat.com>
+
        PR middle-end/46534
        * gcc.c-torture/compile/pr46534.c: New test.
 
diff --git a/gcc/testsuite/g++.dg/other/error34.C b/gcc/testsuite/g++.dg/other/error34.C
new file mode 100644 (file)
index 0000000..10a782d
--- /dev/null
@@ -0,0 +1,6 @@
+// PR c++/46538
+// { dg-do compile }
+// { dg-options "" }
+
+S () : str(__PRETTY_FUNCTION__) {}     // { dg-error "forbids declaration" }
+// { dg-error "only constructors" "" { target *-*-* } 5 }