On 03/16/2016 08:38 AM, H.J. Lu wrote: > FAIL: g++.dg/abi/pr60336-1.C scan-assembler jmp[\t ]+[^$]*?_Z3xxx9true_type > FAIL: g++.dg/abi/pr60336-5.C scan-assembler jmp[\t ]+[^$]*?_Z3xxx9true_type > FAIL: g++.dg/abi/pr60336-6.C scan-assembler jmp[\t ]+[^$]*?_Z3xxx9true_type > FAIL: g++.dg/abi/pr60336-7.C scan-assembler jmp[\t ]+[^$]*?_Z3xxx9true_type > FAIL: g++.dg/abi/pr60336-9.C scan-assembler jmp[\t ]+[^$]*?_Z3xxx9true_type > FAIL: g++.dg/abi/pr68355.C scan-assembler jmp[\t > ]+[^$]*?_Z3xxx17integral_constantIbLb1EE These pass for me on x86_64, but I do see calls with -m32. > They are expected since get_ref_base_and_extent needs to be > changed to set bitsize to 0 for empty types so that when > ref_maybe_used_by_call_p_1 calls get_ref_base_and_extent to > get 0 as the maximum size on empty type. Otherwise, find_tail_calls > won't perform tail call optimization for functions with empty type > parameters. That isn't why the optimization isn't happening in pr68355 with -m32; the .optimized dump has xxx (D.2289); [tail call] Rather, the failure seems to happen in load_register_parameter, at > /* Check for overlap with already clobbered argument area, > providing that this has non-zero size. */ > if (is_sibcall > && (size == 0 > || mem_overlaps_already_clobbered_arg_p > (XEXP (args[i].value, 0), size))) > *sibcall_failure = 1; The code seems to contradict the comment, and seems to have been broken by r162402. Applying this additional patch fixes those tests.