mirror of git://gcc.gnu.org/git/gcc.git
61 lines
1.0 KiB
C
61 lines
1.0 KiB
C
/* dg-do run */
|
|
#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 and that vectors layout are the same
|
|
as arrays. */
|
|
|
|
struct TV4
|
|
{
|
|
vector int v;
|
|
};
|
|
|
|
typedef struct TV4 MYV4;
|
|
static inline int *f(MYV4 *a, int i)
|
|
{
|
|
return &(a->v[i]);
|
|
}
|
|
|
|
static inline MYV4 myfunc2( int x, int y, int z, int w )
|
|
{
|
|
MYV4 temp;
|
|
*f(&temp, 0 ) = x;
|
|
*f(&temp, 1 ) = y;
|
|
*f(&temp, 2 ) = z;
|
|
*f(&temp, 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;
|
|
|
|
modify();
|
|
|
|
if (*f(&val3, 0 ) != 1)
|
|
__builtin_abort ();
|
|
if (*f(&val3, 1 ) != 2)
|
|
__builtin_abort ();
|
|
if (*f(&val3, 2 ) != 3)
|
|
__builtin_abort ();
|
|
if (*f(&val3, 3 ) != 4)
|
|
__builtin_abort ();
|
|
|
|
__builtin_memcpy(a, &val3, 16);
|
|
for(i = 0; i < 4; i++)
|
|
if (a[i] != i+1)
|
|
__builtin_abort ();
|
|
|
|
|
|
return 0;
|
|
}
|
|
|