The below adds additional verification to fld_type_variant that
there's only one variant matching fld_type_variant_equal_p on the
chain.  The PR shows that variants built with build_qualified_type
can be equal to others in that regard but not with regard to
what build_qualified_type does.

Bootstrapped and tested on x86_64-unknown-linux-gnu, will push later.

        PR lto/113207
        * ipa-free-lang-data.cc (fld_type_variant): Add extra checking.
---
 gcc/ipa-free-lang-data.cc | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/gcc/ipa-free-lang-data.cc b/gcc/ipa-free-lang-data.cc
index 2885975b4e0..8c4fb3c6b64 100644
--- a/gcc/ipa-free-lang-data.cc
+++ b/gcc/ipa-free-lang-data.cc
@@ -150,7 +150,12 @@ fld_type_variant (tree first, tree t, class 
free_lang_data_d *fld,
     return t;
   for (tree v = first; v; v = TYPE_NEXT_VARIANT (v))
     if (fld_type_variant_equal_p (t, v, inner_type))
-      return v;
+      {
+       if (flag_checking)
+         for (tree v2 = TYPE_NEXT_VARIANT (v); v2; v2 = TYPE_NEXT_VARIANT (v2))
+           gcc_assert (!fld_type_variant_equal_p (t, v2, inner_type));
+       return v;
+      }
   tree v = build_variant_type_copy (first);
   TYPE_READONLY (v) = TYPE_READONLY (t);
   TYPE_VOLATILE (v) = TYPE_VOLATILE (t);
-- 
2.43.0

Reply via email to