/* { dg-do run } */ #include #include "init5.h" #include "dump.h" #pragma GCC diagnostic ignored "-Wscalar-storage-order" int main (void) { struct R1 A1 = My_R1; struct R2 A2 = My_R2; struct __attribute__((scalar_storage_order("little-endian"))) Nested1 { int A[3]; }; struct __attribute__((scalar_storage_order("big-endian"))) Nested2 { int A[3]; }; struct Nested1 N1; struct Nested2 N2; int C1; int C2; int C3; put ("A1 :"); dump (&A1, sizeof (struct R1)); new_line (); /* { dg-output "A1 : 78 56 34 12 12 00 ab 00 34 00 cd 00 56 00 ef 00.*\n" } */ put ("A2 :"); dump (&A2, sizeof (struct R2)); new_line (); /* { dg-output "A2 : 12 34 56 78 00 ab 00 12 00 cd 00 34 00 ef 00 56.*\n" } */ __builtin_memcpy (N1.A, A1.A, sizeof (int) * 3); C1 = N1.A[0]; C2 = N1.A[1]; C3 = N1.A[2]; printf ("C1 : %d\n", C1); /* { dg-output "C1 : 11206674.*\n" } */ printf ("C2 : %d\n", C2); /* { dg-output "C2 : 13434932.*\n" } */ printf ("C3 : %d\n", C3); /* { dg-output "C3 : 15663190.*\n" } */ N1.A[0] = C1; N1.A[1] = C2; N1.A[2] = C3; __builtin_memcpy (A1.A, N1.A, sizeof (int) * 3); __builtin_memcpy (N2.A, A2.A, sizeof (int) * 3); C1 = N2.A[0]; C2 = N2.A[1]; C3 = N2.A[2]; printf ("C1 : %d\n", C1); /* { dg-output "C1 : 11206674.*\n" } */ printf ("C2 : %d\n", C2); /* { dg-output "C2 : 13434932.*\n" } */ printf ("C3 : %d\n", C3); /* { dg-output "C3 : 15663190.*\n" } */ N2.A[0] = C1; N2.A[1] = C2; N2.A[2] = C3; __builtin_memcpy (A2.A, N2.A, sizeof (int) * 3); put ("A1 :"); dump (&A1, sizeof (struct R1)); new_line (); /* { dg-output "A1 : 78 56 34 12 12 00 ab 00 34 00 cd 00 56 00 ef 00.*\n" } */ put ("A2 :"); dump (&A2, sizeof (struct R2)); new_line (); /* { dg-output "A2 : 12 34 56 78 00 ab 00 12 00 cd 00 34 00 ef 00 56.*\n" } */ new_line (); return 0; }