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

            Bug ID: 118085
           Summary: We use flag_delete_null_pointer_checks even when there
                    is no current cfun
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: ipa
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jamborm at gcc dot gnu.org
                CC: hubicka at gcc dot gnu.org
  Target Milestone: ---

In r15-6296-g5d740f56a16270 (Martin Jambor: ipa: Improve how we derive
value ranges from IPA invariants) I introduced a
symtab_node::nonzero_address overload to pass the assumed value of
flag_delete_null_pointer_checks so that we can check for possible
NULL-ness even when we do not have a current
cfun/current_function_decl.  However, adding a simple assert like the
one below to the parameterless overload and running our testsuite
reveals that we do use the flag even when it should be extracted from
a non-current function:

diff --git a/gcc/symtab.cc b/gcc/symtab.cc
index 3804383a4e1..1754dea62d6 100644
--- a/gcc/symtab.cc
+++ b/gcc/symtab.cc
@@ -2284,6 +2284,7 @@ symtab_node::nonzero_address (bool
delete_null_pointer_checks)
 bool
 symtab_node::nonzero_address ()
 {
+  gcc_assert (cfun);
   return nonzero_address (flag_delete_null_pointer_checks);
 }


The failing tests include (this is not an exhaustive list):

 g++.dg/ipa/ipa-pta-2.C
 g++.dg/ipa/pr100413.C
 g++.dg/ipa/pr79776.C
 g++.dg/ipa/pr96806.C
 g++.dg/opt/pr100254.C
 g++.dg/opt/pr60912.C
 g++.dg/opt/pr62146.C
 g++.dg/modules/pr100881_a.C
 g++.dg/torture/pr40991.C
 g++.dg/torture/pr43879-1_1.C
 g++.dg/torture/pr49394.C

 gcc.c-torture/compile/pr44686.c
 gcc.c-torture/execute/20121108-1.c
 gcc.c-torture/execute/920302-1.c
 gcc.c-torture/execute/pr49390.c
 gcc.c-torture/execute/pr86231.c
 gcc.dg/torture/ipa-pta-1.c
 gcc.dg/torture/ipa-pta-2.c
 gcc.dg/torture/ipa-pta-3.c
 gcc.dg/torture/pr109564-2.c
 gcc.dg/torture/pr115701.c
 gcc.dg/torture/pr35833.c

Unfortunately, some back-traces are quite deep and pulling the context
node through all those functions probably won't be nice, for example:


/home/mjambor/gcc/mine/src/gcc/testsuite/gcc.c-torture/execute/pr49390.c:88:1:
internal compiler error: in nonzero_address, at symtab.cc:2287
0x25e0d0f internal_error(char const*, ...)
        /home/mjambor/gcc/mine/src/gcc/diagnostic-global-context.cc:517
0x7ca681 fancy_abort(char const*, int, char const*)
        /home/mjambor/gcc/mine/src/gcc/diagnostic.cc:1722
0xa02184 symtab_node::nonzero_address()
        /home/mjambor/gcc/mine/src/gcc/symtab.cc:2287
0xb41f7d maybe_nonzero_address
        /home/mjambor/gcc/mine/src/gcc/fold-const.cc:9899
0xb5080d tree_single_nonzero_warnv_p(tree_node*, bool*)
        /home/mjambor/gcc/mine/src/gcc/fold-const.cc:15429
0xb50e32 tree_expr_nonzero_p(tree_node*)
        /home/mjambor/gcc/mine/src/gcc/fold-const.cc:10883
0x1abf47d generic_simplify_267(unsigned long, tree_node*, tree_node*,
tree_node*, tree_node**, tree_code)
        /home/mjambor/gcc/mine/obj/gcc/generic-match-5.cc:2234
0x1b8b83b generic_simplify_NE_EXPR(unsigned long, tree_code, tree_node*,
tree_node*, tree_node*)
        /home/mjambor/gcc/mine/obj/gcc/generic-match-8.cc:10276
0xb6108e fold_binary_loc(unsigned long, tree_code, tree_node*, tree_node*,
tree_node*)
        /home/mjambor/gcc/mine/src/gcc/fold-const.cc:10994
0xb6a03a fold_build2_loc(unsigned long, tree_code, tree_node*, tree_node*,
tree_node*)
        /home/mjambor/gcc/mine/src/gcc/fold-const.cc:13911
0xb61236 fold_binary_loc(unsigned long, tree_code, tree_node*, tree_node*,
tree_node*)
        /home/mjambor/gcc/mine/src/gcc/fold-const.cc:10986
0xb82815 fold_binary_to_constant(tree_code, tree_node*, tree_node*, tree_node*)
        /home/mjambor/gcc/mine/src/gcc/fold-const.cc:15697
0xcb2739 evaluate_conditions_for_known_args
        /home/mjambor/gcc/mine/src/gcc/ipa-fnsummary.cc:475
0xcb5444 evaluate_properties_for_edge(cgraph_edge*, bool, unsigned int*,
unsigned int*, ipa_auto_call_arg_values*, bool)
        /home/mjambor/gcc/mine/src/gcc/ipa-fnsummary.cc:738
0xccda4f do_estimate_edge_size(cgraph_edge*)
        /home/mjambor/gcc/mine/src/gcc/ipa-inline-analysis.cc:337
0xccf56f estimate_edge_size(cgraph_edge*)
        /home/mjambor/gcc/mine/src/gcc/ipa-inline.h:79
0xccf56f estimate_edge_growth(cgraph_edge*)
        /home/mjambor/gcc/mine/src/gcc/ipa-inline.h:100
0xccf56f do_estimate_growth_1
        /home/mjambor/gcc/mine/src/gcc/ipa-inline-analysis.cc:436
0xccf635 cgraph_node::call_for_symbol_and_aliases(bool (*)(cgraph_node*,
void*), void*, bool)
        /home/mjambor/gcc/mine/src/gcc/cgraph.h:3433
0xccf635 estimate_growth(cgraph_node*)
        /home/mjambor/gcc/mine/src/gcc/ipa-inline-analysis.cc:474

Reply via email to