PR sanitizer/88333 84/210384/3
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 5 Dec 2018 08:26:06 +0000 (08:26 +0000)
committerDongkyun Son <dongkyun.s@samsung.com>
Mon, 22 Jul 2019 12:14:42 +0000 (21:14 +0900)
* cfgexpand.c (expand_stack_vars): If asan_vec is empty, start with
aligning frame offset to ASAN_RED_ZONE_SIZE bytes.

* c-c++-common/asan/pr88333.c: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@266817 138bc75d-0d04-0410-961f-82ee72b054a4

(backported db93a9789e3993801a493fcde11da7f08f212f6e)

Change-Id: Ie0c2c8f000777190e316c4051e2e781a5be823ef

gcc/ChangeLog
gcc/cfgexpand.c
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/asan/pr88333.c [new file with mode: 0644]

index 8c0d502..6c74cb2 100644 (file)
@@ -1,3 +1,9 @@
+2018-12-05  Jakub Jelinek  <jakub@redhat.com>
+
+       PR sanitizer/88333
+       * cfgexpand.c (expand_stack_vars): If asan_vec is empty, start with
+       aligning frame offset to ASAN_RED_ZONE_SIZE bytes.
+
 2018-12-02  Jakub Jelinek  <jakub@redhat.com>
 
        PR sanitizer/88291
index 2a541b8..1c4736a 100644 (file)
@@ -1128,6 +1128,11 @@ expand_stack_vars (bool (*pred) (size_t), struct stack_vars_data *data)
                = align_base (frame_offset,
                              MAX (alignb, ASAN_MIN_RED_ZONE_SIZE),
                              !FRAME_GROWS_DOWNWARD);
+             if (data->asan_vec.is_empty ())
+               {
+                 alloc_stack_frame_space (0, ASAN_RED_ZONE_SIZE);
+                 prev_offset = frame_offset;
+               }
              tree repr_decl = NULL_TREE;
              unsigned HOST_WIDE_INT size
                = asan_var_and_redzone_size (stack_vars[i].size);
index 2e6c35b..7dc8ba3 100644 (file)
@@ -1,3 +1,8 @@
+2018-12-05  Jakub Jelinek  <jakub@redhat.com>
+
+       PR sanitizer/88333
+       * c-c++-common/asan/pr88333.c: New test.
+
 2018-12-02  Jakub Jelinek  <jakub@redhat.com>
 
        PR sanitizer/88291
diff --git a/gcc/testsuite/c-c++-common/asan/pr88333.c b/gcc/testsuite/c-c++-common/asan/pr88333.c
new file mode 100644 (file)
index 0000000..0f257a8
--- /dev/null
@@ -0,0 +1,12 @@
+/* PR sanitizer/88333 */
+/* { dg-do compile { target fstack_protector } } */
+/* { dg-options "-fstack-protector-strong -fsanitize=address" } */
+
+void bar (int *);
+
+void
+foo (void)
+{
+  int c;
+  bar (&c);
+}