[llvm-commits] [LLVM, PR11652 PATCH]: Fixed Bug 11652 - assertion failures when Type.cpp is compiled with -Os

Duncan Sands baldrick at free.fr
Mon Jan 2 02:02:45 PST 2012


Hi Stepan,

> The problem is in Type.h. The fields in Type class are declared in next order:
> TypeID ID : 8;
> unsigned SubclassData : 24;
> unsigned NumContainedTys;

does the problem still occur if you flip the order of ID and SubclassData?
I.e.
   unsigned SubclassData : 24;
   TypeID ID : 8;
   unsigned NumContainedTys;
?
Ciao, Duncan.
>
> Attempt to set new SubclassData value rewrites lowest byte in NumContainedTys
> when -Os is set. GCC bug? Anyway setting SubclassData with two workaround
> strings fixes the problem:
>
> void setSubclassData(unsigned val) {
> unsigned tmp = NumContainedTys; // Workaround for GCC -Os
> SubclassData = val;
> NumContainedTys = tmp; // Workaround for GCC -Os
> // Ensure we don't have any accidental truncation.
> assert(SubclassData == val && "Subclass data too large for field");
> }
>
> Probably there is another ways to protect NumContainedTys from overwritting?
>
> Please find the patch in attachment for review.
>
> -Stepan.
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits




More information about the llvm-commits mailing list