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