[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