On Thu, Nov 14, 2024 at 06:25:49PM +0100, Jakub Jelinek wrote: > On Thu, Nov 14, 2024 at 10:05:05AM -0500, Andrew MacLeod wrote: > > The inferred range mechanism is also initialized using cfun, so again > > introducing a use of cfun shouldnt be an issue. > > > > Something like this ought to work I think? > > 2024-11-14 Jakub Jelinek <ja...@redhat.com> > Andrew MacLeod <amacl...@redhat.com> > > PR c/117023 > * gimple-range-infer.cc (gimple_infer_range::gimple_infer_range): > Handle also nonnull_if_nonzero attributes. > > * gcc.dg/tree-ssa/pr78154-2.c: New test.
Unfortunately that broke bootstrap. https://gcc.gnu.org/pipermail/gcc-patches/2024-November/668554.html https://gcc.gnu.org/pipermail/gcc-patches/2024-November/668699.html https://gcc.gnu.org/pipermail/gcc-patches/2024-November/668700.html https://gcc.gnu.org/pipermail/gcc-patches/2024-November/668711.html bootstrap/regtest fine, but if https://gcc.gnu.org/pipermail/gcc-patches/2024-November/668700.html in there is replaced with https://gcc.gnu.org/pipermail/gcc-patches/2024-November/668818.html I get ICE on e.g. opts-common.cc. Reduced testcase: void foo (int *, __SIZE_TYPE__); char *a, b[64], c; void bar (void) { for (int i = 0; i < 42; ++i) { char *d = &a[i]; int e; if (c) foo (&e, 1); __SIZE_TYPE__ f = __builtin_strlen (d); if (f) __builtin_memcpy (b, d, f); } } /home/jakub/src/gcc/obj72x/prev-gcc/cc1 -quiet -O2 fbc-ice.c during GIMPLE pass: wrestrict fbc-ice.c: In function ‘bar’: fbc-ice.c:5:1: internal compiler error: in fill_block_cache, at gimple-range-cache.cc:1565 5 | bar (void) | ^~~ 0x44ebf97 internal_error(char const*, ...) ../../gcc/diagnostic-global-context.cc:518 0x44bc0ef fancy_abort(char const*, int, char const*) ../../gcc/diagnostic.cc:1696 0x41d186f ranger_cache::fill_block_cache(tree_node*, basic_block_def*, basic_block_def*) ../../gcc/gimple-range-cache.cc:1565 0x41d07be ranger_cache::block_range(vrange&, basic_block_def*, tree_node*, bool) ../../gcc/gimple-range-cache.cc:1304 0x41c95f4 gimple_ranger::range_on_entry(vrange&, basic_block_def*, tree_node*) ../../gcc/gimple-range.cc:175 0x41c93f3 gimple_ranger::range_of_expr(vrange&, tree_node*, gimple*) ../../gcc/gimple-range.cc:147 0x41e2c8c gimple_infer_range::gimple_infer_range(gimple*, bool) ../../gcc/gimple-range-infer.cc:205 0x41e3f52 infer_range_manager::register_all_uses(tree_node*) ../../gcc/gimple-range-infer.cc:476 0x41e35ec infer_range_manager::has_range_p(basic_block_def*, tree_node*) ../../gcc/gimple-range-infer.cc:356 0x41d1a64 ranger_cache::fill_block_cache(tree_node*, basic_block_def*, basic_block_def*) ../../gcc/gimple-range-cache.cc:1604 0x41d07be ranger_cache::block_range(vrange&, basic_block_def*, tree_node*, bool) ../../gcc/gimple-range-cache.cc:1304 0x41c95f4 gimple_ranger::range_on_entry(vrange&, basic_block_def*, tree_node*) ../../gcc/gimple-range.cc:175 0x41c93f3 gimple_ranger::range_of_expr(vrange&, tree_node*, gimple*) ../../gcc/gimple-range.cc:147 0x41d5d5b fur_stmt::get_operand(vrange&, tree_node*) ../../gcc/gimple-range-fold.cc:143 0x41d7cb5 fold_using_range::range_of_range_op(vrange&, gimple_range_op_handler&, fur_source&) ../../gcc/gimple-range-fold.cc:718 0x41d770e fold_using_range::fold_stmt(vrange&, gimple*, fur_source&, tree_node*) ../../gcc/gimple-range-fold.cc:649 0x41c9d03 gimple_ranger::fold_range_internal(vrange&, gimple*, tree_node*) ../../gcc/gimple-range.cc:278 0x41ca03c gimple_ranger::range_of_stmt(vrange&, gimple*, tree_node*) ../../gcc/gimple-range.cc:339 0x41c95b5 gimple_ranger::range_on_entry(vrange&, basic_block_def*, tree_node*) ../../gcc/gimple-range.cc:172 0x41c93f3 gimple_ranger::range_of_expr(vrange&, tree_node*, gimple*) ../../gcc/gimple-range.cc:147 Please submit a full bug report, with preprocessed source (by using -freport-bug). Please include the complete backtrace with any bug report. See <https://gcc.gnu.org/bugs/> for instructions. Jakub