strlenopt-46.c: Define strnlen for targets like Solaris 10 that don't define the...
authorMartin Sebor <msebor@redhat.com>
Fri, 29 Jun 2018 16:37:54 +0000 (16:37 +0000)
committerMartin Sebor <msebor@gcc.gnu.org>
Fri, 29 Jun 2018 16:37:54 +0000 (10:37 -0600)
gcc/testsuite/ChangeLog:

* gcc.dg/strlenopt-46.c: Define strnlen for targets like Solaris 10
that don't define the function.

From-SVN: r262255

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/strlenopt-46.c

index cc71d594739e9814f4f3914b61d7e844a539cea4..063b271cd93f154ecbe32aff6bf5104a233650be 100644 (file)
@@ -1,3 +1,8 @@
+2018-06-29  Martin Sebor  <msebor@redhat.com>
+
+       * gcc.dg/strlenopt-46.c: Define strnlen for targets like Solaris 10
+       that don't define the function.
+
 2018-06-29  Marek Polacek  <polacek@redhat.com>
 
        PR c++/86184
index dc6eef7ca53d5a57dfbc1852d938a7eb3e2eba14..170b901bb703e796b6c3d82d08ad228fce3b2ceb 100644 (file)
@@ -1,6 +1,6 @@
 /* PR tree-optimization/86204 - wrong strlen result after prior strnlen
    { dg-do run }
-   { dg-options "-O2 -Wall" } */
+   { dg-options "-O2 -Wall -fdump-tree-optimized" } */
 
 #include "strlenopt.h"
 
@@ -129,3 +129,20 @@ int main (void)
   gx (2);
   gx (7);
 }
+
+
+/* For targets like Solaris 10 that don't define strnlen().  */
+
+NOIPA size_t
+strnlen (const char *s, size_t n)
+{
+  size_t len = 0;
+  while (*s++ && n--)
+    ++len;
+  return len;
+}
+
+/* Verify that at least some of the 11 calls to strnlen have been
+   folded (this number of folded calls may need to be adjusted up
+   if the strnlen optimization improves, but it should not go down.
+  { dg-final { scan-tree-dump-times "= strnlen" 7 "optimized" } } */