Am Dienstag, dem 18.06.2024 um 17:27 +0200 schrieb Richard Biener:
> 
> > Am 18.06.2024 um 17:20 schrieb Martin Uecker <uec...@tugraz.at>:
> > 
> > 
> > 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.
> 
> Note a canonical type should always be unqualified (for
> classical qualifiers, not address space or atomic qualification)

The logic in build_qualified_type is the same as in this patch,
it constructs TYPE_CANONICAL with qualifiers.  Or what am I
missing?

Martin

> 
> Richard 
> 
> > 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