On 3/19/21 5:03 AM, Jakub Jelinek wrote:
On Thu, Mar 18, 2021 at 05:20:54PM -0400, Jason Merrill wrote:
On 3/9/21 10:31 AM, Jakub Jelinek wrote:
Hi!
My PR82304/PR95307 fix moved reinterpret cast from pointer to integer
diagnostics from cxx_eval_outermost_constant_expr where it caught
invalid code only at the outermost level down into
cxx_eval_constant_expression.
Unfortunately, it regressed following testcase, we emit worse code
including dynamic initialization of some vars.
While the initializers are not constant expressions due to the
reinterpret_cast in there, there is no reason not to fold them as an
optimization.
I've tried to make this dependent on !ctx->quiet, but that regressed
two further tests, so this patch bases that on manifestly_const_eval.
Did you try using ctx->strict?
Tried that now, it seems to be even worse than the original && !ctx->quiet
approach, regresses:
FAIL: g++.dg/cpp0x/constexpr-95307.C -std=c++11 (test for errors, line 5)
FAIL: g++.dg/cpp0x/constexpr-95307.C -std=c++14 (test for errors, line 5)
FAIL: g++.dg/cpp0x/constexpr-95307.C -std=c++17 (test for errors, line 5)
FAIL: g++.dg/cpp0x/constexpr-95307.C -std=c++2a (test for errors, line 5)
FAIL: g++.dg/cpp0x/constexpr-ex1.C -std=c++11 (test for errors, line 73)
FAIL: g++.dg/cpp0x/constexpr-ex1.C -std=c++14 (test for errors, line 73)
FAIL: g++.dg/cpp0x/constexpr-ex1.C -std=c++17 (test for errors, line 73)
FAIL: g++.dg/cpp0x/constexpr-ex1.C -std=c++2a (test for errors, line 73)
FAIL: g++.dg/cpp1y/constexpr-82304.C -std=c++14 (test for errors, line 9)
FAIL: g++.dg/cpp1y/constexpr-82304.C -std=c++17 (test for errors, line 9)
FAIL: g++.dg/cpp1y/constexpr-82304.C -std=c++2a (test for errors, line 9)
FAIL: g++.dg/cpp1y/constexpr-shift1.C -std=c++14 (test for errors, line 6)
FAIL: g++.dg/cpp1y/constexpr-shift1.C -std=c++14 (test for excess errors)
FAIL: g++.dg/cpp1y/constexpr-shift1.C -std=c++17 (test for errors, line 6)
FAIL: g++.dg/cpp1y/constexpr-shift1.C -std=c++17 (test for excess errors)
FAIL: g++.dg/cpp1y/constexpr-shift1.C -std=c++2a (test for errors, line 6)
FAIL: g++.dg/cpp1y/constexpr-shift1.C -std=c++2a (test for excess errors)
Then the patch is OK, thanks.
Jason