This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug lto/42665] Internal compiler exception in with gfortran when using -fwhole-program -flto -fopenmp
- From: "rguenther at suse dot de" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 11 Jan 2010 17:22:54 -0000
- Subject: [Bug lto/42665] Internal compiler exception in with gfortran when using -fwhole-program -flto -fopenmp
- References: <bug-42665-12362@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #10 from rguenther at suse dot de 2010-01-11 17:22 -------
Subject: Re: Internal compiler exception in with gfortran
when using -fwhole-program -flto -fopenmp
On Mon, 11 Jan 2010, jjcogliati-r1 at yahoo dot com wrote:
>
>
> ------- Comment #9 from jjcogliati-r1 at yahoo dot com 2010-01-11 17:15 -------
> My hunch, (and I could be wrong since my knowledge of gcc's tree code was zero
> as of Friday morning) is that it is trying to find the array's min and max
> size, but that only the min location is available, and that the max value is
> undefined. Since this is fortran code, there are a number of places that I do
> that. Is that plausible, and if so, how would I check this hunch?
It should never be error_mark_node ...
> Getting permission for me to get you the full code would involve a lot of
> bureaucracy (weeks to months).
Oh, I see ...
You could try putting an assert in
lto-streamer-out.c:lto_output_ts_type_tree_pointers so that
the TYPE_MIN/MAXVAL are not error_mark_node.
That would point you to the file and function.
Richard.
> (gdb) p type->base
> $32 = {code = ARRAY_TYPE, side_effects_flag = 0, constant_flag = 0,
> addressable_flag = 0, volatile_flag = 0, readonly_flag = 0,
> unsigned_flag = 0, asm_written_flag = 0, nowarning_flag = 0, used_flag = 0,
> nothrow_flag = 0, static_flag = 0, public_flag = 0, private_flag = 0,
> protected_flag = 0, deprecated_flag = 0, saturating_flag = 0,
> default_def_flag = 0, lang_flag_0 = 0, lang_flag_1 = 0, lang_flag_2 = 0,
> lang_flag_3 = 0, lang_flag_4 = 0, lang_flag_5 = 0, lang_flag_6 = 0,
> visited = 0, packed_flag = 0, user_align = 0, spare = 0, address_space = 0}
> (gdb) list
> 3717 /* For array types hash their domain and the string flag. */
> 3718 if (TREE_CODE (type) == ARRAY_TYPE
> 3719 && TYPE_DOMAIN (type))
> 3720 {
> 3721 v = iterative_hash_hashval_t (TYPE_STRING_FLAG (type), v);
> 3722 v = visit (TYPE_DOMAIN (type), state, v,
> 3723 sccstack, sccstate, sccstate_obstack);
> 3724 }
> 3725
> 3726 /* Recurse for aggregates with a single element type. */
> (gdb) where
> #0 iterative_hash_expr (t=0x7ffff1e96b70, val=154387133)
> at ../../gcc-4.5-20100107/gcc/tree.c:6592
> #1 0x00000000005ee1fc in iterative_hash_gimple_type (type=0x7ffff1df3888,
> val=<value optimized out>, sccstack=0x7fffffffda38, sccstate=0x126a440,
> sccstate_obstack=0x7fffffffd9e0)
> at ../../gcc-4.5-20100107/gcc/gimple.c:3713
> #2 0x00000000005ee843 in visit (t=0x7ffff1df3888, state=0x126b4b0,
> v=1159414094, sccstack=0x7fffffffda38, sccstate=0x126a440,
> sccstate_obstack=0x7fffffffd9e0)
> at ../../gcc-4.5-20100107/gcc/gimple.c:3599
> #3 0x00000000005ee276 in iterative_hash_gimple_type (type=0x7ffff1df37e0,
> val=<value optimized out>, sccstack=0x7fffffffda38, sccstate=0x126a440,
> sccstate_obstack=0x7fffffffd9e0)
> at ../../gcc-4.5-20100107/gcc/gimple.c:3722
> (gdb) down
> #2 0x00000000005ee843 in visit (t=0x7ffff1df3888, state=0x126b4b0,
> v=1159414094, sccstack=0x7fffffffda38, sccstate=0x126a440,
> sccstate_obstack=0x7fffffffd9e0)
> at ../../gcc-4.5-20100107/gcc/gimple.c:3599
> 3599 tem = iterative_hash_gimple_type (t, v,
> (gdb) down
> #1 0x00000000005ee1fc in iterative_hash_gimple_type (type=0x7ffff1df3888,
> val=<value optimized out>, sccstack=0x7fffffffda38, sccstate=0x126a440,
> sccstate_obstack=0x7fffffffd9e0)
> at ../../gcc-4.5-20100107/gcc/gimple.c:3713
> 3713 v = iterative_hash_expr (TYPE_MAX_VALUE (type), v);
> (gdb) p type->type.minval
> $33 = (tree) 0x7ffff1d995c8
> (gdb) p (type->type.minval)->base
> $34 = {code = INTEGER_CST, side_effects_flag = 0, constant_flag = 1,
> addressable_flag = 0, volatile_flag = 0, readonly_flag = 0,
> unsigned_flag = 0, asm_written_flag = 0, nowarning_flag = 0, used_flag = 0,
> nothrow_flag = 0, static_flag = 0, public_flag = 0, private_flag = 0,
> protected_flag = 0, deprecated_flag = 0, saturating_flag = 0,
> default_def_flag = 0, lang_flag_0 = 0, lang_flag_1 = 0, lang_flag_2 = 0,
> lang_flag_3 = 0, lang_flag_4 = 0, lang_flag_5 = 0, lang_flag_6 = 0,
> visited = 0, packed_flag = 0, user_align = 0, spare = 0, address_space = 0}
> (gdb) p (type->type.maxval)->base
> $35 = {code = ERROR_MARK, side_effects_flag = 0, constant_flag = 0,
> addressable_flag = 0, volatile_flag = 0, readonly_flag = 0,
> unsigned_flag = 0, asm_written_flag = 0, nowarning_flag = 0, used_flag = 0,
> nothrow_flag = 0, static_flag = 0, public_flag = 0, private_flag = 0,
> protected_flag = 0, deprecated_flag = 0, saturating_flag = 0,
> default_def_flag = 0, lang_flag_0 = 0, lang_flag_1 = 0, lang_flag_2 = 0,
> lang_flag_3 = 0, lang_flag_4 = 0, lang_flag_5 = 0, lang_flag_6 = 0,
> visited = 0, packed_flag = 0, user_align = 0, spare = 0, address_space = 0}
>
>
>
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42665