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