As discussed this replaces the use of check_qualified_type with
a simple check for qualifiers as suggested by Jakub in
c_update_type_canonical.

Martin


Bootstrapped and regression tested on x86_64.


    C23: Fix ICE related to incomplete structures [PR114930,PR115502].
    
    The fix for PR114574 needs to be further revised because 
check_qualified_type
    makes decision based on TYPE_NAME which can be incorrect for C when there
    are TYPE_DECLS involved.
    
    gcc/c/:
            * c-decl.c (c_update_type_canonical): Do not use 
check_qualified_type.
    
    gcc/testsuite/:
            * gcc.dg/pr114930.c: New test.
            * gcc.dg/pr115502.c: New test.

diff --git a/gcc/c/c-decl.cc b/gcc/c/c-decl.cc
index 01326570e2b..610061a07f8 100644
--- a/gcc/c/c-decl.cc
+++ b/gcc/c/c-decl.cc
@@ -9374,7 +9374,7 @@ c_update_type_canonical (tree t)
          if (TYPE_QUALS (x) == TYPE_QUALS (t))
            TYPE_CANONICAL (x) = TYPE_CANONICAL (t);
          else if (TYPE_CANONICAL (t) != t
-                  || check_qualified_type (x, t, TYPE_QUALS (x)))
+                  || TYPE_QUALS (x) != TYPE_QUALS (TYPE_CANONICAL (t)))
            TYPE_CANONICAL (x)
              = build_qualified_type (TYPE_CANONICAL (t), TYPE_QUALS (x));
          else
diff --git a/gcc/testsuite/gcc.dg/pr114930.c b/gcc/testsuite/gcc.dg/pr114930.c
new file mode 100644
index 00000000000..5e982fb8929
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr114930.c
@@ -0,0 +1,9 @@
+/* { dg-do compile }
+ * { dg-options "-std=c23 -flto" } */
+
+typedef struct WebPPicture WebPPicture;
+typedef int (*WebPProgressHook)(const WebPPicture *);
+WebPProgressHook progress_hook;
+struct WebPPicture {
+} WebPGetColorPalette(const struct WebPPicture *);
+
diff --git a/gcc/testsuite/gcc.dg/pr115502.c b/gcc/testsuite/gcc.dg/pr115502.c
new file mode 100644
index 00000000000..02b52622c5a
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr115502.c
@@ -0,0 +1,9 @@
+/* { dg-do compile }
+ * { dg-options "-std=c23 -flto" } */
+
+typedef struct _OSet OSet;
+typedef OSet AvlTree;
+void vgPlain_OSetGen_Lookup(const OSet *);
+struct _OSet {};
+void vgPlain_OSetGen_Lookup(const AvlTree *);
+

Reply via email to