From: Dodji Seketeli Date: Tue, 6 Dec 2011 10:06:49 +0000 (+0000) Subject: PR c++/51427 - Better diagnostic when union/struct tags conflicts X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=230f834641d980c3a31aeebb7971719721d26831;p=gcc.git PR c++/51427 - Better diagnostic when union/struct tags conflicts gcc/cp/ PR c++/51427 * parser.c (cp_parser_check_class_key): Add note about earlier declaration. gcc/testsuite/ PR c++/51427 * g++.dg/diagnostic/wrong-tag-1.C From-SVN: r182043 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 25e381a0b84..4391a478e9a 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2011-12-06 Dodji Seketeli + + PR c++/51427 + * parser.c (cp_parser_check_class_key): Add note about earlier + declaration. + 2011-12-05 Fabien Chêne PR c++/51319 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 9e7a398cb3f..daf2ded45dc 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -22544,10 +22544,14 @@ static void cp_parser_check_class_key (enum tag_types class_key, tree type) { if ((TREE_CODE (type) == UNION_TYPE) != (class_key == union_type)) - permerror (input_location, "%qs tag used in naming %q#T", - class_key == union_type ? "union" - : class_key == record_type ? "struct" : "class", - type); + { + permerror (input_location, "%qs tag used in naming %q#T", + class_key == union_type ? "union" + : class_key == record_type ? "struct" : "class", + type); + inform (DECL_SOURCE_LOCATION (TYPE_NAME (type)), + "%q#T was previously declared here", type); + } } /* Issue an error message if DECL is redeclared with different diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 12709b770b7..e920bf7e275 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-12-06 Dodji Seketeli + + PR c++/51427 + * g++.dg/diagnostic/wrong-tag-1.C + 2011-12-05 Fabien Chêne PR c++/51319 diff --git a/gcc/testsuite/g++.dg/diagnostic/wrong-tag-1.C b/gcc/testsuite/g++.dg/diagnostic/wrong-tag-1.C new file mode 100644 index 00000000000..2cf75f8bd7a --- /dev/null +++ b/gcc/testsuite/g++.dg/diagnostic/wrong-tag-1.C @@ -0,0 +1,4 @@ +// Origin PR c++/51427 + +typedef struct _GMutex GMutex; // { dg-message "previously declared here"} +typedef union _GMutex GMutex; // { dg-error "tag used in naming" }