aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJim Wilson <wilson@gcc.gnu.org>1994-08-19 17:20:05 -0700
committerJim Wilson <wilson@gcc.gnu.org>1994-08-19 17:20:05 -0700
commite24fa5340495964dc7abda7e3d0809dbb24e048b (patch)
treecff6b87cd32a17d2d4c54960b2087b9f13901596 /gcc
parentb6d5307feb2f1fd16042a7689f0b6ed7ec198c98 (diff)
downloadgcc-e24fa5340495964dc7abda7e3d0809dbb24e048b.zip
gcc-e24fa5340495964dc7abda7e3d0809dbb24e048b.tar.gz
gcc-e24fa5340495964dc7abda7e3d0809dbb24e048b.tar.bz2
(build_type_variant): Only return existing type if it
also has the same TYPE_NAME. From-SVN: r7954
Diffstat (limited to 'gcc')
-rw-r--r--gcc/tree.c21
1 files changed, 8 insertions, 13 deletions
diff --git a/gcc/tree.c b/gcc/tree.c
index 068f2b7..7b8fb51 100644
--- a/gcc/tree.c
+++ b/gcc/tree.c
@@ -2802,19 +2802,14 @@ build_type_variant (type, constp, volatilep)
constp = !!constp;
volatilep = !!volatilep;
- /* If not generating auxiliary info, search the chain of variants to see
- if there is already one there just like the one we need to have. If so,
- use that existing one.
-
- We don't do this in the case where we are generating aux info because
- in that case we want each typedef names to get it's own distinct type
- node, even if the type of this new typedef is the same as some other
- (existing) type. */
-
- if (!flag_gen_aux_info)
- for (t = TYPE_MAIN_VARIANT(type); t; t = TYPE_NEXT_VARIANT (t))
- if (constp == TYPE_READONLY (t) && volatilep == TYPE_VOLATILE (t))
- return t;
+ /* Search the chain of variants to see if there is already one there just
+ like the one we need to have. If so, use that existing one. We must
+ preserve the TYPE_NAME, since there is code that depends on this. */
+
+ for (t = TYPE_MAIN_VARIANT(type); t; t = TYPE_NEXT_VARIANT (t))
+ if (constp == TYPE_READONLY (t) && volatilep == TYPE_VOLATILE (t)
+ && TYPE_NAME (t) == TYPE_NAME (type))
+ return t;
/* We need a new one. */