X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=unittests%2FSupport%2FYAMLIOTest.cpp;h=0993d8c0b555e53c47ceaae5619aacade2caa5a7;hb=566fb9fe3ed767be7218fb1608ec6a284067d3b0;hp=afa71cc25ea2b1b695805e1d7534c5c27ec6ab68;hpb=50c30427405142f1b587edee846606184ae6af8e;p=oota-llvm.git diff --git a/unittests/Support/YAMLIOTest.cpp b/unittests/Support/YAMLIOTest.cpp index afa71cc25ea..0993d8c0b55 100644 --- a/unittests/Support/YAMLIOTest.cpp +++ b/unittests/Support/YAMLIOTest.cpp @@ -782,11 +782,17 @@ namespace yaml { struct MappingTraits { 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)); + // Type of "flags" field varies depending on "kind" field. + // Use memcpy here to avoid breaking strict aliasing rules. + if (kf.kind == kindA) { + AFlags aflags = static_cast(kf.flags); + io.mapRequired("flags", aflags); + kf.flags = aflags; + } else { + BFlags bflags = static_cast(kf.flags); + io.mapRequired("flags", bflags); + kf.flags = bflags; + } } }; }