[Bug c++/71537] GCC rejects consetxpr boolean conversions and comparisons on the result of pointer arithmetic.
msebor at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue Jun 14 23:27:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71537
Martin Sebor <msebor at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |rejects-valid
Status|UNCONFIRMED |NEW
Last reconfirmed| |2016-06-14
CC| |jakub at gcc dot gnu.org,
| |msebor at gcc dot gnu.org
Blocks| |55004
Ever confirmed|0 |1
Known to fail| |4.9.3, 5.3.0, 6.1.0, 7.0
--- Comment #1 from Martin Sebor <msebor at gcc dot gnu.org> ---
Confirmed, though only the xxx initialization is rejected with GCC 5 and later,
the array case works (4.9.3 rejects both xx and xxx). It looks like the
fold_comparison function that handles these operations for arrays isn't
prepared to do the same for a string literal. Below is the test with the
failing case simplified to converting a POINTER_PLUS expression directly to
bool. (The -Waddress warning should probably get its own bug.)
I CC Jakub who has been making improvements in this area lately (bug 71448 and
bug 67376 before it).
$ cat t.C && /home/msebor/build/gcc-trunk-svn/gcc/xgcc -B
/home/msebor/build/gcc-trunk-svn/gcc -Wall -Wextra -Wpedantic t.C
constexpr int n[42] = {1};
constexpr int x = n ? 1 : 0; // Accepted
constexpr int xx = n + 1 ? 1 : 0; // Accepted
constexpr int xxx = "abc" + 1 ? 1 : 0; // Rejected
constexpr bool b = "abc" + 1; // Rejected (#2)
t.C:2:27: warning: the address of ‘n’ will always evaluate as ‘true’
[-Waddress]
constexpr int x = n ? 1 : 0; // Accepted.
^
t.C:4:37: error: ‘((((const char*)"abc") + 1u) != 0u)’ is not a constant
expression
constexpr int xxx = "abc" + 1 ? 1 : 0; // Rejected
^
t.C:6:28: error: ‘((((const char*)"abc") + 1u) != 0u)’ is not a constant
expression
constexpr bool b = "abc" + 1; // Rejected (#2)
^
Referenced Bugs:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55004
[Bug 55004] [meta-bug] constexpr issues
More information about the Gcc-bugs
mailing list