OK. I wonder why we're returning false for EMPTY_CLASS_EXPR?
On Tue, Nov 5, 2019 at 7:35 AM Jakub Jelinek <ja...@redhat.com> wrote: > > Hi! > > When Martin Liska added PREDICT_EXPR to potential_constant_expression_1, > it was with goto in mind and in that case goto isn't a potential > constant expression, but when the {,un}likely attributes are used on other > statements, they are valid. > > Fixed thusly, bootstrapped/regtested on x86_64-linux and i686-linux, ok for > trunk? > > 2019-11-05 Jakub Jelinek <ja...@redhat.com> > > PR c++/92343 > * constexpr.c (potential_constant_expression_1): Return true rather > than false for PREDICT_EXPR. > > * g++.dg/cpp2a/attr-likely6.C: New test. > > --- gcc/cp/constexpr.c.jj 2019-11-02 00:26:48.965846855 +0100 > +++ gcc/cp/constexpr.c 2019-11-04 09:53:35.070621487 +0100 > @@ -6493,6 +6493,7 @@ potential_constant_expression_1 (tree t, > case LABEL_DECL: > case LABEL_EXPR: > case CASE_LABEL_EXPR: > + case PREDICT_EXPR: > case CONST_DECL: > case SIZEOF_EXPR: > case ALIGNOF_EXPR: > @@ -7354,7 +7355,6 @@ potential_constant_expression_1 (tree t, > return true; > > case EMPTY_CLASS_EXPR: > - case PREDICT_EXPR: > return false; > > case GOTO_EXPR: > --- gcc/testsuite/g++.dg/cpp2a/attr-likely6.C.jj 2019-11-04 > 09:54:50.126485303 +0100 > +++ gcc/testsuite/g++.dg/cpp2a/attr-likely6.C 2019-11-04 09:55:21.001017926 > +0100 > @@ -0,0 +1,14 @@ > +// PR c++/92343 > +// { dg-do compile { target c++14 } } > + > +constexpr bool > +foo (bool x) > +{ > + if (x) > + [[unlikely]] return true; > + else > + [[likely]] return false; > +} > + > +static_assert (foo (true), ""); > +static_assert (!foo (false), ""); > > Jakub