[llvm-commits] [llvm] r172081 - /llvm/trunk/unittests/Support/YAMLIOTest.cpp

Jakub Staszak kubastaszak at gmail.com
Thu Jan 10 13:04:07 PST 2013


Fixed in r172105.

On Jan 10, 2013, at 8:23 PM, Dmitri Gribenko <gribozavr at gmail.com> wrote:

> On Thu, Jan 10, 2013 at 8:17 PM, David Greene <greened at obbligato.org> wrote:
>> Author: greened
>> Date: Thu Jan 10 12:17:54 2013
>> New Revision: 172081
>> 
>> URL: http://llvm.org/viewvc/llvm-project?rev=172081&view=rev
>> Log:
>> Fix Alias Bug
>> 
>> Use memcpy to do type punning instead of a cast.  A cast or similar
>> operation through a union breaks strict aliasing rules.
> 
> Sorry, but it looks like it broke tests:
> http://lab.llvm.org:8011/builders/clang-x86_64-debian-fast/builds/99
> 
> Dmitri
> 
>> 
>> Modified:
>>    llvm/trunk/unittests/Support/YAMLIOTest.cpp
>> 
>> Modified: llvm/trunk/unittests/Support/YAMLIOTest.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/YAMLIOTest.cpp?rev=172081&r1=172080&r2=172081&view=diff
>> ==============================================================================
>> --- llvm/trunk/unittests/Support/YAMLIOTest.cpp (original)
>> +++ llvm/trunk/unittests/Support/YAMLIOTest.cpp Thu Jan 10 12:17:54 2013
>> @@ -783,10 +783,18 @@
>>     static void mapping(IO &io, KindAndFlags& kf) {
>>       io.mapRequired("kind",  kf.kind);
>>       // type of flags field varies depending on kind field
>> -      if ( kf.kind == kindA )
>> -        io.mapRequired("flags", *((AFlags*)&kf.flags));
>> -      else
>> -        io.mapRequired("flags", *((BFlags*)&kf.flags));
>> +
>> +      // Use memcpy here to avoid breaking strict aliasing rules.
>> +      if ( kf.kind == kindA ) {
>> +        AFlags aflags;
>> +        memcpy(&aflags, &kf.flags, sizeof(aflags));
>> +        io.mapRequired("flags", aflags);
>> +      }
>> +      else {
>> +        BFlags bflags;
>> +        memcpy(&bflags, &kf.flags, sizeof(bflags));
>> +        io.mapRequired("flags", bflags);
>> +      }
>>     }
>>   };
>> }
>> 
>> 
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
> 
> 
> 
> -- 
> main(i,j){for(i=2;;i++){for(j=2;j<i;j++){if(!(i%j)){j=0;break;}}if
> (j){printf("%d\n",i);}}} /*Dmitri Gribenko <gribozavr at gmail.com>*/
> _______________________________________________
> 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