aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2021-10-03 19:42:10 +0200
committerAldy Hernandez <aldyh@redhat.com>2021-10-04 13:20:25 +0200
commitfa3ccf8bfe9940b439d6cc2c38ee8da134b0ff2d (patch)
tree64209be6dbd9c65047a4786e9a938558d30e3528
parentad4a3c047f67d628b607bb6cf4791005affd1d83 (diff)
downloadgcc-fa3ccf8bfe9940b439d6cc2c38ee8da134b0ff2d.zip
gcc-fa3ccf8bfe9940b439d6cc2c38ee8da134b0ff2d.tar.gz
gcc-fa3ccf8bfe9940b439d6cc2c38ee8da134b0ff2d.tar.bz2
Remove static marker for range in alloca pass.
The m_ranges[] field in int_range<N> 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.
-rw-r--r--gcc/gimple-ssa-warn-alloca.c7
-rw-r--r--gcc/testsuite/g++.dg/Walloca2.C6
2 files changed, 9 insertions, 4 deletions
diff --git a/gcc/gimple-ssa-warn-alloca.c b/gcc/gimple-ssa-warn-alloca.c
index 4fc7125..d59cea8 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 0000000..b6992d0
--- /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<char *>(__builtin_alloca (a));