On Wed, Aug 27, 2025 at 01:54:23PM +0200, Jason Merrill wrote:
> On 8/27/25 4:13 AM, Jakub Jelinek wrote:
> > When looking at constexpr references, I've noticed staticp handles
> > COMPONENT_REFs and ARRAY_REFs (the latter if the index is INTEGER_CST),
> > but not {REAL,IMAG}PART_EXPR.  I think that is incorrect and causes
> > rejection of constexpr (for C++) or static const (for C) addresses
> > of __real__ or __imag__ parts of static vars.
> > 
> > Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
> 
> Makes sense to me, OK if no objection from C.

Joseph, is this ok also from the C FE POV?
https://gcc.gnu.org/pipermail/gcc-patches/2025-August/693387.html

Thanks.

> > 2025-08-27  Jakub Jelinek  <[email protected]>
> > 
> >     PR c++/121678
> >     * tree.cc (staticp): Handle REALPART_EXPR and IMAGPART_EXPR.
> > 
> >     * g++.dg/ext/pr121678.C: New test.
> >     * gcc.dg/pr121678.c: New test.
> > 
> > --- gcc/tree.cc.jj  2025-08-23 15:00:05.019777931 +0200
> > +++ gcc/tree.cc     2025-08-26 17:55:55.786162975 +0200
> > @@ -3935,6 +3935,10 @@ staticp (tree arg)
> >         else
> >     return NULL;
> > +    case REALPART_EXPR:
> > +    case IMAGPART_EXPR:
> > +      return staticp (TREE_OPERAND (arg, 0));
> > +
> >       case COMPOUND_LITERAL_EXPR:
> >         return TREE_STATIC (COMPOUND_LITERAL_EXPR_DECL (arg)) ? arg : NULL;
> > --- gcc/testsuite/g++.dg/ext/pr121678.C.jj  2025-08-26 18:21:05.593623718 
> > +0200
> > +++ gcc/testsuite/g++.dg/ext/pr121678.C     2025-08-26 18:21:22.661403914 
> > +0200
> > @@ -0,0 +1,7 @@
> > +// PR c++/121678
> > +// { dg-do compile { target c++11 } }
> > +// { dg-options "" }
> > +
> > +static constexpr _Complex double a = 1.0;
> > +static constexpr double *r = &__real__ a;
> > +static constexpr double *i = &__imag__ a;
> > --- gcc/testsuite/gcc.dg/pr121678.c.jj      2025-08-26 18:20:08.453359588 
> > +0200
> > +++ gcc/testsuite/gcc.dg/pr121678.c 2025-08-26 18:20:37.667983352 +0200
> > @@ -0,0 +1,7 @@
> > +/* PR c++/121678 */
> > +/* { dg-do compile } */
> > +/* { dg-options "" } */
> > +
> > +static const _Complex double a = 1.0;
> > +static const double *const r = &__real__ a;
> > +static const double *const i = &__imag__ a;

        Jakub

Reply via email to