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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@179293
138bc75d-0d04-0410-961f-
82ee72b054a4
+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
}
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. */
+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
--- /dev/null
+// 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'" }
+}
// (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" "" }