[Bug rtl-optimization/105023] new test case g++.dg/other/pr104989.C ICEs

jakub at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Mar 22 18:58:24 GMT 2022


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105023

--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
There is already
FAIL: g++.dg/other/pr84964.C  -std=c++98 (internal compiler error: Aborted
signal terminated program cc1plus)
FAIL: g++.dg/other/pr84964.C  -std=c++98  1 blank line(s) in output
FAIL: g++.dg/other/pr84964.C  -std=c++14 (internal compiler error: Aborted
signal terminated program cc1plus)
FAIL: g++.dg/other/pr84964.C  -std=c++14  1 blank line(s) in output
FAIL: g++.dg/other/pr84964.C  -std=c++17 (internal compiler error: Aborted
signal terminated program cc1plus)
FAIL: g++.dg/other/pr84964.C  -std=c++17  1 blank line(s) in output
FAIL: g++.dg/other/pr84964.C  -std=c++20 (internal compiler error: Aborted
signal terminated program cc1plus)
FAIL: g++.dg/other/pr84964.C  -std=c++20  1 blank line(s) in output
and this is just a dup of it, we ICE before the sorry is called.

The reason it works on x86 etc. is that in that case if (args[i].reg == 0 ||
args[i].pass_on_stack) is true, while on ppc64le it is false - it wants to pass
that huge argument partially in (reg:BLK 3 3) (isn't that a bug?  BLKmode REGs
are just weird) and partially on the stack.
Either this should be fixed in the backend, or the generic code should just
sorry no matter if huge arguments are passed partially in registers or not.


More information about the Gcc-bugs mailing list