diff --git a/test/val/bug1178.c b/test/val/bug1178.c new file mode 100644 index 000000000..043767e4c --- /dev/null +++ b/test/val/bug1178.c @@ -0,0 +1,81 @@ + +/* bug #1178 - copying structs/unions > 4 bytes is broken */ + +#include +#include + +typedef struct +{ + unsigned char a; + unsigned char b; + unsigned char c; + unsigned char d; + unsigned char e; +} +TestStruct1; + +TestStruct1 StructArray1[2]; +TestStruct1 test1; + +typedef struct +{ + unsigned char a; + unsigned char b; + unsigned char c; + unsigned char d; +} +TestStruct2; + +TestStruct2 StructArray2[2]; +TestStruct2 test2; + +int res = EXIT_SUCCESS; + +void dotest1(void) +{ + test1.a = 42; + test1.b = 11; + test1.c = 23; + test1.d = 47; + test1.e = 13; + + StructArray1[0] = test1; + + printf ("test1: %d, %d, %d, %d, %d\n", + (int)StructArray1[0].a, (int)StructArray1[0].b, (int)StructArray1[0].c, + (int)StructArray1[0].d, (int)StructArray1[0].e); + if ((StructArray1[0].a != 42) || + (StructArray1[0].b != 11) || + (StructArray1[0].c != 23) || + (StructArray1[0].d != 47) || + (StructArray1[0].e != 13)) { + res = EXIT_FAILURE; + } +} + +void dotest2(void) +{ + test2.a = 42; + test2.b = 11; + test2.c = 23; + test2.d = 47; + + StructArray2[0] = test2; + + printf ("test2: %d, %d, %d, %d, %d\n", + (int)StructArray2[0].a, (int)StructArray2[0].b, + (int)StructArray2[0].c, (int)StructArray2[0].d); + if ((StructArray2[0].a != 42) || + (StructArray2[0].b != 11) || + (StructArray2[0].c != 23) || + (StructArray2[0].d != 47)) { + res = EXIT_FAILURE; + } +} + +int main(void) +{ + dotest1(); + dotest2(); + return res; +}