Allow integer literals as addresses in instrumented builtins.
authorYury Gribov <y.gribov@samsung.com>
Thu, 7 Nov 2013 12:04:45 +0000 (12:04 +0000)
committerYury Gribov <ygribov@gcc.gnu.org>
Thu, 7 Nov 2013 12:04:45 +0000 (12:04 +0000)
gcc/
PR sanitizer/59029
* gcc/asan.c (get_mem_refs_of_builtin_call): Allow
integer literals as addresses in instrumented builtins.

gcc-testsuite/
PR sanitizer/59029
* c-c++-common/asan/pr59029.c: New test.

Co-Authored-By: Jakub Jelinek <jakub@redhat.com>
From-SVN: r204508

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

index 77f1b32..6a399a4 100644 (file)
@@ -1,3 +1,10 @@
+2013-11-07  Yury Gribov  <y.gribov@samsung.com>
+           Jakub Jelinek  <jakub@redhat.com>
+
+       PR sanitizer/59029
+       * gcc/asan.c (get_mem_refs_of_builtin_call): Allow
+       integer literals as addresses in instrumented builtins.
+
 2013-11-07  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
        * config/aarch64/aarch64.c (aarch64_legitimize_reload_address):
index fdca377..950d332 100644 (file)
@@ -715,7 +715,7 @@ get_mem_refs_of_builtin_call (const gimple call,
           instrument_derefs.  */
        if (TREE_CODE (dest) == ADDR_EXPR)
          dest = TREE_OPERAND (dest, 0);
-       else if (TREE_CODE (dest) == SSA_NAME)
+       else if (TREE_CODE (dest) == SSA_NAME || TREE_CODE (dest) == INTEGER_CST)
          dest = build2 (MEM_REF, TREE_TYPE (TREE_TYPE (dest)),
                         dest, build_int_cst (TREE_TYPE (dest), 0));
        else
index 56d30a3..f6e735f 100644 (file)
@@ -1,3 +1,9 @@
+2013-11-07  Yury Gribov  <y.gribov@samsung.com>
+           Jakub Jelinek  <jakub@redhat.com>
+
+       PR sanitizer/59029
+       * c-c++-common/asan/pr59029.c: New test.
+
 2013-11-07  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR target/59034
diff --git a/gcc/testsuite/c-c++-common/asan/pr59029.c b/gcc/testsuite/c-c++-common/asan/pr59029.c
new file mode 100644 (file)
index 0000000..a1319b2
--- /dev/null
@@ -0,0 +1,7 @@
+/* { dg-do compile } */
+
+int
+foo ()
+{
+  return __sync_fetch_and_add ((int *) 0, 1);
+}