diff options
Diffstat (limited to 'gcc-4.8.1/gcc/testsuite/gcc.dg/bf-ms-layout.c')
-rw-r--r-- | gcc-4.8.1/gcc/testsuite/gcc.dg/bf-ms-layout.c | 231 |
1 files changed, 0 insertions, 231 deletions
diff --git a/gcc-4.8.1/gcc/testsuite/gcc.dg/bf-ms-layout.c b/gcc-4.8.1/gcc/testsuite/gcc.dg/bf-ms-layout.c deleted file mode 100644 index 109a01b0a..000000000 --- a/gcc-4.8.1/gcc/testsuite/gcc.dg/bf-ms-layout.c +++ /dev/null @@ -1,231 +0,0 @@ -/* bf-ms-layout.c */ - -/* Test for MS bitfield layout */ -/* Adapted from Donn Terry <donnte@microsoft.com> testcase - posted to GCC-patches - http://gcc.gnu.org/ml/gcc-patches/2000-08/msg00577.html */ - -/* { dg-do run { target *-*-interix* *-*-mingw* *-*-cygwin* i?86-*-darwin* } } */ -/* { dg-options "-mms-bitfields -D_TEST_MS_LAYOUT" } */ - -#include <stddef.h> -#include <string.h> - -extern void abort(); - -#pragma pack(8) - -struct one { - int d; - unsigned char a; - unsigned short b:7; - char c; -} ; - -struct two { - int d; - unsigned char a; - unsigned int b:7; - char c; -} ; - -struct three { - short d; - unsigned short a:3; - unsigned short b:9; - unsigned char c:7; -} ; - - -/* Bitfields of size 0 have some truly odd behaviors. */ - -struct four { - unsigned short a:3; - unsigned short b:9; - unsigned int :0; /* forces struct alignment to int */ - unsigned char c:7; -} ; - -struct five { - char a; - int :0; /* ignored; prior field is not a bitfield. */ - char b; - char c; -} ; - -struct six { - char a :8; - int :0; /* not ignored; prior field IS a bitfield, causes - struct alignment as well. */ - char b; - char c; -} ; - -struct seven { - char a:8; - char :0; - int :0; /* Ignored; prior field is zero size bitfield. */ - char b; - char c; -} ; - -struct eight { /* ms size 4 */ - short b:3; - char c; -} ; - -#ifdef _MSC_VER -#define LONGLONG __int64 -#else -#define LONGLONG long long -#endif - -union nine { /* ms size 8 */ - LONGLONG a:3; - char c; -} ; - -struct ten { /* ms size 16 */ - LONGLONG a:3; - LONGLONG b:3; - char c; -} ; - - -#define val(s,f) (s.f) - -#define check_struct(_X) \ -{ \ - if (sizeof (struct _X) != exp_sizeof_##_X ) \ - abort(); \ - memcpy(&test_##_X, filler, sizeof(test_##_X));\ - if (val(test_##_X,c) != exp_##_X##_c) \ - abort(); \ -} - -#define check_union(_X) \ -{ \ - if (sizeof (union _X) != exp_sizeof_##_X ) \ - abort(); \ - memcpy(&test_##_X, filler, sizeof(test_##_X));\ - if (val(test_##_X,c) != exp_##_X##_c) \ - abort(); \ -} - -#define check_struct_size(_X) \ -{ \ - if (sizeof (struct _X) != exp_sizeof_##_X ) \ - abort(); \ -} - -#define check_struct_off(_X) \ -{ \ - memcpy(&test_##_X, filler, sizeof(test_##_X));\ - if (val(test_##_X,c) != exp_##_X##_c) \ - abort(); \ -} - -#define check_union_size(_X) \ -{ \ - if (sizeof (union _X) != exp_sizeof_##_X ) \ - abort(); \ -} - -#define check_union_off(_X) \ -{ \ - memcpy(&test_##_X, filler, sizeof(test_##_X));\ - if (val(test_##_X,c) != exp_##_X##_c) \ - abort(); \ -} - -int main(){ - - unsigned char filler[16]; - struct one test_one; - struct two test_two; - struct three test_three; - struct four test_four; - struct five test_five; - struct six test_six; - struct seven test_seven; - struct eight test_eight; - union nine test_nine; - struct ten test_ten; - -#if defined (_TEST_MS_LAYOUT) || defined (_MSC_VER) - size_t exp_sizeof_one = 8; - size_t exp_sizeof_two = 12; - size_t exp_sizeof_three =6; - size_t exp_sizeof_four = 8; - size_t exp_sizeof_five = 3; - size_t exp_sizeof_six = 8; - size_t exp_sizeof_seven = 3; - size_t exp_sizeof_eight = 2; - size_t exp_sizeof_nine = 8; - size_t exp_sizeof_ten = 8; - - unsigned char exp_one_c = 7; - unsigned char exp_two_c = 9; - unsigned char exp_three_c = 4; - unsigned char exp_four_c = 4; - char exp_five_c = 2; - char exp_six_c = 5; - char exp_seven_c = 2; - char exp_eight_c = 1; - char exp_nine_c = 0; - char exp_ten_c = 1; - -#else /* testing -mno-ms-bitfields */ - - size_t exp_sizeof_one = 8; - size_t exp_sizeof_two = 8; - size_t exp_sizeof_three = 6; - size_t exp_sizeof_four = 6; - size_t exp_sizeof_five = 6; - size_t exp_sizeof_six = 6; - size_t exp_sizeof_seven = 6; - size_t exp_sizeof_eight = 2; - size_t exp_sizeof_nine = 8; - size_t exp_sizeof_ten = 8; - - unsigned short exp_one_c = 6; - unsigned int exp_two_c = 6; - unsigned char exp_three_c = 64; - unsigned char exp_four_c = 4; - char exp_five_c = 5; - char exp_six_c = 5; - char exp_seven_c = 5; - char exp_eight_c = 1; - char exp_nine_c = 0; - char exp_ten_c = 1; - -#endif - - unsigned char i; - for ( i = 0; i < 16; i++ ) - filler[i] = i; - - check_struct_off (one); - check_struct_off (two); - check_struct_off (three); - check_struct_off (four); - check_struct_off (five); - check_struct_off (six); - check_struct_off (seven); - check_struct_off (eight); - check_union_off (nine); - check_struct_off (ten); - - check_struct_size (one); - check_struct_size (two); - check_struct_size (three); - check_struct_size (four); - check_struct_size (five); - check_struct_size (six); - check_struct_size (seven); - check_struct_size (eight); - check_union_size (nine); - check_struct_size (ten); - - return 0; -}; |