re PR c++/52671 (ICE with misplaced attribute on enum)

PR c++/52671
	* decl.c (check_tag_decl): Only use CLASSTYPE_TEMPLATE_INSTANTIATION
	on CLASS_TYPE_P types.

	* g++.dg/ext/attrib44.C: New test.

From-SVN: r185709
This commit is contained in:
Jakub Jelinek 2012-03-22 21:25:02 +01:00 committed by Jakub Jelinek
parent c140ddf392
commit d4655dc7dd
4 changed files with 17 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2012-03-22 Jakub Jelinek <jakub@redhat.com>
PR c++/52671
* decl.c (check_tag_decl): Only use CLASSTYPE_TEMPLATE_INSTANTIATION
on CLASS_TYPE_P types.
2012-03-20 Jason Merrill <jason@redhat.com>
* lex.c (init_reswords): Use >= for cxx_dialect test.

View File

@ -4219,7 +4219,8 @@ check_tag_decl (cp_decl_specifier_seq *declspecs)
if (declspecs->attributes && warn_attributes)
{
location_t loc;
if (!CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type))
if (!CLASS_TYPE_P (declared_type)
|| !CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type))
/* For a non-template class, use the name location. */
loc = location_of (declared_type);
else

View File

@ -1,3 +1,8 @@
2012-03-22 Jakub Jelinek <jakub@redhat.com>
PR c++/52671
* g++.dg/ext/attrib44.C: New test.
2012-03-22 Jan Hubicka <jh@suse.cz>
PR middle-end/51737

View File

@ -0,0 +1,4 @@
// PR c++/52671
// { dg-do compile }
__attribute__ ((deprecated)) enum E { E0 }; // { dg-warning "attribute ignored in declaration of" }
// { dg-message "must follow the" "" { target *-*-* } 3 }