aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAldy Hernandez <aldyh@redhat.com>2021-11-14 11:27:32 +0100
committerAldy Hernandez <aldyh@redhat.com>2021-11-14 14:13:55 +0100
commita7ef5da3a9c348c35abb72d6f64f209f5661cfa4 (patch)
tree4758eb567477b1b2ad3e0d5685367d9fccb0b344
parent5a6100a25536ff75c40f1b4c44442cdbedc0426b (diff)
downloadgcc-a7ef5da3a9c348c35abb72d6f64f209f5661cfa4.zip
gcc-a7ef5da3a9c348c35abb72d6f64f209f5661cfa4.tar.gz
gcc-a7ef5da3a9c348c35abb72d6f64f209f5661cfa4.tar.bz2
Do not pass NULL to memset in ssa_global_cache.
The code computing ranges in PHIs in the path solver reuses the temporary ssa_global_cache by calling its clear method. Calling it on an empty cache causes us to call memset with NULL. Tested on x86-64 Linux. gcc/ChangeLog: PR tree-optimization/103229 * gimple-range-cache.cc (ssa_global_cache::clear): Do not pass null value to memset. gcc/testsuite/ChangeLog: * gcc.dg/pr103229.c: New test.
-rw-r--r--gcc/gimple-range-cache.cc3
-rw-r--r--gcc/testsuite/gcc.dg/pr103229.c10
2 files changed, 12 insertions, 1 deletions
diff --git a/gcc/gimple-range-cache.cc b/gcc/gimple-range-cache.cc
index a63e20e..b347ede 100644
--- a/gcc/gimple-range-cache.cc
+++ b/gcc/gimple-range-cache.cc
@@ -651,7 +651,8 @@ ssa_global_cache::clear_global_range (tree name)
void
ssa_global_cache::clear ()
{
- memset (m_tab.address(), 0, m_tab.length () * sizeof (irange *));
+ if (m_tab.address ())
+ memset (m_tab.address(), 0, m_tab.length () * sizeof (irange *));
}
// Dump the contents of the global cache to F.
diff --git a/gcc/testsuite/gcc.dg/pr103229.c b/gcc/testsuite/gcc.dg/pr103229.c
new file mode 100644
index 0000000..96ef9af
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr103229.c
@@ -0,0 +1,10 @@
+// { dg-do compile }
+// { dg-options "-O -w" }
+
+int main() {
+ int i;
+ for (; i;)
+ ;
+
+ return 0;
+}