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.