Hi!

Some targets apparently force fortification unconditionally or at least by
default, when string.h is then included, memset etc. inlines might call
__builtin_memset or __builtin___memset_chk directly and for explicit builtin
uses -fno-builtin* doesn't work.  Fixed by avoiding those includes and
instead adding needed prototypes by hand, tested on x86_64-linux, committed
as obvious to trunk.

2013-01-28  Jakub Jelinek  <ja...@redhat.com>

        PR testsuite/56053
        * c-c++-common/asan/heap-overflow-1.c: Don't include stdlib.h and
        string.h.  Provide memset, malloc and free prototypes, adjust line
        numbers in dg-output.
        * c-c++-common/asan/stack-overflow-1.c: Don't include string.h.
        Provide memset prototype and adjust line numbers in dg-output.
        * c-c++-common/asan/global-overflow-1.c: Likewise.

--- gcc/testsuite/c-c++-common/asan/heap-overflow-1.c.jj        2012-12-13 
00:02:50.000000000 +0100
+++ gcc/testsuite/c-c++-common/asan/heap-overflow-1.c   2013-01-28 
13:47:58.682416114 +0100
@@ -2,8 +2,18 @@
 /* { dg-options "-fno-builtin-malloc -fno-builtin-free -fno-builtin-memset" } 
*/
 /* { dg-shouldfail "asan" } */
 
-#include <stdlib.h>
-#include <string.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void *memset (void *, int, __SIZE_TYPE__);
+void *malloc (__SIZE_TYPE__);
+void free (void *);
+
+#ifdef __cplusplus
+}
+#endif
+
 volatile int ten = 10;
 int main(int argc, char **argv) {
   char *x = (char*)malloc(10);
@@ -14,8 +24,8 @@ int main(int argc, char **argv) {
 }
 
 /* { dg-output "READ of size 1 at 0x\[0-9a-f\]+ thread T0.*(\n|\r\n|\r)" } */
-/* { dg-output "    #0 0x\[0-9a-f\]+ (in _*main 
(\[^\n\r]*heap-overflow-1.c:11|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
+/* { dg-output "    #0 0x\[0-9a-f\]+ (in _*main 
(\[^\n\r]*heap-overflow-1.c:21|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
 /* { dg-output "0x\[0-9a-f\]+ is located 0 bytes to the right of 10-byte 
region\[^\n\r]*(\n|\r\n|\r)" } */
 /* { dg-output "allocated by thread T0 here:\[^\n\r]*(\n|\r\n|\r)" } */
 /* { dg-output "    #0 0x\[0-9a-f\]+ (in 
_*(interceptor_|)malloc|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
-/* { dg-output "    #1 0x\[0-9a-f\]+ (in _*main 
(\[^\n\r]*heap-overflow-1.c:9|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
+/* { dg-output "    #1 0x\[0-9a-f\]+ (in _*main 
(\[^\n\r]*heap-overflow-1.c:19|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */
--- gcc/testsuite/c-c++-common/asan/stack-overflow-1.c.jj       2012-12-13 
00:02:50.000000000 +0100
+++ gcc/testsuite/c-c++-common/asan/stack-overflow-1.c  2013-01-28 
13:48:41.046171347 +0100
@@ -2,9 +2,13 @@
 /* { dg-options "-fno-builtin-memset" } */
 /* { dg-shouldfail "asan" } */
 
-volatile int ten = 10;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+void *memset (void *, int, __SIZE_TYPE__);
 
-#include <string.h>
+volatile int ten = 10;
 
 int main() {
   char x[10];
@@ -14,5 +18,5 @@ int main() {
 }
 
 /* { dg-output "READ of size 1 at 0x\[0-9a-f\]+ thread 
T0\[^\n\r]*(\n|\r\n|\r)" } */
-/* { dg-output "    #0 0x\[0-9a-f\]+ (in _*main 
(\[^\n\r]*stack-overflow-1.c:12|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
+/* { dg-output "    #0 0x\[0-9a-f\]+ (in _*main 
(\[^\n\r]*stack-overflow-1.c:16|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */
 /* { dg-output "Address 0x\[0-9a-f\]+ is\[^\n\r]*frame <main>" } */
--- gcc/testsuite/c-c++-common/asan/global-overflow-1.c.jj      2012-12-13 
00:02:50.000000000 +0100
+++ gcc/testsuite/c-c++-common/asan/global-overflow-1.c 2013-01-28 
13:46:13.900017787 +0100
@@ -2,7 +2,12 @@
 /* { dg-options "-fno-builtin-memset" } */
 /* { dg-shouldfail "asan" } */
 
-#include <string.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+void *memset (void *, int, __SIZE_TYPE__);
+
 volatile int ten = 10;
 
 int main() {
@@ -18,6 +23,6 @@ int main() {
 }
 
 /* { dg-output "READ of size 1 at 0x\[0-9a-f\]+ thread T0.*(\n|\r\n|\r)" } */
-/* { dg-output "    #0 0x\[0-9a-f\]+ (in _*main 
(\[^\n\r]*global-overflow-1.c:15|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r).*" } 
*/
+/* { dg-output "    #0 0x\[0-9a-f\]+ (in _*main 
(\[^\n\r]*global-overflow-1.c:20|\[^\n\r]*:0)|\[(\])\[^\n\r]*(\n|\r\n|\r).*" } 
*/
 /* { dg-output "0x\[0-9a-f\]+ is located 0 bytes to the right of global 
variable" } */
 /* { dg-output ".*YYY\[^\n\r]* of size 10\[^\n\r]*(\n|\r\n|\r)" } */

        Jakub

Reply via email to