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

Dmitri Gribenko gribozavr at gmail.com
Thu Jan 10 11:23:30 PST 2013


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>*/



More information about the llvm-commits mailing list