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

Stepan Dyatkovskiy STPWORLD at narod.ru
Mon Jan 2 02:30:40 PST 2012


I tried it doesn't helps. Now it seems that ID is overwritten. 4807 unexpected failures.
-Stepan.

02.01.2012, 14:02, "Duncan Sands" <baldrick at free.fr>:
> 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
>
> _______________________________________________
> 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