diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2011-09-27 21:52:19 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2011-09-27 21:52:19 +0000 |
commit | 2427db200d7e56fda1cf034ca0d1cb2999b5b970 (patch) | |
tree | 223b7775cf09fa658f31f839b5f3885bcee2cc6b | |
parent | 82aa87223192a954c5bee4fc5d7dadae0d120b7e (diff) | |
download | gcc-2427db200d7e56fda1cf034ca0d1cb2999b5b970.zip gcc-2427db200d7e56fda1cf034ca0d1cb2999b5b970.tar.gz gcc-2427db200d7e56fda1cf034ca0d1cb2999b5b970.tar.bz2 |
re PR c++/31489 (error says struct when it should say class)
/cp
2011-09-27 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/31489
* parser.c (cp_parser_elaborated_type_specifier): For RECORD_TYPE,
set CLASSTYPE_DECLARED_CLASS.
/testsuite
2011-09-27 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/31489
* g++.dg/parse/error40.C: New.
* g++.dg/warn/incomplete1.C: Adjust.
From-SVN: r179293
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/parser.c | 8 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/error40.C | 10 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/warn/incomplete1.C | 2 |
5 files changed, 30 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 24068c8..596d4a9 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2011-09-27 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/31489 + * parser.c (cp_parser_elaborated_type_specifier): For RECORD_TYPE, + set CLASSTYPE_DECLARED_CLASS. + 2011-09-27 Jakub Jelinek <jakub@redhat.com> * decl.c (duplicate_decls): If compatible stpcpy prototype diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 9600aa9..83d7b71 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -13423,7 +13423,13 @@ cp_parser_elaborated_type_specifier (cp_parser* parser, } if (tag_type != enum_type) - cp_parser_check_class_key (tag_type, type); + { + /* Indicate whether this class was declared as a `class' or as a + `struct'. */ + if (TREE_CODE (type) == RECORD_TYPE) + CLASSTYPE_DECLARED_CLASS (type) = (tag_type == class_type); + cp_parser_check_class_key (tag_type, type); + } /* A "<" cannot follow an elaborated type specifier. If that happens, the user was probably trying to form a template-id. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1f47b45..01eed5c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2011-09-27 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/31489 + * g++.dg/parse/error40.C: New. + * g++.dg/warn/incomplete1.C: Adjust. + 2011-09-27 Jan Hubicka <jh@suse.cz> PR middle-end/49463 diff --git a/gcc/testsuite/g++.dg/parse/error40.C b/gcc/testsuite/g++.dg/parse/error40.C new file mode 100644 index 0000000..9ab7552 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/error40.C @@ -0,0 +1,10 @@ +// PR c++/31489 + +class foo; // { dg-error "'class foo'" } +struct bar; // { dg-error "'struct bar'" } + +int main() +{ + foo* f = new foo; // { dg-error "'class foo'" } + bar* b = new bar; // { dg-error "'struct bar'" } +} diff --git a/gcc/testsuite/g++.dg/warn/incomplete1.C b/gcc/testsuite/g++.dg/warn/incomplete1.C index 26cfe2e..9dc645d 100644 --- a/gcc/testsuite/g++.dg/warn/incomplete1.C +++ b/gcc/testsuite/g++.dg/warn/incomplete1.C @@ -9,7 +9,7 @@ // (But the deletion does not constitute an ill-formed program. So the // program should nevertheless compile, but it should give a warning.) -class A; // { dg-warning "forward declaration of 'struct A'" "" } +class A; // { dg-warning "forward declaration of 'class A'" "" } A *a; // { dg-warning "'a' has incomplete type" "" } |