https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108520
Bug ID: 108520 Summary: [C2x] ICE in nonnull_arg_p, at tree.cc:14372 with -O1 and above (gnu::assume) Product: gcc Version: 13.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: p...@gcc-bugzilla.mail.kapsi.fi Target Milestone: --- Hi. Consider the following testcase. The important aspects are i) optimized, ii) array of structures containing multiple elements, iii) assume. Using 13.0.1 20230124 (experimental). # cat assume.c static void f0() { } [[ gnu::nonnull(1) ]] void f1(void *) { const struct { void (*f)(); } af[] = { { f0 } , { f0 } , { f0 } }; for (__typeof__(af[0]) * it = af, * const end = af + sizeof(af) / sizeof(af[0]); it != end; ++it) { [[ gnu::assume (it->f) ]]; it->f(); } } # gcc -c -std=gnu2x -Wall -Wextra -O1 assume.c during GIMPLE pass: ethread assume.c: In function 'f1': assume.c:16:3: internal compiler error: in nonnull_arg_p, at tree.cc:14372 --- (gdb) bt #0 <address> in fancy_abort(char const*, int, char const*) () #1 <address> in nonnull_arg_p(tree_node const*) [clone .cold] () #2 <address> in get_range_global (r=..., name=<optimized out>) at <...>/src/gcc/gcc/value-query.cc:330 #3 <address> in global_range_query::range_of_expr (this=<optimized out>, r=..., expr=<optimized out>, stmt=<optimized out>) at <...>/src/gcc/gcc/value-query.cc:406 #4 <address> in gimple_infer_range::check_assume_func (this=<optimized out>, call=<optimized out>) at <...>/src/gcc/gcc/gimple-range-infer.cc:87 #5 <address> in gimple_infer_range::gimple_infer_range (this=<optimized out>, s=<optimized out>) at <...>/src/gcc/gcc/gimple-range-infer.cc:166 #6 <address> in infer_range_manager::register_all_uses (this=<optimized out>, name=<optimized out>) at <...>/src/gcc/gcc/gimple-range-infer.cc:374 #7 <address> in infer_range_manager::has_range_p (this=<optimized out>, name=<optimized out>, bb=<optimized out>) at <...>/src/gcc/gcc/gimple-range-infer.cc:273 #8 <address> in infer_range_manager::maybe_adjust_range (this=<optimized out>, r=..., name=<optimized out>, bb=<optimized out>) at <...>/src/gcc/gcc/gimple-range-infer.cc:290 #9 <address> in path_range_query::adjust_for_non_null_uses (this=<optimized out>, bb=<optimized out>) at <...>/src/gcc/gcc/gimple-range-path.cc:502 #10 <address> in path_range_query::compute_ranges (this=<optimized out>, dependencies=<optimized out>) at <...>/src/gcc/gcc/gimple-range-path.cc:623 #11 <address> in back_threader::find_taken_edge_cond (this=<optimized out>, path=..., cond=<optimized out>) at <...>/src/gcc/gcc/bitmap.h:955 #12 <address> in back_threader::maybe_register_path (this=<optimized out>, profit=...) at <...>/src/gcc/gcc/tree-ssa-threadbackward.cc:248 #13 <address> in back_threader::find_paths_to_names (this=<optimized out>, bb=<optimized out>, interesting=<optimized out>, overall_paths=<optimized out>, at <...>/src/gcc/gcc/tree-ssa-threadbackward.cc:371 #14 <address> in back_threader::find_paths_to_names (this=<optimized out>, bb=<optimized out>, interesting=<optimized out>, overall_paths=<optimized out>, at <...>/src/gcc/gcc/bitmap.h:955 #15 <address> in back_threader::maybe_thread_block (this=<optimized out>, bb=<optimized out>) at <...>/src/gcc/gcc/bitmap.h:955 #16 <address> in back_threader::thread_blocks (this=<optimized out>) at <...>/src/gcc/gcc/tree-ssa-threadbackward.cc:975 #17 <address> in pass_thread_jumps_full::execute (this=<optimized out>, fun=<optimized out>) at <...>/src/gcc/gcc/tree-ssa-threadbackward.cc:1105 #18 <address> in execute_one_pass (pass=<optimized out>) at <...>/src/gcc/gcc/passes.cc:2644 #19 <address> in execute_pass_list_1 (pass=<optimized out>) at <...>/src/gcc/gcc/passes.cc:2753 #20 <address> in execute_pass_list_1 (pass=<optimized out>) at <...>/src/gcc/gcc/passes.cc:2754 #21 <address> in execute_pass_list (fn=<optimized out>, pass=<optimized out>) at <...>/src/gcc/gcc/passes.cc:2764 #22 <address> in cgraph_node::expand (this=<optimized out>) at <...>/src/gcc/gcc/context.h:48 #23 <address> in symbol_table::compile (this=<optimized out>) at <...>/src/gcc/gcc/cgraphunit.cc:2015 #24 <address> in symbol_table::finalize_compilation_unit (this=<optimized out>) at <...>/src/gcc/gcc/cgraphunit.cc:2302 #25 <address> in compile_file () at <...>/src/gcc/gcc/toplev.cc:471 #26 <address> in toplev::main(int, char**) () #27 <address> in main (argc=<...>, argv=<...>) at <...>/src/gcc/gcc/main.cc:39