diff options
author | Marek Polacek <polacek@redhat.com> | 2020-10-29 15:08:31 -0400 |
---|---|---|
committer | Marek Polacek <polacek@redhat.com> | 2020-11-03 10:09:00 -0500 |
commit | f620e64a6f13371b95be5b17abba0acf15bf7cae (patch) | |
tree | a0d2b08c0195e9b82eb50a635fd6efe333c39144 /gcc | |
parent | 6ff95a6eefbe02288fbc9f3de456e5e820d2bd80 (diff) |
c++: Disable -Winit-list-lifetime in unevaluated operand [PR97632]
Jon suggested turning this warning off when we're not actually
evaluating the operand. This patch does that.
gcc/cp/ChangeLog:
PR c++/97632
* init.c (build_new_1): Disable -Winit-list-lifetime for an unevaluated
operand.
gcc/testsuite/ChangeLog:
PR c++/97632
* g++.dg/warn/Winit-list4.C: New test.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/init.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/warn/Winit-list4.C | 15 |
2 files changed, 16 insertions, 1 deletions
diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 1bddb6555dc..ffb84ea5b09 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -2957,7 +2957,7 @@ build_new_1 (vec<tree, va_gc> **placement, tree type, tree nelts, return error_mark_node; } - if (is_std_init_list (elt_type)) + if (is_std_init_list (elt_type) && !cp_unevaluated_operand) warning (OPT_Winit_list_lifetime, "%<new%> of %<initializer_list%> does not " "extend the lifetime of the underlying array"); diff --git a/gcc/testsuite/g++.dg/warn/Winit-list4.C b/gcc/testsuite/g++.dg/warn/Winit-list4.C new file mode 100644 index 00000000000..d136187e2c6 --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Winit-list4.C @@ -0,0 +1,15 @@ +// PR c++/97632 +// { dg-do compile { target c++20 } } +// Test we don't warn in an unevaluated operand. + +#include <initializer_list> + +template<typename _Tp> +concept default_initializable + = requires + { + _Tp{}; + (void) ::new _Tp; // { dg-bogus "does not extend the lifetime" } + }; + +static_assert(default_initializable<std::initializer_list<int>>); |