71 lines
1.1 KiB
C
71 lines
1.1 KiB
C
/* { dg-do run { target powerpc*-*-darwin* } } */
|
|
/* { dg-options "-fexceptions -fnon-call-exceptions -O -maltivec" } */
|
|
|
|
#include <cstdlib>
|
|
#include <cstring>
|
|
#include <signal.h>
|
|
|
|
typedef int __attribute__((vector_size(16))) v;
|
|
|
|
v vv[32];
|
|
volatile v vt = { 1, 2, 3, 4 };
|
|
|
|
void clobber_vrs(void) { };
|
|
|
|
void (*volatile fp)() = clobber_vrs;
|
|
|
|
void thrower(int sig)
|
|
{
|
|
v v00 = vv[ 0];
|
|
v v01 = vv[ 1];
|
|
v v02 = vv[ 2];
|
|
v v03 = vv[ 3];
|
|
v v04 = vv[ 4];
|
|
v v05 = vv[ 5];
|
|
v v06 = vv[ 6];
|
|
v v07 = vv[ 7];
|
|
v v08 = vv[ 8];
|
|
v v09 = vv[ 9];
|
|
v v10 = vv[10];
|
|
v v11 = vv[11];
|
|
v v12 = vv[12];
|
|
|
|
fp();
|
|
|
|
vv[ 0] = v00;
|
|
vv[ 1] = v01;
|
|
vv[ 2] = v02;
|
|
vv[ 3] = v03;
|
|
vv[ 4] = v04;
|
|
vv[ 5] = v05;
|
|
vv[ 6] = v06;
|
|
vv[ 7] = v07;
|
|
vv[ 8] = v08;
|
|
vv[ 9] = v09;
|
|
vv[10] = v10;
|
|
vv[11] = v11;
|
|
vv[12] = v12;
|
|
|
|
throw 3;
|
|
}
|
|
|
|
v v2;
|
|
|
|
int main(void)
|
|
{
|
|
v v1 = vt;
|
|
if (signal (SIGBUS, thrower) == SIG_ERR)
|
|
abort ();
|
|
if (signal (SIGSEGV, thrower) == SIG_ERR)
|
|
abort ();
|
|
try {
|
|
*(volatile int *)0 = 0;
|
|
abort ();
|
|
} catch (int x) {
|
|
}
|
|
v2 = v1;
|
|
if (memcmp (&v2, (v *)&vt, sizeof (v2)) != 0)
|
|
abort ();
|
|
return 0;
|
|
}
|