Commit 0de349f1 by Jeff Law

Improve DSE which in turn eliminates the need for jump threading and block…

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.
parent 2812a284
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:
......
......@@ -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)
......
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.
......
/* { 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;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment