[Bug ipa/63587] [5 Regression] ICE : tree check: expected var_decl, have result_decl in add_local_variables, at tree-inline.c:4112
rguenther at suse dot de
gcc-bugzilla@gcc.gnu.org
Fri Oct 24 08:50:00 GMT 2014
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63587
--- Comment #10 from rguenther at suse dot de <rguenther at suse dot de> ---
On Thu, 23 Oct 2014, marxin at gcc dot gnu.org wrote:
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63587
>
> --- Comment #8 from Martin Liška <marxin at gcc dot gnu.org> ---
> I added assert to cgraphunit.c (expand_thunk):1547:
>
> /* Build call to the function being thunked. */
> if (!VOID_TYPE_P (restype))
> {
> if (DECL_BY_REFERENCE (resdecl))
> restmp = gimple_fold_indirect_ref (resdecl);
> else if (!is_gimple_reg_type (restype))
> {
> restmp = resdecl;
> gcc_assert (TREE_CODE (restmp) == VAR_DECL);
> add_local_decl (cfun, restmp);
> BLOCK_VARS (DECL_INITIAL (current_function_decl)) = restmp;
> }
> else
> restmp = create_tmp_reg (restype, "retval");
> }
>
> It's triggered quite often, one example of a thunk created by IPA ICF:
Well, the bug is the add_local_decl being called with a RESULT_DECL.
Thus you should try placing an assert into add_local_decl instead
(need to move it out-of-line for that).
> std::basic_streambuf<_CharT, _Traits>::pos_type std::basic_streambuf<_CharT,
> _Traits>::seekpos(std::basic_streambuf<_CharT, _Traits>::pos_type,
> std::ios_base::openmode) [with _CharT = char; _Traits = std::char_traits<char>;
> std::basic_streambuf<_CharT, _Traits>::pos_type = std::fpos<__mbstate_t>;
> std::ios_base::openmode = std::_Ios_Openmode] (struct basic_streambuf * const
> this, struct pos_type D.23077, openmode D.23078)
> {
> struct pos_type <retval>;
>
> <bb 2>:
> <retval> = std::basic_streambuf<wchar_t>::seekpos (this_2(D), D.23077,
> _3(D)); [tail call]
> return <retval>;
>
> }
>
> where std::basic_streambuf<_CharT, _Traits>::pos_type is:
> <result_decl 0x7ffff4eec708 D.39821
> type <record_type 0x7ffff59c2150 pos_type sizes-gimplified asm_written used
> needs-constructing type_1 type_5 TI
> size <integer_cst 0x7ffff6c2fe40 constant 128>
> unit size <integer_cst 0x7ffff6c2fe58 constant 16>
> align 64 symtab -164402368 alias set -1 canonical type 0x7ffff614adc8
> fields <field_decl 0x7ffff51cd850 _M_off type <integer_type
> 0x7ffff678c738 streamoff>
> used private nonlocal decl_3 DI file
> /home/marxin/Programming/gcc/objdir/x86_64-unknown-linux-gnu/libstdc++-v3/include/bits/postypes.h
> line 115 col 33
> size <integer_cst 0x7ffff6c2fdf8 constant 64>
> unit size <integer_cst 0x7ffff6c2fe10 constant 8>
> align 64 offset_align 128
> offset <integer_cst 0x7ffff6c2fe28 constant 0>
> bit offset <integer_cst 0x7ffff6c2fe70 constant 0> context
> <record_type 0x7ffff614adc8 fpos> chain <field_decl 0x7ffff51cd8e8 _M_state>>
> context <namespace_decl 0x7ffff6c4c098 std>
> full-name "std::basic_streambuf<char>::pos_type"
> needs-constructor X() has-type-conversion X(constX&) this=(X&)
> n_parents=0 use_template=1 interface-unknown
> pointer_to_this <pointer_type 0x7ffff5224e70> chain <type_decl
> 0x7ffff6146da8 fpos>>
> ignored TI file
> /home/marxin/Programming/gcc/objdir/x86_64-unknown-linux-gnu/libstdc++-v3/include/streambuf
> line 602 col 7 size <integer_cst 0x7ffff6c2fe40 128> unit size <integer_cst
> 0x7ffff6c2fe58 16>
> align 64 context <function_decl 0x7ffff5797948 seekoff>>
>
> Is there a bug in expand_thunk or do I miss something?
> Thanks,
> Martin
>
>
More information about the Gcc-bugs
mailing list