re PR middle-end/86121 (missing -Wstringop-overflow on strcpy followed by strcat)
authorBernd Edlinger <bernd.edlinger@hotmail.de>
Tue, 21 Aug 2018 08:56:11 +0000 (08:56 +0000)
committerBernd Edlinger <edlinger@gcc.gnu.org>
Tue, 21 Aug 2018 08:56:11 +0000 (08:56 +0000)
2018-08-21  Bernd Edlinger  <bernd.edlinger@hotmail.de>

        PR middle-end/86121
        * tree-ssa-strlen.c (adjust_last_stmt): Avoid folding away undefined
        behaviour.

testsuite:
2018-08-21  Bernd Edlinger  <bernd.edlinger@hotmail.de>

        PR middle-end/86121
        * gcc.dg/Wstringop-overflow-6.c: Remove xfail.

From-SVN: r263693

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/Wstringop-overflow-6.c
gcc/tree-ssa-strlen.c

index 041b4f85a26646f975f315395b53598bb2f75c41..b4b7fe0b27ebf50c76a449bbc1d5f1a4bf70a7c2 100644 (file)
@@ -1,3 +1,9 @@
+2018-08-21  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+
+       PR middle-end/86121
+       * tree-ssa-strlen.c (adjust_last_stmt): Avoid folding away undefined
+       behaviour.
+
 2018-08-21  Rasmus Villemoes  <rv@rasmusvillemoes.dk>
 
        * config/vxworks.h: Guard vxworks_asm_out_constructor and
index 0a420304716a0f82f47efe9548d01131f95eb0a9..eb143b3fa7aa072e05535a8801e6ab72afd10f64 100644 (file)
@@ -1,3 +1,8 @@
+2018-08-21  Bernd Edlinger  <bernd.edlinger@hotmail.de>
+
+       PR middle-end/86121
+       * gcc.dg/Wstringop-overflow-6.c: Remove xfail.
+
 2018-08-21  Tom de Vries  <tdevries@suse.de>
 
        * gcc.c-torture/unsorted/dump-noaddr.x: Use -gno-record-gcc-switches
index 9284a87aeb0846d1ebe679945d5949bfad9f3fc5..acb0fcb6dc71aa79cdb7c648ad41b02d12fa3f62 100644 (file)
@@ -25,7 +25,7 @@ void test_strcpy_strcat_1 (void)
 
 void test_strcpy_strcat_2 (void)
 {
-  strcpy (a2, "12"), strcat (a2, "3");   /* { dg-warning "\\\[-Wstringop-overflow=]" "bug 86121" { xfail *-*-* } } */
+  strcpy (a2, "12"), strcat (a2, "3");   /* { dg-warning "\\\[-Wstringop-overflow=]" } */
 }
 
 void test_strcpy_strcat_3 (void)
index 1d813b4686791f6b9c4a0385495a868cbed78413..d0792aa38c879f3f4c71cbf1048e9c0f4f6229cc 100644 (file)
@@ -1107,6 +1107,13 @@ adjust_last_stmt (strinfo *si, gimple *stmt, bool is_strcat)
         to store the extra '\0' in that case.  */
       if ((tree_to_uhwi (len) & 3) == 0)
        return;
+
+      /* Don't fold away an out of bounds access, as this defeats proper
+        warnings.  */
+      tree dst = gimple_call_arg (last.stmt, 0);
+      tree size = compute_objsize (dst, 0);
+      if (size && tree_int_cst_lt (size, len))
+       return;
     }
   else if (TREE_CODE (len) == SSA_NAME)
     {