[Bug c++/83490] [8 Regression] ICE in find_call_stack_args, at dce.c:392
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83490 Jakub Jelinek changed: What|Removed |Added Status|NEW |RESOLVED Resolution|--- |FIXED --- Comment #8 from Jakub Jelinek --- Fixed.
[Bug c++/83490] [8 Regression] ICE in find_call_stack_args, at dce.c:392
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83490 --- Comment #7 from Jakub Jelinek --- Author: jakub Date: Wed Dec 20 09:12:09 2017 New Revision: 255852 URL: https://gcc.gnu.org/viewcvs?rev=255852=gcc=rev Log: PR c++/83490 * calls.c (compute_argument_addresses): Ignore TYPE_EMPTY_P arguments. * g++.dg/abi/empty29.C: New test. Added: trunk/gcc/testsuite/g++.dg/abi/empty29.C Modified: trunk/gcc/ChangeLog trunk/gcc/calls.c trunk/gcc/testsuite/ChangeLog
[Bug c++/83490] [8 Regression] ICE in find_call_stack_args, at dce.c:392
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83490 --- Comment #6 from Jakub Jelinek --- --- gcc/calls.c.jj 2017-12-18 14:57:24.0 +0100 +++ gcc/calls.c 2017-12-19 19:46:40.466045457 +0100 @@ -2382,7 +2382,12 @@ compute_argument_addresses (struct arg_d args[i].stack = gen_rtx_MEM (partial_mode, addr); set_mem_size (args[i].stack, units_on_stack); } - else + else if (TYPE_EMPTY_P (TREE_TYPE (args[i].tree_value))) + { + args[i].stack = gen_rtx_MEM (BLKmode, addr); + set_mem_size (args[i].stack, 0); + } + else { args[i].stack = gen_rtx_MEM (args[i].mode, addr); set_mem_attributes (args[i].stack, avoids the ICE. But I think I prefer: --- gcc/calls.c.jj 2017-12-18 14:57:24.0 +0100 +++ gcc/calls.c 2017-12-19 20:25:00.143659975 +0100 @@ -2365,6 +2365,9 @@ compute_argument_addresses (struct arg_d && args[i].partial == 0) continue; + if (TYPE_EMPTY_P (TREE_TYPE (args[i].tree_value))) + continue; + /* Pointer Bounds are never passed on the stack. */ if (POINTER_BOUNDS_P (args[i].tree_value)) continue; which I'll bootstrap/regtest together with the testcase momentarily.
[Bug c++/83490] [8 Regression] ICE in find_call_stack_args, at dce.c:392
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83490 Jakub Jelinek changed: What|Removed |Added CC||jakub at gcc dot gnu.org --- Comment #5 from Jakub Jelinek --- I think the problem is clear: (call_insn/u 7 4 14 2 (set (reg:QI 0 ax) (call (mem:QI (symbol_ref:DI ("_Zlt1AS_") [flags 0x3] ) [0 operator< S1 A8]) (const_int 0 [0]))) 690 {*call_value} (expr_list:REG_EH_REGION (const_int 0 [0]) (nil)) (expr_list:QI (use (mem:QI (reg/f:DI 7 sp) [0 S1 A64])) (expr_list:QI (use (mem:QI (reg/f:DI 7 sp) [0 S1 A64])) (nil Note the two entries in CALL_INSN_FUNCTION_USAGE that have both size 1 and overlap each other. That is of course a big no no. If the arguments are passed such that occupy no space at all, then we shouldn't be adding C_I_F_U entries for them (but then e.g. var-tracking will be unhappy as it won't be able to properly find other arguments) or ensure the MEMs have zero size. If you don't mind, I'll have a look.
[Bug c++/83490] [8 Regression] ICE in find_call_stack_args, at dce.c:392
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83490 --- Comment #4 from Marek Polacek --- Reproducible with just: struct A {}; A operator<(A, A) { return A(); } A operator>(A, A) { return A(); }
[Bug c++/83490] [8 Regression] ICE in find_call_stack_args, at dce.c:392
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83490 --- Comment #3 from Marek Polacek --- Uh, ignore Comment 2, I goofed on the PR # :(. That was for PR83489.
[Bug c++/83490] [8 Regression] ICE in find_call_stack_args, at dce.c:392
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83490 --- Comment #2 from Marek Polacek --- Author: mpolacek Date: Tue Dec 19 14:58:17 2017 New Revision: 255824 URL: https://gcc.gnu.org/viewcvs?rev=255824=gcc=rev Log: PR c++/83490 * config/i386/i386.c (init_cumulative_args): Don't check TYPE_EMPTY_P on an error node. * g++.dg/abi/pr83490.C: New test. Added: trunk/gcc/testsuite/g++.dg/abi/pr83490.C Modified: trunk/gcc/ChangeLog trunk/gcc/config/i386/i386.c trunk/gcc/testsuite/ChangeLog
[Bug c++/83490] [8 Regression] ICE in find_call_stack_args, at dce.c:392
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83490 Richard Biener changed: What|Removed |Added Version|unknown |8.0 Target Milestone|--- |8.0
[Bug c++/83490] [8 Regression] ICE in find_call_stack_args, at dce.c:392
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83490 Marek Polacek changed: What|Removed |Added Status|UNCONFIRMED |NEW Last reconfirmed||2017-12-19 Ever confirmed|0 |1 --- Comment #1 from Marek Polacek --- Confirmed, goes away with -fabi-version=11. (In reply to Martin Liška from comment #0) > ICE is somehow included here, should I take care Marek? What do you mean by "included"? It looks like find_call_stack_args is not prepared for arguments that aren't passed.