summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchefmax <chefmax@138bc75d-0d04-0410-961f-82ee72b054a4>2014-10-28 12:40:00 +0000
committerchefmax <chefmax@138bc75d-0d04-0410-961f-82ee72b054a4>2014-10-28 12:40:00 +0000
commitbc36b644c96de4269c5b30aa079a5fa75e647364 (patch)
tree87aac893be9b155474e565e2b0dc07ec4911db78
parentf9acf11abea86d20a41fba38599134fbd3b1eb9d (diff)
downloadgcc-bc36b644c96de4269c5b30aa079a5fa75e647364.tar.gz
Add missing tests.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@216785 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-10.c18
-rw-r--r--gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-11.c20
-rw-r--r--gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-12.c16
-rw-r--r--gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-13.c15
-rw-r--r--gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-14.c15
-rw-r--r--gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-15.c16
-rw-r--r--gcc/testsuite/c-c++-common/asan/pr63638.c20
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));
+}
+