analyzer: don't use <setjmp.h> in tests [PR97394]
authorDavid Malcolm <dmalcolm@redhat.com>
Tue, 13 Oct 2020 19:56:45 +0000 (15:56 -0400)
committerDavid Malcolm <dmalcolm@redhat.com>
Wed, 14 Oct 2020 20:36:25 +0000 (16:36 -0400)
PR analyzer/97394 reports issues with analyzer setjmp results
when testing against MUSL.  This patch fixes up gcc.dg/analyzer
so that it doesn't use <setjmp.h>.

gcc/testsuite/ChangeLog:
PR analyzer/97394
* gcc.dg/analyzer/setjmp-pr93378.c: Use test-setjmp.h rather than
<setjmp.h>.
* gcc.dg/analyzer/sigsetjmp-5.c: Likewise.
* gcc.dg/analyzer/sigsetjmp-6.c: Likewise.
* gcc.dg/analyzer/test-setjmp.h: Don't include <setjmp.h>.
Provide decls of jmp_buf, sigjmp_buf, setjmp, sigsetjmp,
longjmp, and siglongjmp.

gcc/testsuite/gcc.dg/analyzer/setjmp-pr93378.c
gcc/testsuite/gcc.dg/analyzer/sigsetjmp-5.c
gcc/testsuite/gcc.dg/analyzer/sigsetjmp-6.c
gcc/testsuite/gcc.dg/analyzer/test-setjmp.h

index 6e2468e701a28b332db32bbce147bd18c32a6666..e31e127d09df40ec7ef1259fe41691759337ff0a 100644 (file)
@@ -1,7 +1,7 @@
 /* { dg-additional-options "-O1 -g" } */
 /* { dg-require-effective-target indirect_jumps } */
 
-#include <setjmp.h>
+#include "test-setjmp.h"
 
 jmp_buf buf;
 
index 2bc73e80f2d74b24a85b4bde77c98816bdb2df54..d6a9910478ce481311856372527108b27a9407f4 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-require-effective-target sigsetjmp } */
 
-#include <setjmp.h>
+#include "test-setjmp.h"
 #include <stddef.h>
 #include "analyzer-decls.h"
 
index d45804b951a5151595c27906c729ce104357d017..f89277efc48472f7bfa546dd0cd63dd9ab7d0a9e 100644 (file)
@@ -1,6 +1,6 @@
 /* { dg-require-effective-target sigsetjmp } */
 
-#include <setjmp.h>
+#include "test-setjmp.h"
 #include <stddef.h>
 #include <stdlib.h>
 
index ee0e1ec7d75791cef181669eb4658425abba1875..db2422709e280c8cf3aea9bb9d4c8510c8bf2f78 100644 (file)
@@ -7,10 +7,19 @@
 
    setjmp is a function on some systems and a macro on others.
    This header provides a SETJMP macro in a (fake) system header,
-   for consistency of output across such systems.  */
-
-#include <setjmp.h>
+   along with precanned decls of setjmp, for consistency of output across
+   different systems.  */
 
 #pragma GCC system_header
 
+struct __jmp_buf_tag {};
+typedef struct __jmp_buf_tag jmp_buf[1];
+typedef struct __jmp_buf_tag sigjmp_buf[1];
+
+extern int setjmp(jmp_buf env);
+extern int sigsetjmp(sigjmp_buf env, int savesigs);
+
+extern void longjmp(jmp_buf env, int val);
+extern void siglongjmp(sigjmp_buf env, int val);
+
 #define SETJMP(E) setjmp(E)