[Bug c++/94554] New: spurious -Waddress warning within "if constexpr" function-null compares
myriachan at gmail dot com
gcc-bugzilla@gcc.gnu.org
Fri Apr 10 18:58:47 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94554
Bug ID: 94554
Summary: spurious -Waddress warning within "if constexpr"
function-null compares
Product: gcc
Version: 10.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: myriachan at gmail dot com
Target Milestone: ---
The following with -std=c++17 -Waddress:
int meow() { return 1; }
void kitty(int);
template <int (*F)()>
void test() {
if constexpr (F) {
kitty(F());
} else {
kitty(2);
}
}
template void test<nullptr>();
template void test<meow>();
gives a spurious/pointless warning:
<source>: In instantiation of 'void test() [with int (* F)() = meow]':
<source>:12:26: required from here
<source>:5:5: warning: the address of 'int meow()' will never be NULL
[-Waddress]
5 | if constexpr (F) {
| ^~
The warning should be suppressed in "if constexpr" contexts, because of course
it's going to be always true or always false.
Clang errors on this case, so it's possible that my code is invalid: Is it
legal to compare a function pointer against null in a constant-expression?
More information about the Gcc-bugs
mailing list