This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Fix ICE in Asan
- From: Maxim Ostapenko <m dot ostapenko at partner dot samsung dot com>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Cc: Yuri Gribov <tetra2005 at gmail dot com>, Slava Garbuzov <v dot garbuzov at samsung dot com>, Jakub Jelinek <jakub at redhat dot com>
- Date: Fri, 20 Jun 2014 14:04:25 +0400
- Subject: [PATCH] Fix ICE in Asan
- Authentication-results: sourceware.org; auth=none
Hi,
This patch fixes https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61530.
Tested on x86_64-unknown-linux-gnu, no regressions.
Ok to commit?
-Maxim
gcc/ChangeLog:
2014-06-20 Yury Gribov <y.gribov@samsung.com>
Max Ostapenko <m.ostapenko@partner.samsung.com>
* asan.c (build_check_stmt): Add condition.
gcc/testsuite/ChangeLog:
2014-06-20 Yury Gribov <y.gribov@samsung.com>
Max Ostapenko <m.ostapenko@partner.samsung.com>
* c-c++-common/asan/pr61530.c: New test.
diff --git a/gcc/asan.c b/gcc/asan.c
index 281a795..4d87dad 100644
--- a/gcc/asan.c
+++ b/gcc/asan.c
@@ -1654,6 +1654,7 @@ build_check_stmt (location_t location, tree base, tree len,
if (size_in_bytes > 1)
{
if ((size_in_bytes & (size_in_bytes - 1)) != 0
+ || !is_scalar_access
|| size_in_bytes > 16)
size_in_bytes = -1;
else if (align && align < size_in_bytes * BITS_PER_UNIT)
diff --git a/gcc/testsuite/c-c++-common/asan/pr61530.c b/gcc/testsuite/c-c++-common/asan/pr61530.c
new file mode 100644
index 0000000..e306a71
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/asan/pr61530.c
@@ -0,0 +1,17 @@
+/* { dg-do run } */
+/* { dg-shouldfail "asan" } */
+
+__attribute__((noinline,noclone)) void
+foo (char *a, char *b) {
+ a[0] = b[0] = 0;
+ __builtin_memcpy(a, b, 4);
+}
+
+int
+main () {
+ char a, b;
+ foo (&a, &b);
+ return 0;
+}
+
+/* { dg-output "ERROR: AddressSanitizer: stack-buffer-overflow" } */