aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJeff Law <law@redhat.com>2020-01-29 12:23:53 -0700
committerJeff Law <law@redhat.com>2020-01-29 12:26:35 -0700
commit0de349f108d963219bd59aa374a68c15355236be (patch)
tree5ac0fe26ef9542fb34274a9a502095b4e213f6a2 /gcc
parent2812a28418b72b24979805cfca1f140dda4963b7 (diff)
downloadgcc-0de349f108d963219bd59aa374a68c15355236be.zip
gcc-0de349f108d963219bd59aa374a68c15355236be.tar.gz
gcc-0de349f108d963219bd59aa374a68c15355236be.tar.bz2
Improve DSE which in turn eliminates the need for jump threading and block duplication for the original testcase in pr89689 which in turn eliminates the false positive -Warray-bounds warning for the original testcase.
PR tree-optimization/89689 * builtins.def (BUILT_IN_OBJECT_SIZE): Make it const rather than pure. PR tree-optimization/89689 * gcc.dg/pr89689.c: New test.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/builtins.def2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/pr89689.c43
4 files changed, 54 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e2838c0..567dff6 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2020-01-24 Jeff Law <law@redhat.com>
+
+ PR tree-optimization/89689
+ * builtins.def (BUILT_IN_OBJECT_SIZE): Make it const rather than pure.
+
2020-01-29 Richard Sandiford <richard.sandiford@arm.com>
Revert:
diff --git a/gcc/builtins.def b/gcc/builtins.def
index 5ab842c..fa8b064 100644
--- a/gcc/builtins.def
+++ b/gcc/builtins.def
@@ -972,7 +972,7 @@ DEF_BUILTIN_STUB (BUILT_IN_STRCMP_EQ, "__builtin_strcmp_eq")
DEF_BUILTIN_STUB (BUILT_IN_STRNCMP_EQ, "__builtin_strncmp_eq")
/* Object size checking builtins. */
-DEF_GCC_BUILTIN (BUILT_IN_OBJECT_SIZE, "object_size", BT_FN_SIZE_CONST_PTR_INT, ATTR_PURE_NOTHROW_LEAF_LIST)
+DEF_GCC_BUILTIN (BUILT_IN_OBJECT_SIZE, "object_size", BT_FN_SIZE_CONST_PTR_INT, ATTR_CONST_NOTHROW_LEAF_LIST)
DEF_EXT_LIB_BUILTIN (BUILT_IN_MEMCPY_CHK, "__memcpy_chk", BT_FN_PTR_PTR_CONST_PTR_SIZE_SIZE, ATTR_RET1_NOTHROW_NONNULL_LEAF)
DEF_EXT_LIB_BUILTIN (BUILT_IN_MEMMOVE_CHK, "__memmove_chk", BT_FN_PTR_PTR_CONST_PTR_SIZE_SIZE, ATTR_RET1_NOTHROW_NONNULL_LEAF)
DEF_EXT_LIB_BUILTIN (BUILT_IN_MEMPCPY_CHK, "__mempcpy_chk", BT_FN_PTR_PTR_CONST_PTR_SIZE_SIZE, ATTR_RETNONNULL_NOTHROW_LEAF)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index e38c4da..b62e7ef 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2020-01-29 Jeff Law <law@redhat.com
+
+ PR tree-optimization/89689
+ * gcc.dg/pr89689.c: New test.
+
2020-01-29 Marek Polacek <polacek@redhat.com>
PR c++/91754 - Fix template arguments comparison with class NTTP.
diff --git a/gcc/testsuite/gcc.dg/pr89689.c b/gcc/testsuite/gcc.dg/pr89689.c
new file mode 100644
index 0000000..ee81274
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr89689.c
@@ -0,0 +1,43 @@
+/* { dg-do-compile } */
+/* { dg-options "-O2 -Warray-bounds" } */
+
+#include <string.h>
+#include <assert.h>
+#include <stdio.h>
+
+static inline __attribute__((__artificial__)) void *a(char *c, const char *d, long n)
+{
+ return __builtin___memcpy_chk(c, d, n, __builtin_object_size(c, 0));
+}
+typedef struct {
+ char *data;
+ int len;
+} sb_t;
+const char __sb_slop[1];
+static void inline set0(sb_t *c)
+{
+ if (c->data != __sb_slop)
+ c->data[0] = 0;
+ else
+ assert (c->data[0] == 0);
+}
+char buf[5];
+sb_t l = {
+ .data = buf,
+ .len = 0
+};
+void o()
+{
+ char *data = "abcd";
+ sb_t h = l;
+ set0(&h);
+ a(h.data, data, strlen(data));
+ printf("%s\n", h.data);
+ printf("%d\n", h.data == __sb_slop);
+ printf("%d\n", h.data == buf);
+ set0(&h);
+}
+int main(void) {
+ o();
+ return 0;
+}