[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