https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117303
--- Comment #8 from anlauf at gcc dot gnu.org --- (In reply to Kirill Chilikin from comment #7) > (In reply to anlauf from comment #6) > > But what I do not understand is why gfc_conv_expr thinks the function is > > tree_constant. > The flag assignment happens here: > > (gdb) l > 5163 tc = false; > 5164 se |= TREE_SIDE_EFFECTS (node); > 5165 } > 5166 > 5167 > 5168 TREE_CONSTANT (t) = tc; > 5169 TREE_SIDE_EFFECTS (t) = se; > 5170 #undef UPDATE_FLAGS > 5171 } > 5172 > (gdb) p tc > $42 = true ... > (gdb) backtrace > #0 recompute_tree_invariant_for_addr_expr (t=0x7ffff700d680) at > ../../gcc/gcc/tree.cc:5168 Hmm, I am confused. Is this really a fortran issue and not an lto issue? Is the address of a function really constant? With lto? What is the proposed solution? > #1 0x0000000001eccfce in build1 (code=ADDR_EXPR, type=0x7ffff700a0a8, > node=0x7ffff6fff800) at ../../gcc/gcc/tree.cc:5240 > #2 0x00000000010e744f in build1_loc (loc=577792, code=ADDR_EXPR, > type=0x7ffff700a0a8, arg1=0x7ffff6fff800) at ../../gcc/gcc/tree.h:4895 > #3 0x00000000014c5398 in fold_build1_loc (loc=577792, code=ADDR_EXPR, > type=0x7ffff700a0a8, op0=0x7ffff6fff800) at ../../gcc/gcc/fold-const.cc:13896 > #4 0x00000000010df606 in gfc_build_addr_expr (type=0x0, t=0x7ffff6fff800) > at ../../gcc/gcc/fortran/trans.cc:379 > #5 0x0000000001146463 in gfc_conv_variable (se=0x7fffffffcff0, > expr=0x4cbee30) at ../../gcc/gcc/fortran/trans-expr.cc:3272 > #6 0x0000000001160f74 in gfc_conv_expr (se=0x7fffffffcff0, expr=0x4cbee30) > at ../../gcc/gcc/fortran/trans-expr.cc:10565 > #7 0x00000000011613b5 in gfc_conv_expr_reference (se=0x7fffffffcff0, > expr=0x4cbee30) at ../../gcc/gcc/fortran/trans-expr.cc:10688 > #8 0x000000000118c401 in conv_isocbinding_function (se=0x7fffffffcff0, > expr=0x4cbef20) at ../../gcc/gcc/fortran/trans-intrinsic.cc:9867 > #9 0x00000000011915cb in gfc_conv_intrinsic_function (se=0x7fffffffcff0, > expr=0x4cbef20) at ../../gcc/gcc/fortran/trans-intrinsic.cc:11234 > #10 0x000000000115c931 in gfc_conv_function_expr (se=0x7fffffffcff0, > expr=0x4cbef20) at ../../gcc/gcc/fortran/trans-expr.cc:9338 > #11 0x0000000001160f44 in gfc_conv_expr (se=0x7fffffffcff0, expr=0x4cbef20) > at ../../gcc/gcc/fortran/trans-expr.cc:10557 > #12 0x00000000011615d9 in gfc_conv_expr_reference (se=0x7fffffffcff0, > expr=0x4cbef20) at ../../gcc/gcc/fortran/trans-expr.cc:10723 > #13 0x0000000001154bec in gfc_conv_procedure_call (se=0x7fffffffd930, > sym=0x4cb9000, args=0x4cb9620, expr=0x0, append_args=0x0) at > ../../gcc/gcc/fortran/trans-expr.cc:7447 > #14 0x00000000011d2589 in gfc_trans_call (code=0x4cbf010, > dependency_check=false, mask=0x0, count1=0x0, invert=false) at > ../../gcc/gcc/fortran/trans-stmt.cc:495 > #15 0x00000000010e672a in trans_code (code=0x4cbf010, cond=0x0) at > ../../gcc/gcc/fortran/trans.cc:2423 > #16 0x00000000010e6bfd in gfc_trans_code (code=0x4cbeb90) at > ../../gcc/gcc/fortran/trans.cc:2715 > #17 0x0000000001137949 in gfc_generate_function_code (ns=0x4cf8c20) at > ../../gcc/gcc/fortran/trans-decl.cc:8233 > #18 0x00000000010e6c41 in gfc_generate_code (ns=0x4cf8c20) at > ../../gcc/gcc/fortran/trans.cc:2732 > #19 0x000000000105a940 in translate_all_program_units > (gfc_global_ns_list=0x4c7a640) at ../../gcc/gcc/fortran/parse.cc:7569 > #20 0x000000000105b28e in gfc_parse_file () at > ../../gcc/gcc/fortran/parse.cc:7899 > #21 0x00000000010cc342 in gfc_be_parse_file () at > ../../gcc/gcc/fortran/f95-lang.cc:247 > #22 0x0000000001a75f82 in compile_file () at ../../gcc/gcc/toplev.cc:455 > #23 0x0000000001a7950c in do_compile () at ../../gcc/gcc/toplev.cc:2225 > #24 0x0000000001a7997f in toplev::main (this=0x7fffffffdefa, argc=7, > argv=0x7fffffffe028) at ../../gcc/gcc/toplev.cc:2390 > #25 0x0000000003809dd4 in main (argc=7, argv=0x7fffffffe028) at > ../../gcc/gcc/main.cc:39
