diff options
author | Jakub Jelinek <jakub@redhat.com> | 2005-05-19 09:37:45 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2005-05-19 09:37:45 +0200 |
commit | 389c6c8b5b9e67ed40847e3052a12a87b12e9bef (patch) | |
tree | 23a31b01e3a536d79042437defa6f7754629aaf9 | |
parent | f0cd747eb3b1c297945e87b2a322a06367b840c6 (diff) | |
download | gcc-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
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/decl.c | 25 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/extern1.C | 14 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/tls/diag-2.C | 2 |
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" } */ }; |