davis@cs.unc.edu (Mark Davis) (09/25/89)
Fields in structures (with bit sizes specified) are not correctly assigned to long long ints. The high order word of the target containts some unpredictable value. ==================== Source Listing ============================= clocs% cat s2.c main() { struct this { short int si; unsigned int that:24; unsigned int them:24; } direct; long long int lli; int ii; ii=-1; lli = ii; printf("ii=%d. lli=%d/%d\n",ii,lli); direct.that=5; lli=direct.that; ii=direct.that; printf("direct.that=%d, ii=%d, lli=%d/%d.\n",direct.that,ii,lli); } =================== Program Output ============================== clocs% s2 ii=-1. lli=-1/-1 direct.that=5, ii=5, lli=17/5. /* Comment: * If lli is not set first (to demonstate that int assignments * work) the output is correct. Other changes to the program also * change the resulting incorrect answer. */ ================== Output of Compile ============================ clocs% make s2 gcc -g -v s2.c -o s2 gcc version 1.36 /unc/davis/lib/gcc-cpp -v -undef -D__GNUC__ -Dmc68000 -Dsun -Dunix -D__mc68000__ -D__sun__ -D__unix__ -D__HAVE_68881__ -Dmc68020 s2.c /usr/tmp/cca18737.cpp GNU CPP version 1.36 /unc/davis/lib/gcc-cc1 /usr/tmp/cca18737.cpp -quiet -dumpbase s2.c -g -version -o /usr/tmp/cca18737.s GNU C version 1.36 (68k, MIT syntax) compiled by CC. default target switches: -m68020 -mc68020 -m68881 -mbitfield as -mc68020 -o s2.o /usr/tmp/cca18737.s ld -o s2 /lib/crt0.o /lib/Mcrt1.o s2.o /unc/davis/lib/gcc-gnulib -lg -lc ================ Compiler Build History ========================= GCC 1.36 clocs% config.gcc sun3 Linked `config.h' to `./config/xm-m68k.h'. Linked `tm.h' to `./config/tm-sun3os3.h'. Linked `md' to `./config/m68k.md'. Linked `aux-output.c' to `./config/out-m68k.c'. Links are now set up for use with a sun3. Then, I edited config/tm-m68k.h to define WORDS_BIG_ENDIAN. [and edited Makefile to change bin directory, etc.] compiled and run on a Sun 3/60 running Sun UNIX 4.2 Release 3.5 Hope this helps - Mark (davis@cs.unc.edu or uunet!mcnc!davis) (919)962-1739