On Mon, Feb 24, 2020 at 09:59:51AM -0500, Jason Merrill wrote:
> On 2/24/20 9:58 AM, Jason Merrill wrote:
> > On 2/21/20 2:14 PM, Marek Polacek wrote:
> > > This was approved in the Prague 2020 WG21 meeting so let's adjust the
> > > comment.  Since it's supposed to be a DR I think we should no longer
> > > limit it to C++20.
> > 
> > I'm a bit nervous about the impact, but OK.  It's easy enough to turn
> > off -Wnarrowing if it's a problem for users.
> 
> Hmm, have you tried doing a Fedora build with this change?

I'll admit I have not.

Jeff, would it be possible to apply this patch onto one of your testers?
We'd be much more comfortable going with this change then.

> > > Bootstrapped/regtested on x86_64-linux, ok for trunk?
> > > 
> > > 2020-02-21  Marek Polacek  <pola...@redhat.com>
> > > 
> > >     P1957R2
> > >     * typeck2.c (check_narrowing): Consider T* to bool narrowing
> > >     in C++11 and up.
> > > 
> > >     * g++.dg/cpp0x/initlist92.C: Don't expect an error in C++20 only.
> > > ---
> > >   gcc/cp/typeck2.c                        | 7 ++++---
> > >   gcc/testsuite/g++.dg/cpp0x/initlist92.C | 2 +-
> > >   2 files changed, 5 insertions(+), 4 deletions(-)
> > > 
> > > diff --git a/gcc/cp/typeck2.c b/gcc/cp/typeck2.c
> > > index 48920894b3b..68bc2e5c170 100644
> > > --- a/gcc/cp/typeck2.c
> > > +++ b/gcc/cp/typeck2.c
> > > @@ -1036,9 +1036,10 @@ check_narrowing (tree type, tree init,
> > > tsubst_flags_t complain,
> > >       }
> > >     else if (TREE_CODE (type) == BOOLEAN_TYPE
> > >          && (TYPE_PTR_P (ftype) || TYPE_PTRMEM_P (ftype)))
> > > -    /* This hasn't actually made it into C++20 yet, but let's add
> > > it now to get
> > > -       an idea of the impact.  */
> > > -    ok = (cxx_dialect < cxx2a);
> > > +    /* C++20 P1957R2: converting from a pointer type or a
> > > pointer-to-member
> > > +       type to bool should be considered narrowing.  This is a DR
> > > so is not
> > > +       limited to C++20 only.  */
> > > +    ok = false;
> > >     bool almost_ok = ok;
> > >     if (!ok && !CONSTANT_CLASS_P (init) && (complain &
> > > tf_warning_or_error))
> > > diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist92.C
> > > b/gcc/testsuite/g++.dg/cpp0x/initlist92.C
> > > index 319264ae274..213b192d441 100644
> > > --- a/gcc/testsuite/g++.dg/cpp0x/initlist92.C
> > > +++ b/gcc/testsuite/g++.dg/cpp0x/initlist92.C
> > > @@ -23,7 +23,7 @@ bool Test4(std::initializer_list<std::string>);
> > >   int main ()
> > >   {
> > > -  ( Test1({"false"}) );    // { dg-error "narrowing" "" { target
> > > c++2a } }
> > > +  ( Test1({"false"}) );    // { dg-error "narrowing" }
> > >     ( Test2({123}) );
> > >     ( Test3({456}) );
> > >     ( Test4({"false"}) );
> > > 
> > > base-commit: dbfba41e95d1d93b17e907b7f516b52ed3a3c415
> > > 
> > 
> 

Marek

Reply via email to