/* { dg-do run } */ /* { dg-options "-fno-common" { target hppa*-*-hpux* } } */ #define vector __attribute__((vector_size(sizeof(int)*4) )) /* Check to make sure that we extract and insert the vector at the same location for vector subscripting (with constant indexes) and that vectors layout are the same as arrays. */ struct TV4 { vector int v; }; typedef struct TV4 MYV4; static inline MYV4 myfunc2( int x, int y, int z, int w ) { MYV4 temp; temp.v[0] = x; temp.v[1] = y; temp.v[2] = z; temp.v[3] = w; return temp; } MYV4 val3; __attribute__((noinline)) void modify (void) { val3 = myfunc2( 1, 2, 3, 4 ); } int main( int argc, char* argv[] ) { int a[4]; int i; /* Set up the vector. */ modify(); /* Check the vector via the global variable. */ if (val3.v[0] != 1) __builtin_abort (); if (val3.v[1] != 2) __builtin_abort (); if (val3.v[2] != 3) __builtin_abort (); if (val3.v[3] != 4) __builtin_abort (); vector int a1 = val3.v; /* Check the vector via a local variable. */ if (a1[0] != 1) __builtin_abort (); if (a1[1] != 2) __builtin_abort (); if (a1[2] != 3) __builtin_abort (); if (a1[3] != 4) __builtin_abort (); __builtin_memcpy(a, &val3, sizeof(a)); /* Check the vector via copying it to an array. */ for(i = 0; i < 4; i++) if (a[i] != i+1) __builtin_abort (); return 0; }