aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2023-12-14 13:05:52 +0100
committerMarc Poulhiès <poulhies@adacore.com>2024-05-21 09:26:49 +0200
commit0715ed49b40311e9b2715f63308a970195dd2417 (patch)
tree80fb60827515decb99ed46a3d10d808a0c883140 /gcc
parent2ccf77d982d41dda5d352e99d67f901d1cfb7668 (diff)
downloadgcc-0715ed49b40311e9b2715f63308a970195dd2417.zip
gcc-0715ed49b40311e9b2715f63308a970195dd2417.tar.gz
gcc-0715ed49b40311e9b2715f63308a970195dd2417.tar.bz2
ada: Fix oversight in previous change
In rare cases, types using structural equality may reach relate_alias_sets. gcc/ada/ * gcc-interface/utils.cc (relate_alias_sets): Restore previous code when the type uses structural equality.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/gcc-interface/utils.cc7
1 files changed, 5 insertions, 2 deletions
diff --git a/gcc/ada/gcc-interface/utils.cc b/gcc/ada/gcc-interface/utils.cc
index b628481..ae52054 100644
--- a/gcc/ada/gcc-interface/utils.cc
+++ b/gcc/ada/gcc-interface/utils.cc
@@ -1867,8 +1867,11 @@ relate_alias_sets (tree new_type, tree old_type, enum alias_set_op op)
&& TYPE_NONALIASED_COMPONENT (new_type)
!= TYPE_NONALIASED_COMPONENT (old_type)));
- /* The alias set always lives on the TYPE_CANONICAL. */
- TYPE_ALIAS_SET (TYPE_CANONICAL (new_type)) = get_alias_set (old_type);
+ /* The alias set is a property of the TYPE_CANONICAL if it exists. */
+ if (TYPE_STRUCTURAL_EQUALITY_P (new_type))
+ TYPE_ALIAS_SET (new_type) = get_alias_set (old_type);
+ else
+ TYPE_ALIAS_SET (TYPE_CANONICAL (new_type)) = get_alias_set (old_type);
break;
case ALIAS_SET_SUBSET: