OSDN Git Service

* gcc.dg/setjmp-2.c: New test.
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 23 Nov 2004 13:08:32 +0000 (13:08 +0000)
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 23 Nov 2004 13:08:32 +0000 (13:08 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@91087 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/setjmp-2.c [new file with mode: 0644]

index 4b9cd3f..605cad3 100644 (file)
@@ -1,3 +1,7 @@
+2004-11-23  Eric Botcazou  <ebotcazou@libertysurf.fr>
+
+       * gcc.dg/setjmp-2.c: New test.
+
 2004-11-22  James A. Morrison  <phython@gcc.gnu.org>
 
        * gcc.target/sparc/align.c, gcc.target/sparc/combined-2.c,
diff --git a/gcc/testsuite/gcc.dg/setjmp-2.c b/gcc/testsuite/gcc.dg/setjmp-2.c
new file mode 100644 (file)
index 0000000..6c89f8e
--- /dev/null
@@ -0,0 +1,48 @@
+/* PR middle-end/17813 */
+/* Origin: Tom Hughes <tom@compton.nu> */
+/* { dg-do run { target i?86-*-linux* x86_64-*-linux* } } */
+/* { dg-options "-O -fomit-frame-pointer -march=i386" { target i?86-*-linux* } } */
+/* { dg-options "-O -fomit-frame-pointer -m32 -march=i386" { target x86_64-*-linux* } } */
+
+#include <setjmp.h>
+#include <signal.h>
+#include <stdlib.h>
+
+static jmp_buf segv_jmpbuf;
+
+static void segv_handler(int seg)
+{
+   __builtin_longjmp(segv_jmpbuf, 1);
+}
+
+static int is_addressable(void *p, size_t size)
+{
+   volatile char * volatile cp = (volatile char *)p;
+   volatile int ret;
+   struct sigaction sa, origsa;
+   sigset_t mask;
+   
+   sa.sa_handler = segv_handler;
+   sa.sa_flags = 0;
+   sigfillset(&sa.sa_mask);
+   sigaction(SIGSEGV, &sa, &origsa);
+   sigprocmask(SIG_SETMASK, NULL, &mask);
+
+   if (__builtin_setjmp(segv_jmpbuf) == 0) {
+      while(size--)
+        *cp++;
+      ret = 1;
+    } else
+      ret = 0;
+
+   sigaction(SIGSEGV, &origsa, NULL);
+   sigprocmask(SIG_SETMASK, &mask, NULL);
+
+   return ret;
+}
+
+int main(int argc, char **argv)
+{
+   is_addressable(0x0, 1);
+   return 0;
+}