re PR middle-end/56417 (internal compiler error: verify_gimple failed)
authorJakub Jelinek <jakub@redhat.com>
Tue, 13 Aug 2013 16:58:46 +0000 (18:58 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 13 Aug 2013 16:58:46 +0000 (18:58 +0200)
PR sanitizer/56417
* asan.c (instrument_strlen_call): Fix typo in comment.
Use char * type even for the lhs of POINTER_PLUS_EXPR.

* gcc.dg/asan/pr56417.c: New test.

From-SVN: r201696

gcc/ChangeLog
gcc/asan.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/asan/pr56417.c [new file with mode: 0644]

index 2cf949b..682328e 100644 (file)
@@ -1,3 +1,9 @@
+2013-08-13  Jakub Jelinek  <jakub@redhat.com>
+
+       PR sanitizer/56417
+       * asan.c (instrument_strlen_call): Fix typo in comment.
+       Use char * type even for the lhs of POINTER_PLUS_EXPR.
+
 2013-08-13  Steve Ellcey  <sellcey@mips.com>
 
        * config/mips/mips.md (prefetch): Use lw instead of ld on
index 78321b0..1756b07 100644 (file)
@@ -1635,7 +1635,7 @@ instrument_mem_region_access (tree base, tree len,
    access to the last byte of the argument; it uses the result of the
    call to deduce the offset of that last byte.
 
-   Upon completion, iff the call has actullay been instrumented, this
+   Upon completion, iff the call has actually been instrumented, this
    function returns TRUE and *ITER points to the statement logically
    following the built-in strlen function call *ITER was initially
    pointing to.  Otherwise, the function returns FALSE and *ITER
@@ -1666,10 +1666,10 @@ instrument_strlen_call (gimple_stmt_iterator *iter)
   /* Instrument the access to the first byte of str_arg.  i.e:
 
      _1 = str_arg; instrument (_1); */
+  tree cptr_type = build_pointer_type (char_type_node);
   gimple str_arg_ssa =
     gimple_build_assign_with_ops (NOP_EXPR,
-                                 make_ssa_name (build_pointer_type
-                                                (char_type_node), NULL),
+                                 make_ssa_name (cptr_type, NULL),
                                  str_arg, NULL);
   gimple_set_location (str_arg_ssa, loc);
   gimple_stmt_iterator gsi = *iter;
@@ -1688,8 +1688,7 @@ instrument_strlen_call (gimple_stmt_iterator *iter)
      pointer_plus expr: (_1 + len).  */
   gimple stmt =
     gimple_build_assign_with_ops (POINTER_PLUS_EXPR,
-                                 make_ssa_name (TREE_TYPE (str_arg),
-                                                NULL),
+                                 make_ssa_name (cptr_type, NULL),
                                  gimple_assign_lhs (str_arg_ssa),
                                  len);
   gimple_set_location (stmt, loc);
index c264264..6e1b630 100644 (file)
@@ -1,3 +1,8 @@
+2013-08-13  Jakub Jelinek  <jakub@redhat.com>
+
+       PR sanitizer/56417
+       * gcc.dg/asan/pr56417.c: New test.
+
 2013-08-13  Eric Botcazou  <ebotcazou@adacore.com>
 
        * gnat.dg/loop_optimization16.adb: New test.
diff --git a/gcc/testsuite/gcc.dg/asan/pr56417.c b/gcc/testsuite/gcc.dg/asan/pr56417.c
new file mode 100644 (file)
index 0000000..b7eabf1
--- /dev/null
@@ -0,0 +1,9 @@
+/* PR sanitizer/56417 */
+/* { dg-do compile } */
+/* { dg-options "-w" } */
+
+int
+foo (void)
+{
+  return __builtin_strlen (&foo);
+}