Do not instrument first byte in strlen if already instrumented.
authorMax Ostapenko <m.ostapenko@partner.samsung.com>
Mon, 7 Jul 2014 14:31:18 +0000 (17:31 +0300)
committerMaxim Ostapenko <chefmax@gcc.gnu.org>
Mon, 7 Jul 2014 14:31:18 +0000 (17:31 +0300)
gcc/
* asan.c (instrument_strlen_call): Do not instrument first byte in strlen
if already instrumented.

gcc/testsuite/
* c-c++-common/asan/no-redundant-instrumentation-9.c: New test.

From-SVN: r212332

gcc/ChangeLog
gcc/asan.c
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-9.c [new file with mode: 0644]

index f1115223d11cb87ea9d943f2bdde393db16f9ba8..69cc4d2f7a14595e4eddc4a1ed2ed02bd9891ff5 100644 (file)
@@ -1,3 +1,8 @@
+2014-06-24  Max Ostapenko  <m.ostapenko@partner.samsung.com>
+
+       * asan.c (instrument_strlen_call): Do not instrument first byte in strlen
+       if already instrumented.
+
 2014-07-07  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
 
        * config/arm/arm.opt (mwords-little-endian): Delete.
index 9eeafa897cf6fec156f0ccc454b7a5aea87a8398..20d78df5e15705472d1f6499c872b39489de72d5 100644 (file)
@@ -2026,6 +2026,7 @@ instrument_strlen_call (gimple_stmt_iterator *iter)
 
   location_t loc = gimple_location (call);
   tree str_arg = gimple_call_arg (call, 0);
+  bool start_instrumented = has_mem_ref_been_instrumented (str_arg, 1);
 
   tree cptr_type = build_pointer_type (char_type_node);
   gimple str_arg_ssa =
@@ -2037,7 +2038,8 @@ instrument_strlen_call (gimple_stmt_iterator *iter)
 
   build_check_stmt (loc, gimple_assign_lhs (str_arg_ssa), NULL_TREE, 1, iter,
                    /*non_zero_len_p*/true, /*before_p=*/true,
-                   /*is_store=*/false, /*is_scalar_access*/true, /*align*/0);
+                   /*is_store=*/false, /*is_scalar_access*/true, /*align*/0,
+                   start_instrumented, start_instrumented);
 
   gimple g =
     gimple_build_assign_with_ops (POINTER_PLUS_EXPR,
index 75b9bf7e9ccb8716d2b8d93872608eba7e7ed929..fae51c2ffbe99de03a28df006334c69630e065da 100644 (file)
@@ -1,3 +1,7 @@
+2014-06-24  Max Ostapenko  <m.ostapenko@partner.samsung.com>
+
+       * c-c++-common/asan/no-redundant-instrumentation-9.c: New test.
+
 2014-07-07  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/58898
diff --git a/gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-9.c b/gcc/testsuite/c-c++-common/asan/no-redundant-instrumentation-9.c
new file mode 100644 (file)
index 0000000..c6575ad
--- /dev/null
@@ -0,0 +1,13 @@
+/* { dg-options "-fdump-tree-asan0" } */
+/* { dg-do compile } */
+/* { dg-skip-if "" { *-*-* } { "*" } { "-O0" } } */
+
+__SIZE_TYPE__
+f (char *a)
+{
+  a[0] = '1';
+  return  __builtin_strlen (a);
+}
+
+/* { dg-final { scan-tree-dump-times "__asan_report_load1" 1 "asan0" } } */
+/* { dg-final { cleanup-tree-dump "asan0" } } */