public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc r15-127] Avoid changing type in the type_hash_canon hash
@ 2024-05-03 11:01 Richard Biener
  0 siblings, 0 replies; only message in thread
From: Richard Biener @ 2024-05-03 11:01 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:7a212ac678e13e0df5da2d090144b246a1262b64

commit r15-127-g7a212ac678e13e0df5da2d090144b246a1262b64
Author: Richard Biener <rguenther@suse.de>
Date:   Fri May 3 11:48:07 2024 +0200

    Avoid changing type in the type_hash_canon hash
    
    When building a type and type_hash_canon returns an existing type
    avoid changing it, in particular its TYPE_CANONICAL.
    
            PR middle-end/114931
            * tree.cc (build_array_type_1): Return early when type_hash_canon
            returned an older existing type.
            (build_function_type): Likewise.
            (build_method_type_directly): Likewise.
            (build_offset_type): Likewise.

Diff:
---
 gcc/tree.cc | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/gcc/tree.cc b/gcc/tree.cc
index 83f3bf306af..780662549fe 100644
--- a/gcc/tree.cc
+++ b/gcc/tree.cc
@@ -7352,7 +7352,10 @@ build_array_type_1 (tree elt_type, tree index_type, bool typeless_storage,
   if (shared)
     {
       hashval_t hash = type_hash_canon_hash (t);
+      tree probe_type = t;
       t = type_hash_canon (hash, t);
+      if (t != probe_type)
+	return t;
     }
 
   if (TYPE_CANONICAL (t) == t && set_canonical)
@@ -7509,7 +7512,10 @@ build_function_type (tree value_type, tree arg_types,
 
   /* If we already have such a type, use the old one.  */
   hashval_t hash = type_hash_canon_hash (t);
+  tree probe_type = t;
   t = type_hash_canon (hash, t);
+  if (t != probe_type)
+    return t;
 
   /* Set up the canonical type. */
   any_structural_p   = TYPE_STRUCTURAL_EQUALITY_P (value_type);
@@ -7663,7 +7669,10 @@ build_method_type_directly (tree basetype,
 
   /* If we already have such a type, use the old one.  */
   hashval_t hash = type_hash_canon_hash (t);
+  tree probe_type = t;
   t = type_hash_canon (hash, t);
+  if (t != probe_type)
+    return t;
 
   /* Set up the canonical type. */
   any_structural_p
@@ -7720,7 +7729,10 @@ build_offset_type (tree basetype, tree type)
 
   /* If we already have such a type, use the old one.  */
   hashval_t hash = type_hash_canon_hash (t);
+  tree probe_type = t;
   t = type_hash_canon (hash, t);
+  if (t != probe_type)
+    return t;
 
   if (!COMPLETE_TYPE_P (t))
     layout_type (t);

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2024-05-03 11:01 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-05-03 11:01 [gcc r15-127] Avoid changing type in the type_hash_canon hash Richard Biener

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).