aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2018-01-26 12:47:11 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2018-01-26 12:47:11 +0100
commit79fbdeb87e6e91a8179465ea56007e493c7ca751 (patch)
treeab9e2475b075b18581d93fb911addc7b3ac4712b
parent62f2664539efdced7387a13c2e9a6465f5867c0f (diff)
downloadgcc-79fbdeb87e6e91a8179465ea56007e493c7ca751.zip
gcc-79fbdeb87e6e91a8179465ea56007e493c7ca751.tar.gz
gcc-79fbdeb87e6e91a8179465ea56007e493c7ca751.tar.bz2
re PR c/83989 (-Wrestrict false positive with malloc-style functions)
PR c/83989 * gimple-ssa-warn-restrict.c (builtin_memref::builtin_memref): Don't use SSA_NAME_VAR as base for SSA_NAMEs with non-NULL SSA_NAME_VAR. * c-c++-common/Wrestrict-3.c: New test. From-SVN: r257086
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/gimple-ssa-warn-restrict.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/c-c++-common/Wrestrict-3.c48
4 files changed, 59 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b6052fc..32fb7ba 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2018-01-26 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/83989
+ * gimple-ssa-warn-restrict.c (builtin_memref::builtin_memref): Don't
+ use SSA_NAME_VAR as base for SSA_NAMEs with non-NULL SSA_NAME_VAR.
+
2018-01-26 Claudiu Zissulescu <claziss@synopsys.com>
* config/arc/arc-arch.h (arc_tune_attr): Add ARC_TUNE_CORE_3.
diff --git a/gcc/gimple-ssa-warn-restrict.c b/gcc/gimple-ssa-warn-restrict.c
index d3e4e52..5b3b969 100644
--- a/gcc/gimple-ssa-warn-restrict.c
+++ b/gcc/gimple-ssa-warn-restrict.c
@@ -373,9 +373,6 @@ builtin_memref::builtin_memref (tree expr, tree size)
offrange[1] += off;
}
}
-
- if (TREE_CODE (base) == SSA_NAME && SSA_NAME_VAR (base))
- base = SSA_NAME_VAR (base);
}
if (size)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 741e538..c484d5b 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2018-01-26 Jakub Jelinek <jakub@redhat.com>
+
+ PR c/83989
+ * c-c++-common/Wrestrict-3.c: New test.
+
2018-01-26 Claudiu Zissulescu <claziss@synopsys.com>
* testsuite/gcc.target/arc/tdelegitimize_addr.c: New test.
diff --git a/gcc/testsuite/c-c++-common/Wrestrict-3.c b/gcc/testsuite/c-c++-common/Wrestrict-3.c
new file mode 100644
index 0000000..30fc54e
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/Wrestrict-3.c
@@ -0,0 +1,48 @@
+/* PR c/83989 */
+/* { dg-do compile } */
+/* { dg-options "-O2 -Wrestrict" } */
+
+__attribute__((__malloc__)) extern void *my_malloc (__SIZE_TYPE__);
+void baz (void *);
+
+#define SIZE 32
+
+void
+foo (void)
+{
+ void *recmem = __builtin_malloc (SIZE);
+ baz (recmem);
+ while (1)
+ {
+ void *oldrecmem = recmem;
+ recmem = __builtin_malloc (SIZE);
+ if (!recmem)
+ {
+ __builtin_free (oldrecmem);
+ return;
+ }
+ __builtin_memcpy (recmem, oldrecmem, SIZE); /* { dg-bogus "accessing" } */
+ baz (recmem);
+ __builtin_free (oldrecmem);
+ }
+}
+
+void
+bar (void)
+{
+ void *recmem = my_malloc (SIZE);
+ baz (recmem);
+ while (1)
+ {
+ void *oldrecmem = recmem;
+ recmem = my_malloc (SIZE);
+ if (!recmem)
+ {
+ __builtin_free (oldrecmem);
+ return;
+ }
+ __builtin_memcpy (recmem, oldrecmem, SIZE); /* { dg-bogus "accessing" } */
+ baz (recmem);
+ __builtin_free (oldrecmem);
+ }
+}