analyzer: avoid using <string.h> in malloc-1.c
authorDavid Malcolm <dmalcolm@redhat.com>
Thu, 30 Jan 2020 20:44:59 +0000 (15:44 -0500)
committerDavid Malcolm <dmalcolm@redhat.com>
Fri, 31 Jan 2020 00:12:11 +0000 (19:12 -0500)
This test assumes that memset and strlen have been marked with
__attribute__((nonnull)), which isn't necessarily the case for an
arbitrary <string.h>.  This likely explains these failures:
  FAIL: gcc.dg/analyzer/malloc-1.c  (test for warnings, line 417)
  FAIL: gcc.dg/analyzer/malloc-1.c  (test for warnings, line 418)
  FAIL: gcc.dg/analyzer/malloc-1.c  (test for warnings, line 425)
  FAIL: gcc.dg/analyzer/malloc-1.c  (test for warnings, line 429)
seen in https://gcc.gnu.org/ml/gcc-testresults/2020-01/msg01608.html
on x86_64-apple-darwin18.

Fix it by using the __builtin_ forms.

gcc/testsuite/ChangeLog:
* gcc.dg/analyzer/malloc-1.c: Remove include of <string.h>.
Use __builtin_ forms of memset and strlen throughout.

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/analyzer/malloc-1.c

index 77dcc013b3f59868fa43161d1c05b19f977a9a37..e4e612ada921d2174d9dbaa938735d2472ceddcd 100644 (file)
@@ -1,3 +1,8 @@
+2020-01-30  David Malcolm  <dmalcolm@redhat.com>
+
+       * gcc.dg/analyzer/malloc-1.c: Remove include of <string.h>.
+       Use __builtin_ forms of memset and strlen throughout.
+
 2020-01-30  David Malcolm  <dmalcolm@redhat.com>
 
        * gcc.dg/analyzer/conditionals-2.c: Move to...
index e2e279bd7fd36b676a2f0759fc86893c4010fd09..c13170560afc83ff9433b7696cfd7df60b1f62b5 100644 (file)
@@ -1,6 +1,5 @@
 #include <alloca.h>
 #include <stdlib.h>
-#include <string.h>
 
 extern int foo (void);
 extern int bar (void);
@@ -71,7 +70,7 @@ void test_7 (void)
   void *ptr = malloc(4096);
   if (!ptr)
     return;
-  memset(ptr, 0, 4096);
+  __builtin_memset(ptr, 0, 4096);
   free(ptr);
 }
 
@@ -80,7 +79,7 @@ void *test_8 (void)
   void *ptr = malloc(4096);
   if (!ptr)
     return NULL;
-  memset(ptr, 0, 4096);
+  __builtin_memset(ptr, 0, 4096);
   return ptr;
   /* This needs phi nodes to affect equivalence classes, or we get a false report
      of a leak.  */
@@ -398,7 +397,7 @@ int test_35 (void)
   void *ptr = malloc(4096);
   if (!ptr)
     return -1;
-  memset(ptr, 0, 4096);
+  __builtin_memset(ptr, 0, 4096);
   free(ptr);
   return 0;
 }
@@ -408,14 +407,14 @@ void test_36 (void)
   void *ptr = malloc(4096);
   if (!ptr)
     return;
-  memset(ptr, 0, 4096);
+  __builtin_memset(ptr, 0, 4096);
   free(ptr);
 }
 
 void *test_37a (void)
 {
   void *ptr = malloc(4096); /* { dg-message "this call could return NULL" } */
-  memset(ptr, 0, 4096); /* { dg-warning "use of possibly-NULL 'ptr' where non-null expected" } */
+  __builtin_memset(ptr, 0, 4096); /* { dg-warning "use of possibly-NULL 'ptr' where non-null expected" } */
   return ptr;
 }
 
@@ -424,9 +423,9 @@ int test_37b (void)
   void *p = malloc(4096);
   void *q = malloc(4096); /* { dg-message "this call could return NULL" } */
   if (p) {
-    memset(p, 0, 4096); /* Not a bug: checked */
+    __builtin_memset(p, 0, 4096); /* Not a bug: checked */
   } else {
-    memset(q, 0, 4096); /* { dg-warning "use of possibly-NULL 'q' where non-null expected" } */
+    __builtin_memset(q, 0, 4096); /* { dg-warning "use of possibly-NULL 'q' where non-null expected" } */
   }
   free(p);
   free(q);
@@ -579,7 +578,7 @@ int test_47 (void)
     int retval = maybe_alloc (&p); /* this might write to "p".  */
     if (retval)
       return (retval);
-    p_size = strlen(p); /* { dg-bogus "non-null expected" } */
+    p_size = __builtin_strlen(p); /* { dg-bogus "non-null expected" } */
     free (p);
   }
   return p_size;