diff options
Diffstat (limited to 'gcc/testsuite/g++.old-deja/g++.robertl/eb91.C')
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.robertl/eb91.C | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.old-deja/g++.robertl/eb91.C b/gcc/testsuite/g++.old-deja/g++.robertl/eb91.C new file mode 100644 index 000000000..abfe9face --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.robertl/eb91.C @@ -0,0 +1,86 @@ +// { dg-do run } +#include <sys/types.h> +#include <algorithm> +typedef short _eb91_int16_t; +typedef char _eb91_int8_t; +typedef unsigned char _eb91_u_int8_t; +typedef unsigned short _eb91_u_int16_t; + +template <class INT> +class other_endian +{ +private: + + INT value; + + + _eb91_u_int16_t change_endian(_eb91_u_int16_t x) + { + union { + _eb91_u_int16_t i; + _eb91_u_int8_t c[2]; + } val; + val.i = x; + std::swap(val.c[0], val.c[1]); + return val.i; + } + + _eb91_int16_t change_endian(_eb91_int16_t x) + { + union { + _eb91_int16_t i; + _eb91_int8_t c[2]; + } val; + val.i = x; + std::swap(val.c[0], val.c[1]); + return val.i; + } +public: + other_endian(const INT i = 0) + { + value = change_endian(i); + } + + operator INT() + { + return change_endian(value); + } +}; + +template <class INT> +class same_endian +{ + INT value; + +public: + same_endian(const INT i = 0) + { + value = i; + } + + operator INT() + { + return value; + } +}; + + + + + + + + + + + + + + + + + +int main() { + other_endian <_eb91_u_int16_t> little_endian_16_bit_int; + return 0; +} |