diff options
author | chefmax <chefmax@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-10-28 12:40:00 +0000 |
---|---|---|
committer | chefmax <chefmax@138bc75d-0d04-0410-961f-82ee72b054a4> | 2014-10-28 12:40:00 +0000 |
commit | bc36b644c96de4269c5b30aa079a5fa75e647364 (patch) | |
tree | 87aac893be9b155474e565e2b0dc07ec4911db78 | |
parent | f9acf11abea86d20a41fba38599134fbd3b1eb9d (diff) | |
download | gcc-bc36b644c96de4269c5b30aa079a5fa75e647364.tar.gz |
Add missing tests.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@216785 138bc75d-0d04-0410-961f-82ee72b054a4
7 files changed, 120 insertions, 0 deletions
diff --git a/gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-10.c b/gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-10.c new file mode 100644 index 00000000000..24dfcfec977 --- /dev/null +++ b/gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-10.c @@ -0,0 +1,18 @@ +/* { dg-options "-fdump-tree-sanopt" } */ +/* { dg-do compile } */ +/* { dg-skip-if "" { *-*-* } { "*" } { "-O0" } } */ + +extern __UINT32_TYPE__ a; + +void +foo () +{ + /* Instrument a with access size 3. */ + int d = __builtin_memcmp (&a, "123", 3); + /* This should generate a __builtin___asan_report_store4, because + the reference to a has been instrumented above with access size 3. */ + a = 1; +} + +/* { dg-final { scan-tree-dump-times "__builtin___asan_report_store4" 1 "sanopt" } } */ +/* { dg-final { cleanup-tree-dump "sanopt" } } */ diff --git a/gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-11.c b/gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-11.c new file mode 100644 index 00000000000..4082f32694b --- /dev/null +++ b/gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-11.c @@ -0,0 +1,20 @@ +/* { dg-options "-fdump-tree-sanopt" } */ +/* { dg-do compile } */ +/* { dg-skip-if "" { *-*-* } { "*" } { "-O0" } } */ + +extern __UINT32_TYPE__ a; + +void +foo () +{ + /* Instrument a with access size 5. */ + int d = __builtin_memcmp (&a, "12345", 4); + /* This should not generate a __builtin___asan_report_store4 because + the reference to a has been already instrumented above with access + size 5. */ + a = 1; +} + +/* { dg-final { scan-tree-dump-not "& 7" "sanopt" } } */ +/* { dg-final { scan-tree-dump-not "__builtin___asan_report_store" "sanopt" } } */ +/* { dg-final { cleanup-tree-dump "sanopt" } } */ diff --git a/gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-12.c b/gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-12.c new file mode 100644 index 00000000000..65e1d96f95d --- /dev/null +++ b/gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-12.c @@ -0,0 +1,16 @@ +/* { dg-options "-fdump-tree-sanopt" } */ +/* { dg-do compile } */ +/* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ + +void +foo (char *p) +{ + volatile int zero = 0; + __builtin_memcpy (p, "abc", zero); + /* This generates a __builtin___asan_report_store1 because we pass volatile + zero length into memcpy. */ + p[0] = 'd'; +} + +/* { dg-final { scan-tree-dump-times "__builtin___asan_report_store1" 1 "sanopt" } } */ +/* { dg-final { cleanup-tree-dump "sanopt" } } */ diff --git a/gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-13.c b/gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-13.c new file mode 100644 index 00000000000..c04be064188 --- /dev/null +++ b/gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-13.c @@ -0,0 +1,15 @@ +/* { dg-options "-fdump-tree-sanopt" } */ +/* { dg-do compile } */ +/* { dg-skip-if "" { *-*-* } { "*" } { "-O0" } } */ + +void +foo (char *p) +{ + __builtin_memcpy (p, "abc", 0); + /* This generates a __builtin___asan_report_store1 because we didn't access + any byte in previous memcpy because of zero length parameter. */ + p[0] = 'd'; +} + +/* { dg-final { scan-tree-dump-times "__builtin___asan_report_store1" 1 "sanopt" } } */ +/* { dg-final { cleanup-tree-dump "sanopt" } } */ diff --git a/gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-14.c b/gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-14.c new file mode 100644 index 00000000000..fadce906f55 --- /dev/null +++ b/gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-14.c @@ -0,0 +1,15 @@ +/* { dg-options "-fdump-tree-sanopt" } */ +/* { dg-do compile } */ +/* { dg-skip-if "" { *-*-* } { "*" } { "-O0" } } */ + +void +foo (char *p) +{ + __builtin_memcpy (p, "abc", 2); + /* This doesn't generate a __builtin___asan_report_store1 because we + verified p[0] through p[2] is writable in previous memcpy call. */ + p[0] = 'd'; +} + +/* { dg-final { scan-tree-dump-not "__builtin___asan_report_store1" "sanopt" } } */ +/* { dg-final { cleanup-tree-dump "sanopt" } } */ diff --git a/gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-15.c b/gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-15.c new file mode 100644 index 00000000000..00676dad614 --- /dev/null +++ b/gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-15.c @@ -0,0 +1,16 @@ +/* { dg-options "-fdump-tree-sanopt" } */ +/* { dg-do compile } */ +/* { dg-skip-if "" { *-*-* } { "-flto" } { "" } } */ + +void +foo (char *p) +{ + volatile int two = 2; + __builtin_memcpy (p, "abc", two); + /* This generates a __builtin___asan_report_store1 because we don't + optimize previous memcpy call. */ + p[0] = 'd'; +} + +/* { dg-final { scan-tree-dump-times "__builtin___asan_report_store1" 1 "sanopt" } } */ +/* { dg-final { cleanup-tree-dump "sanopt" } } */ diff --git a/gcc/testsuite/c-c++-common/asan/pr63638.c b/gcc/testsuite/c-c++-common/asan/pr63638.c new file mode 100644 index 00000000000..a8bafc5aad7 --- /dev/null +++ b/gcc/testsuite/c-c++-common/asan/pr63638.c @@ -0,0 +1,20 @@ +/* { dg-do compile } */ + +extern +#ifdef __cplusplus +"C" +#endif +void *memcpy (void *, const void *, __SIZE_TYPE__); + +struct S{ + long d0, d1, d2, d3, d4, d5, d6; +}; + +struct S s[6]; + +int f(struct S *p) +{ + memcpy(p, &s[2], sizeof(*p)); + memcpy(p, &s[1], sizeof(*p)); +} + |