From: Aldy Hernandez Date: Sun, 3 Oct 2021 17:42:10 +0000 (+0200) Subject: Remove static marker for range in alloca pass. X-Git-Tag: basepoints/gcc-13~4174 X-Git-Url: https://gcc.gnu.org/git/?a=commitdiff_plain;h=fa3ccf8bfe9940b439d6cc2c38ee8da134b0ff2d;p=gcc.git Remove static marker for range in alloca pass. The m_ranges[] field in int_range are trees, so they live in GC space. Since invalid_range is static, it must be marked with GTY magic. However, calculating invalid_range is not particularly slow, or on a critical path, so we can just put it in local scope and recalculate every time. Tested on x86-64 Linux. gcc/ChangeLog: PR tree-optimization/102560 * gimple-ssa-warn-alloca.c (alloca_call_type): Remove static marker for invalid_range. gcc/testsuite/ChangeLog: * g++.dg/Walloca2.C: New test. --- diff --git a/gcc/gimple-ssa-warn-alloca.c b/gcc/gimple-ssa-warn-alloca.c index 4fc7125d378e..d59cea8d4ecf 100644 --- a/gcc/gimple-ssa-warn-alloca.c +++ b/gcc/gimple-ssa-warn-alloca.c @@ -221,10 +221,9 @@ alloca_call_type (gimple *stmt, bool is_vla) && !r.varying_p ()) { // The invalid bits are anything outside of [0, MAX_SIZE]. - static int_range<2> invalid_range (build_int_cst (size_type_node, 0), - build_int_cst (size_type_node, - max_size), - VR_ANTI_RANGE); + int_range<2> invalid_range (build_int_cst (size_type_node, 0), + build_int_cst (size_type_node, max_size), + VR_ANTI_RANGE); r.intersect (invalid_range); if (r.undefined_p ()) diff --git a/gcc/testsuite/g++.dg/Walloca2.C b/gcc/testsuite/g++.dg/Walloca2.C new file mode 100644 index 000000000000..b6992d08bf36 --- /dev/null +++ b/gcc/testsuite/g++.dg/Walloca2.C @@ -0,0 +1,6 @@ +// { dg-do compile } +// { dg-options "-Walloca-larger-than=4207115063 -Wvla-larger-than=1233877270 -O2 --param ggc-min-heapsize=0 --param ggc-min-expand=0 -w" } +// { dg-require-effective-target alloca } + +int a; +char *b = static_cast(__builtin_alloca (a));