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.