Add missing tests.
From-SVN: r216785
This commit is contained in:
parent
bdea98ca2e
commit
acc770ae3b
@ -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" } } */
|
@ -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" } } */
|
@ -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" } } */
|
@ -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" } } */
|
@ -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" } } */
|
@ -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" } } */
|
20
gcc/testsuite/c-c++-common/asan/pr63638.c
Normal file
20
gcc/testsuite/c-c++-common/asan/pr63638.c
Normal file
@ -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));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user