https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101729
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Ever confirmed|0 |1 Status|UNCONFIRMED |NEW Last reconfirmed| |2021-08-03 --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- The odd thing is that 'g' has a DECL_RESULT of void type but the function type of 'g' has a return type of integer(kind=4) ... <function_decl 0x7ffff6717200 g type <function_type 0x7ffff6718b28 type <integer_type 0x7ffff65585e8 integer(kind=4) public SI size <integer_cst 0x7ffff6543df8 constant 32> unit-size <integer_cst 0x7ffff6543e10 constant 4> align:32 warn_if_not_align:0 symtab:0 alias-set 1 canonical-type 0x7ffff65585e8 precision:32 min <integer_cst 0x7ffff6543db0 -2147483648> max <integer_cst 0x7ffff6543dc8 2147483647> pointer_to_this <pointer_type 0x7ffff655f9d8> reference_to_this <reference_type 0x7ffff67180a8>> QI size <integer_cst 0x7ffff6543ca8 constant 8> unit-size <integer_cst 0x7ffff6543cc0 constant 1> align:8 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type 0x7ffff6718b28 arg-types <tree_list 0x7ffff6715d48 value <reference_type 0x7ffff6718150> chain <tree_list 0x7ffff6557b18 value <void_type 0x7ffff6558f18 void>>> pointer_to_this <pointer_type 0x7ffff6718bd0>> addressable used nothrow public static QI t.f90:4:12 align:8 warn_if_not_align:0 context <translation_unit_decl 0x7ffff654e168 t.f90> initial <block 0x7ffff671c120> result <result_decl 0x7ffff654e1e0 D.3929 type <void_type 0x7ffff6558f18 void VOID align:8 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type 0x7ffff6558f18 pointer_to_this <pointer_type 0x7ffff655f000>> ipa-split does if (split_point->split_part_set_retval && !VOID_TYPE_P (TREE_TYPE (TREE_TYPE (current_function_decl)))) { retval = DECL_RESULT (current_function_decl); /* We use temporary register to hold value when aggregate_value_p is false. Similarly for DECL_BY_REFERENCE we must avoid extra copy. */ if (!aggregate_value_p (retval, TREE_TYPE (current_function_decl)) && !DECL_BY_REFERENCE (retval)) retval = create_tmp_reg (TREE_TYPE (retval)); interestingly when fixing the bogus call g(1, *99) then the return type of the function is void as expected.