On Sun, Dec 4, 2016 at 11:38 PM, Janne Blomqvist
<blomqvist.ja...@gmail.com> wrote:
> Hi,
>
> I'm working on a patch to change the type that GFortran uses for
> string lengths from a C int to a C size_t. I'm at a point where it
> does regtest successfully, with the exception of
> gfortran.dg/char_result_8.f90 with -O1 where it ICE's. Unfortunately
> I'm a bit stuck here, and haven't been able to figure out what causes
> the error.
>
> The latest version of the patch is attached to PR 78534.
>
> It does work with -O0, -O2, -O3, -Og, -Ofast as well as "-O1
> -fno-inline-functions-called-once". Which suggests that the problem is
> in the inliner (why it doesn't trigger with higher optimization level,
> I don't know).
>
> The backtrace of the crash is
>
> char_result_8.f90:14:0:
>
>    call indirect (100)
>
> internal compiler error: Segmentation fault
> 0xcda61e crash_signal
>         ../../trunk-git/gcc/toplev.c:333
> 0xfa99e4 make_ssa_name_fn(function*, tree_node*, gimple*, unsigned int)
>         ../../trunk-git/gcc/tree-ssanames.c:265
> 0xd7e26a make_ssa_name
>         ../../trunk-git/gcc/tree-ssanames.h:113
> 0xd7e26a remap_ssa_name
>         ../../trunk-git/gcc/tree-inline.c:238
> 0xd84ee2 copy_tree_body_r(tree_node**, int*, void*)
>         ../../trunk-git/gcc/tree-inline.c:1082
> 0x108c7a4 walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*,
> void*), void*, hash_set<tree_node*, default_hash_traits<tree_node*>
>>*, tree_node* (*)(tree_node**, int*, tree_node* (*)(tree_node**,
> int*, void*), void*, hash_set<tree_node*,
> default_hash_traits<tree_node*> >*))
>         ../../trunk-git/gcc/tree.c:11795
> 0x108da12 walk_tree_1(tree_node**, tree_node* (*)(tree_node**, int*,
> void*), void*, hash_set<tree_node*, default_hash_traits<tree_node*>
>>*, tree_node* (*)(tree_node**, int*, tree_node* (*)(tree_node**,
> int*, void*), void*, hash_set<tree_node*,
> default_hash_traits<tree_node*> >*))
>         ../../trunk-git/gcc/tree.c:12112
> 0xd7c41a remap_type_1
>         ../../trunk-git/gcc/tree-inline.c:493
> 0xd7d2cc remap_type(tree_node*, copy_body_data*)
>         ../../trunk-git/gcc/tree-inline.c:593
> 0xd7cbc5 remap_type_1
>         ../../trunk-git/gcc/tree-inline.c:523
> 0xd7d2cc remap_type(tree_node*, copy_body_data*)
>         ../../trunk-git/gcc/tree-inline.c:593
> 0xd7b721 remap_type_1
>         ../../trunk-git/gcc/tree-inline.c:418
> 0xd7d2cc remap_type(tree_node*, copy_body_data*)
>         ../../trunk-git/gcc/tree-inline.c:593
> 0xd7b1c9 remap_decl(tree_node*, copy_body_data*)
>         ../../trunk-git/gcc/tree-inline.c:370
> 0xd7d849 add_local_variables
>         ../../trunk-git/gcc/tree-inline.c:4321
> 0xd8973a expand_call_inline
>         ../../trunk-git/gcc/tree-inline.c:4733
> 0xd8a4b8 gimple_expand_calls_inline
>         ../../trunk-git/gcc/tree-inline.c:4896
> 0xd8a6cf optimize_inline_calls(tree_node*)
>         ../../trunk-git/gcc/tree-inline.c:5036
> 0x164c339 inline_transform(cgraph_node*)
>         ../../trunk-git/gcc/ipa-inline-transform.c:655
> 0xbe121c execute_one_ipa_transform_pass
>         ../../trunk-git/gcc/passes.c:2206
>
>
> Where it crashes is the assertion "VAR_P (var)", because var is a null
> pointer. Running this via gdb I have found that in this case "var" is
> the type node for one of the variables that it apparently is copying
> from the callee into the caller during the inlining.
>
> So I guess I'm asking how can it happen that the type node of a
> variable disappears?
>
> I have compared the -fdump-tree original dumps of trunk and
> trunk+patch, and they look perfectly Ok; except for character length
> types being different and a few typecasts in some appropriate places,
> they are identical.
>
> Can anybody offer some clues?

Dear all,

I figured out that this problem wasn't per se caused by my patch, but
it existed on trunk previously and was just triggered by my patch. I
was able to reproduce it on a pristine trunk and filed it as PR 78757.
Subsequently Martin Liška was able to point to r235817
(http://gcc.gnu.org/viewcvs/gcc?view=revision&revision=235817 ) as the
culprit.

Thanks to Martin and all others who spent time on this so far!

-- 
Janne Blomqvist

Reply via email to