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