From: Richard Kenner Date: Mon, 11 Sep 1995 22:41:44 +0000 (-0400) Subject: (redeclaration_error_message): For TYPE_DECLs, return 0 if X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=692ce0fd55f4b1c5294371884ad1db1843069a26;p=gcc.git (redeclaration_error_message): For TYPE_DECLs, return 0 if TYPE_MAIN_VARIANT of old type is same as new type. From-SVN: r10311 --- diff --git a/gcc/c-decl.c b/gcc/c-decl.c index def045fda64..b6ffd614fd1 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -2385,6 +2385,15 @@ redeclaration_error_message (newdecl, olddecl) { if (flag_traditional && TREE_TYPE (newdecl) == TREE_TYPE (olddecl)) return 0; + /* pushdecl creates distinct types for TYPE_DECLs by calling + build_type_copy, so the above comparison generally fails. We do + another test against the TYPE_MAIN_VARIANT of the olddecl, which + is equivalent to what this code used to do before the build_type_copy + call. The variant type distinction should not matter for traditional + code, because it doesn't have type qualifiers. */ + if (flag_traditional + && TYPE_MAIN_VARIANT (TREE_TYPE (olddecl)) == TREE_TYPE (newdecl)) + return 0; if (DECL_IN_SYSTEM_HEADER (olddecl) || DECL_IN_SYSTEM_HEADER (newdecl)) return 0; return "redefinition of `%s'";