From d6c1a7a7c779f4f3f4786c6dcbfed62e7347011a Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Sat, 23 Apr 2016 07:28:16 +0200 Subject: [PATCH] re PR sanitizer/70712 (False positive from AddressSanitizer with use of 'alignas') PR sanitizer/70712 * cfgexpand.c (expand_stack_vars): Fix typo. * c-c++-common/asan/pr70712.c: New test. From-SVN: r235384 --- gcc/ChangeLog | 5 ++++ gcc/cfgexpand.c | 2 +- gcc/testsuite/ChangeLog | 5 ++++ gcc/testsuite/c-c++-common/asan/pr70712.c | 32 +++++++++++++++++++++++ 4 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/c-c++-common/asan/pr70712.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ff68ee80b48..d2e15556206 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2016-04-23 Jakub Jelinek + + PR sanitizer/70712 + * cfgexpand.c (expand_stack_vars): Fix typo. + 2016-04-22 Szabolcs Nagy * system.h (list, map, set, vector): Include conditionally. diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c index 3ed2270e881..21f21c97502 100644 --- a/gcc/cfgexpand.c +++ b/gcc/cfgexpand.c @@ -1137,7 +1137,7 @@ expand_stack_vars (bool (*pred) (size_t), struct stack_vars_data *data) HOST_WIDE_INT prev_offset = align_base (frame_offset, MAX (alignb, ASAN_RED_ZONE_SIZE), - FRAME_GROWS_DOWNWARD); + !FRAME_GROWS_DOWNWARD); tree repr_decl = NULL_TREE; offset = alloc_stack_frame_space (stack_vars[i].size diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6ffb14ecdf0..82e814a3676 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-04-23 Jakub Jelinek + + PR sanitizer/70712 + * c-c++-common/asan/pr70712.c: New test. + 2016-04-22 Trevor Saunders * .gitattributes: New file. diff --git a/gcc/testsuite/c-c++-common/asan/pr70712.c b/gcc/testsuite/c-c++-common/asan/pr70712.c new file mode 100644 index 00000000000..74a6a75f20c --- /dev/null +++ b/gcc/testsuite/c-c++-common/asan/pr70712.c @@ -0,0 +1,32 @@ +/* PR sanitizer/70712 */ +/* { dg-do run } */ + +struct __attribute__((aligned (64))) S +{ + char s[4]; +}; + +struct T +{ + char t[8]; + char u[480]; + +}; + +__attribute__((noinline, noclone)) void +foo (struct T *p, struct S *q) +{ + __builtin_memset (p->t, '\0', sizeof (p->t)); + __builtin_memset (p->u, '\0', sizeof (p->u)); + __builtin_memset (q->s, '\0', sizeof (q->s)); +} + +int +main () +{ + struct S s; + struct T t; + foo (&t, &s); + asm volatile ("" : : "r" (&t), "r" (&s) : "memory"); + return 0; +} -- 2.30.2