aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2005-05-19 09:37:45 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2005-05-19 09:37:45 +0200
commit389c6c8b5b9e67ed40847e3052a12a87b12e9bef (patch)
tree23a31b01e3a536d79042437defa6f7754629aaf9 /gcc
parentf0cd747eb3b1c297945e87b2a322a06367b840c6 (diff)
downloadgcc-389c6c8b5b9e67ed40847e3052a12a87b12e9bef.zip
gcc-389c6c8b5b9e67ed40847e3052a12a87b12e9bef.tar.gz
gcc-389c6c8b5b9e67ed40847e3052a12a87b12e9bef.tar.bz2
re PR c++/21495 (internal compiler error: Segmentation fault)
PR c++/21495 * decl.c (grokdeclarator): Fix "storage class specified for" error reporting. * g++.dg/parse/extern1.C: New test. * g++.dg/tls/diag-2.C: Adjust expected error message wording. From-SVN: r99960
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/decl.c25
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/g++.dg/parse/extern1.C14
-rw-r--r--gcc/testsuite/g++.dg/tls/diag-2.C2
5 files changed, 28 insertions, 25 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 1cc6dc0..0fd719d 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2005-05-19 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/21495
+ * decl.c (grokdeclarator): Fix "storage class specified for"
+ error reporting.
+
2005-05-19 Kazu Hirata <kazu@cs.umass.edu>
* parser.c: Fix comment typos.
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index 529cfd5..eb8db91 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -7002,30 +7002,7 @@ grokdeclarator (const cp_declarator *declarator,
else
{
if (decl_context == FIELD)
- {
- tree tmp = NULL_TREE;
- int op = 0;
-
- if (declarator)
- {
- /* Avoid trying to get an operand off an identifier node. */
- if (declarator->kind != cdk_id)
- tmp = declarator->declarator->u.id.unqualified_name;
- else
- tmp = declarator->u.id.unqualified_name;
- op = IDENTIFIER_OPNAME_P (tmp);
- if (IDENTIFIER_TYPENAME_P (tmp))
- {
- if (is_typename_at_global_scope (tmp))
- name = IDENTIFIER_POINTER (tmp);
- else
- name = "<invalid operator>";
- }
- }
- error ("storage class specified for %s %qs",
- op ? "member operator" : "field",
- name);
- }
+ error ("storage class specified for %qs", name);
else
{
if (decl_context == PARM || decl_context == CATCHPARM)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 6f91161..19435c3 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2005-05-19 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/21495
+ * g++.dg/parse/extern1.C: New test.
+ * g++.dg/tls/diag-2.C: Adjust expected error message wording.
+
2005-05-19 Eric Botcazou <ebotcazou@libertysurf.fr>
* gcc.dg/c99-math.h: New.
diff --git a/gcc/testsuite/g++.dg/parse/extern1.C b/gcc/testsuite/g++.dg/parse/extern1.C
new file mode 100644
index 0000000..cc95fa6
--- /dev/null
+++ b/gcc/testsuite/g++.dg/parse/extern1.C
@@ -0,0 +1,14 @@
+// PR c++/21495
+// { dg-do compile }
+
+class A
+{
+ extern void *copy (void) // { dg-error "storage class specified" }
+ {
+ return 0;
+ }
+ extern A &operator= (const A &) // { dg-error "storage class specified" }
+ {
+ return *this;
+ }
+};
diff --git a/gcc/testsuite/g++.dg/tls/diag-2.C b/gcc/testsuite/g++.dg/tls/diag-2.C
index 6cd539d..293409d 100644
--- a/gcc/testsuite/g++.dg/tls/diag-2.C
+++ b/gcc/testsuite/g++.dg/tls/diag-2.C
@@ -21,5 +21,5 @@ __thread void f4 () { } /* { dg-error "invalid for function" } */
void bar(__thread int p1); /* { dg-error "(invalid in parameter)|(specified for parameter)" } */
struct A {
- __thread int i; /* { dg-error "specified for field" } */
+ __thread int i; /* { dg-error "storage class specified" } */
};