Changes in directory llvm-test/SingleSource/UnitTests/Integer:
cppfield2.cpp added (r1.1) cppfield2.reference_output added (r1.1) cppfield.cpp updated: 1.4 -> 1.5 cppfield.reference_output updated: 1.1 -> 1.2 --- Log message: Update the cppfield tests to be correct. bit-accurate inteers are not the same as bit fields when used in a struct. --- Diffs of the changes: (+106 -20) cppfield.cpp | 49 +++++++++++++++++++++-------------- cppfield.reference_output | 8 +++++ cppfield2.cpp | 62 +++++++++++++++++++++++++++++++++++++++++++++ cppfield2.reference_output | 7 +++++ 4 files changed, 106 insertions(+), 20 deletions(-) Index: llvm-test/SingleSource/UnitTests/Integer/cppfield2.cpp diff -c /dev/null llvm-test/SingleSource/UnitTests/Integer/cppfield2.cpp:1.1 *** /dev/null Mon Jan 29 18:48:54 2007 --- llvm-test/SingleSource/UnitTests/Integer/cppfield2.cpp Mon Jan 29 18:48:44 2007 *************** *** 0 **** --- 1,62 ---- + //===-- cppfield.cpp - Test C++ Fields With Bit Accurate Types ------------===// + // + // This file was developed by Guoling Han and is distributed under the + // University of Illinois Open Source License. See LICENSE.TXT for details. + // + //===----------------------------------------------------------------------===// + // This is a test for conversion between different int types. + // + //===----------------------------------------------------------------------===// + + + #include <stdio.h> + + typedef unsigned char __attribute__ ((bitwidth(7))) int7; + typedef unsigned int __attribute__ ((bitwidth(17))) int17; + typedef unsigned int __attribute__ ((bitwidth(32))) int32; + typedef unsigned int __attribute__ ((bitwidth(8))) int8; + + class bitFieldStruct { + public: + int i; + unsigned char c:7; + int s:17; + char c2; + }; + + class bitAccurateStruct { + public: + int32 i; + int7 c : 7; + int17 s : 17; + int8 c2; + }; + + int main() + { + printf("sizeof(bitFieldStruct) == %d\n", sizeof(bitFieldStruct)); + printf("sizeof(bitAccurateStruct) == %d\n", sizeof(bitAccurateStruct)); + + if (sizeof(bitAccurateStruct) != 2 * sizeof(int)) + printf("bitAccurrateStruct should be %d but is %d \n", + 2 * sizeof(int), sizeof(bitAccurateStruct)); + + if (sizeof(bitFieldStruct) != 2 * sizeof(int)) + printf("bitFieldStruct should be %d but is %d \n", + 2 * sizeof(int), sizeof(bitAccurateStruct)); + + bitFieldStruct x; + bitAccurateStruct y; + + char* yip = (char*) &y.i; + char* yc2p = (char*) &y.c2; + printf("Offset bitAccurateStruct.i = %d\n", yip - yip); + printf("Offset bitAccurateStruct.c2 = %d\n", yc2p - yip); + + char* xip = (char*) &x.i; + char* xc2p = (char*) &x.c2; + printf("Offset bitFieldStruct.i = %d\n", xip - xip); + printf("Offset bitFieldStruct.c2 = %d\n", xc2p - xip); + + return 0; + } Index: llvm-test/SingleSource/UnitTests/Integer/cppfield2.reference_output diff -c /dev/null llvm-test/SingleSource/UnitTests/Integer/cppfield2.reference_output:1.1 *** /dev/null Mon Jan 29 18:49:00 2007 --- llvm-test/SingleSource/UnitTests/Integer/cppfield2.reference_output Mon Jan 29 18:48:44 2007 *************** *** 0 **** --- 1,7 ---- + sizeof(bitFieldStruct) == 8 + sizeof(bitAccurateStruct) == 8 + Offset bitAccurateStruct.i = 0 + Offset bitAccurateStruct.c2 = 7 + Offset bitFieldStruct.i = 0 + Offset bitFieldStruct.c2 = 7 + exit 0 Index: llvm-test/SingleSource/UnitTests/Integer/cppfield.cpp diff -u llvm-test/SingleSource/UnitTests/Integer/cppfield.cpp:1.4 llvm-test/SingleSource/UnitTests/Integer/cppfield.cpp:1.5 --- llvm-test/SingleSource/UnitTests/Integer/cppfield.cpp:1.4 Mon Jan 22 18:17:21 2007 +++ llvm-test/SingleSource/UnitTests/Integer/cppfield.cpp Mon Jan 29 18:48:44 2007 @@ -11,12 +11,12 @@ #include <stdio.h> -typedef unsigned int __attribute__ ((bitwidth(7))) int7; +typedef unsigned char __attribute__ ((bitwidth(7))) int7; typedef unsigned int __attribute__ ((bitwidth(17))) int17; typedef unsigned int __attribute__ ((bitwidth(32))) int32; typedef unsigned int __attribute__ ((bitwidth(8))) int8; -class myStruct{ +class bitFieldStruct { public: int i; unsigned char c:7; @@ -24,7 +24,7 @@ char c2; }; -class myStruct2{ +class bitAccurateStruct { public: int32 i; int7 c; @@ -34,24 +34,33 @@ int main() { - myStruct x; - myStruct2 y; + printf("sizeof(bitFieldStruct) == %d\n", sizeof(bitFieldStruct)); + printf("sizeof(bitAccurateStruct) == %d\n", sizeof(bitAccurateStruct)); - char* ptrc, *ptrc1, *ptrc2, *ptrc3; - unsigned int offset, offset1; - - ptrc = (char*)&(x.i); - ptrc1 = (char*)&(x.c2); - - ptrc2 = (char*)&(y.i); - ptrc3 = (char*)&(y.c2); - - offset = ptrc1 - ptrc; - offset1 = ptrc3 - ptrc2; - - - if(offset != offset1 || sizeof(myStruct) != sizeof(myStruct2)) - printf("error\n"); + if (sizeof(bitAccurateStruct) != 4 * sizeof(int)) + printf("bitAccurrateStruct should be %d but is %d \n", + 4 * sizeof(int), sizeof(bitAccurateStruct)); + + if (sizeof(bitFieldStruct) != 2 * sizeof(int)) + printf("bitFieldStruct should be %d but is %d \n", + 2 * sizeof(int), sizeof(bitAccurateStruct)); + + bitFieldStruct x; + bitAccurateStruct y; + + char* yip = (char*) &y.i; + char* ycp = (char*) &y.c; + char* ysp = (char*) &y.s; + char* yc2p = (char*) &y.c2; + printf("Offset bitAccurateStruct.i = %d\n", yip - yip); + printf("Offset bitAccurateStruct.c = %d\n", ycp - yip); + printf("Offset bitAccurateStruct.s = %d\n", ysp - yip); + printf("Offset bitAccurateStruct.c2 = %d\n", yc2p - yip); + + char* xip = (char*) &x.i; + char* xc2p = (char*) &x.c2; + printf("Offset bitFieldStruct.i = %d\n", xip - xip); + printf("Offset bitFieldStruct.c2 = %d\n", xc2p - xip); return 0; } Index: llvm-test/SingleSource/UnitTests/Integer/cppfield.reference_output diff -u llvm-test/SingleSource/UnitTests/Integer/cppfield.reference_output:1.1 llvm-test/SingleSource/UnitTests/Integer/cppfield.reference_output:1.2 --- llvm-test/SingleSource/UnitTests/Integer/cppfield.reference_output:1.1 Thu Jan 18 20:22:46 2007 +++ llvm-test/SingleSource/UnitTests/Integer/cppfield.reference_output Mon Jan 29 18:48:44 2007 @@ -1 +1,9 @@ +sizeof(bitFieldStruct) == 8 +sizeof(bitAccurateStruct) == 16 +Offset bitAccurateStruct.i = 0 +Offset bitAccurateStruct.c = 4 +Offset bitAccurateStruct.s = 8 +Offset bitAccurateStruct.c2 = 12 +Offset bitFieldStruct.i = 0 +Offset bitFieldStruct.c2 = 7 exit 0 _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits