[Bug fortran/89462] [7/8/9 Regression] gfortran loops in code generation

jakub at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Thu Mar 14 17:39:00 GMT 2019


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89462

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Priority|P3                          |P4

--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
(gdb) p debug_tree (0x7ffff7ffbab0)
 <var_decl 0x7ffff7ffbab0 ..__result
    type <integer_type 0x7fffea80a738 integer(kind=8) public DI
        size <integer_cst 0x7fffea7f5b70 constant 64>
        unit-size <integer_cst 0x7fffea7f5b88 constant 8>
        align:64 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x7fffea80a738 precision:64 min <integer_cst 0x7fffea7f5df8
-9223372036854775808> max <integer_cst 0x7fffea7f5e10 9223372036854775807>
        pointer_to_this <pointer_type 0x7fffea83e7e0>>
    used DI pr89462.f90:1:0 size <integer_cst 0x7fffea7f5b70 64> unit-size
<integer_cst 0x7fffea7f5b88 8>
    align:64 warn_if_not_align:0 context <function_decl 0x7fffea9bfd00
master.0.test> chain <var_decl 0x7ffff7ffbb40 atp>>
$14 = void
(gdb) p debug_tree (0x7ffff7ffbb40)
 <var_decl 0x7ffff7ffbb40 atp
    type <array_type 0x7fffea9c2c78
        type <integer_type 0x7fffea80a348 character(kind=1) public unsigned
string-flag QI
            size <integer_cst 0x7fffea7f5c60 constant 8>
            unit-size <integer_cst 0x7fffea7f5c78 constant 1>
            align:8 warn_if_not_align:0 symtab:0 alias-set -1 canonical-type
0x7fffea80a348 precision:8 min <integer_cst 0x7fffea7f5c90 0> max <integer_cst
0x7fffea7f5c30 255>
            pointer_to_this <pointer_type 0x7fffea816540>>
        string-flag BLK
        size <save_expr 0x7fffea9a36a0 type <integer_type 0x7fffea80a0a8
bitsizetype>
            side-effects
            arg:0 <mult_expr 0x7fffea9c1938 type <integer_type 0x7fffea80a0a8
bitsizetype>

                arg:0 <nop_expr 0x7fffea9a3680 type <integer_type
0x7fffea80a0a8 bitsizetype>

                    arg:0 <nop_expr 0x7fffea9a3660 type <integer_type
0x7fffea80a000 sizetype>

                        arg:0 <non_lvalue_expr 0x7fffea9a3640 type
<integer_type 0x7fffea80a738 integer(kind=8)>
                            arg:0 <var_decl 0x7ffff7ffbab0 ..__result>>>> arg:1
<integer_cst 0x7fffea7f5c60 8>>>
        unit-size <save_expr 0x7fffea9a36c0 type <integer_type 0x7fffea80a000
sizetype>
            side-effects arg:0 <nop_expr 0x7fffea9a3660>>
        align:8 warn_if_not_align:0 symtab:0 alias-set -1 structural-equality
        domain <integer_type 0x7fffea9c2bd0 type <integer_type 0x7fffea80a738
integer(kind=8)>
            DI
            size <integer_cst 0x7fffea7f5b70 constant 64>
            unit-size <integer_cst 0x7fffea7f5b88 constant 8>
            align:64 warn_if_not_align:0 symtab:0 alias-set -1
structural-equality precision:64 min <integer_cst 0x7fffea9b5948 1> max
<var_decl 0x7ffff7ffbab0 ..__result>>
        pointer_to_this <pointer_type 0x7fffea9c2e70>>
    addressable used BLK pr89462.f90:2:0 size <save_expr 0x7fffea9a36a0>
unit-size <save_expr 0x7fffea9a36c0>
    align:8 warn_if_not_align:0 context <function_decl 0x7fffea9bfd00
master.0.test> chain <var_decl 0x7ffff7ffbab0 ..__result>>

So, when walking the linked list, we keep bouncing between the two.
I see first:
#0  gfc_add_decl_to_function (decl=<var_decl 0x7ffff7ffbab0 ..__result>) at
../../gcc/fortran/trans-decl.c:249
#1  0x00000000009c9b35 in gfc_finish_var_decl (decl=<var_decl 0x7ffff7ffbab0
..__result>, sym=0x2f83fa0) at ../../gcc/fortran/trans-decl.c:620
#2  0x00000000009ce056 in gfc_get_symbol_decl (sym=0x2f83fa0) at
../../gcc/fortran/trans-decl.c:1784
#3  0x00000000009dcf29 in generate_local_decl (sym=0x2f83fa0) at
../../gcc/fortran/trans-decl.c:5676
#4  0x000000000097a1ea in do_traverse_symtree (st=0x2f20160, st_func=0x0,
sym_func=0x9dce65 <generate_local_decl(gfc_symbol*)>)
    at ../../gcc/fortran/symbol.c:4157
#5  0x000000000097a2a5 in gfc_traverse_ns (ns=0x2f86fb0, sym_func=0x9dce65
<generate_local_decl(gfc_symbol*)>) at ../../gcc/fortran/symbol.c:4182
#6  0x00000000009dd6e1 in generate_local_vars (ns=0x2f86fb0) at
../../gcc/fortran/trans-decl.c:5873

then

#0  gfc_add_decl_to_function (decl=<var_decl 0x7ffff7ffbb40 atp>) at
../../gcc/fortran/trans-decl.c:253
#1  0x00000000009c9b35 in gfc_finish_var_decl (decl=<var_decl 0x7ffff7ffbb40
atp>, sym=0x2f83fa0) at ../../gcc/fortran/trans-decl.c:620
#2  0x00000000009ce1fc in gfc_get_symbol_decl (sym=0x2f83fa0) at
../../gcc/fortran/trans-decl.c:1801
#3  0x00000000009dcf29 in generate_local_decl (sym=0x2f83fa0) at
../../gcc/fortran/trans-decl.c:5676
#4  0x000000000097a1ea in do_traverse_symtree (st=0x2f20160, st_func=0x0,
sym_func=0x9dce65 <generate_local_decl(gfc_symbol*)>)
    at ../../gcc/fortran/symbol.c:4157

and finally

#0  gfc_add_decl_to_function (decl=<var_decl 0x7ffff7ffbb40 atp>) at
../../gcc/fortran/trans-decl.c:253
#1  0x00000000009c9b35 in gfc_finish_var_decl (decl=<var_decl 0x7ffff7ffbb40
atp>, sym=0x2f83fa0) at ../../gcc/fortran/trans-decl.c:620
#2  0x00000000009ce1fc in gfc_get_symbol_decl (sym=0x2f83fa0) at
../../gcc/fortran/trans-decl.c:1801
#3  0x00000000009dcf29 in generate_local_decl (sym=0x2f83fa0) at
../../gcc/fortran/trans-decl.c:5676
#4  0x000000000097a1ea in do_traverse_symtree (st=0x2f20160, st_func=0x0,
sym_func=0x9dce65 <generate_local_decl(gfc_symbol*)>)
    at ../../gcc/fortran/symbol.c:4157
#5  0x000000000097a2a5 in gfc_traverse_ns (ns=0x2f86fb0, sym_func=0x9dce65
<generate_local_decl(gfc_symbol*)>) at ../../gcc/fortran/symbol.c:4182
#6  0x00000000009dd6e1 in generate_local_vars (ns=0x2f86fb0) at
../../gcc/fortran/trans-decl.c:5873

again.  No decl can be added twice.


More information about the Gcc-bugs mailing list