EXPECT_FALSE(yin.error());
EXPECT_TRUE(map.str.equals("hello there"));
EXPECT_EQ(map.u64, 5000000000ULL);
- EXPECT_EQ(map.u32, 4000000000);
+ EXPECT_EQ(map.u32, 4000000000U);
EXPECT_EQ(map.u16, 65000);
EXPECT_EQ(map.u8, 255);
EXPECT_EQ(map.b, false);
{
BuiltInTypes map;
map.str = "one two";
- map.u64 = 6000000000;
- map.u32 = 3000000000;
+ map.u64 = 6000000000ULL;
+ map.u32 = 3000000000U;
map.u16 = 50000;
map.u8 = 254;
map.b = true;
- map.s64 = -6000000000;
+ map.s64 = -6000000000LL;
map.s32 = -2000000000;
map.s16 = -32000;
map.s8 = -128;
map.d = -2.8625;
map.h8 = 254;
map.h16 = 50000;
- map.h32 = 3000000000;
+ map.h32 = 3000000000U;
map.h64 = 6000000000LL;
llvm::raw_string_ostream ostr(intermediate);
EXPECT_FALSE(yin.error());
EXPECT_TRUE(map.str.equals("one two"));
EXPECT_EQ(map.u64, 6000000000ULL);
- EXPECT_EQ(map.u32, 3000000000UL);
+ EXPECT_EQ(map.u32, 3000000000U);
EXPECT_EQ(map.u16, 50000);
EXPECT_EQ(map.u8, 254);
EXPECT_EQ(map.b, true);
EXPECT_EQ(map.d, -2.8625);
EXPECT_EQ(map.h8, Hex8(254));
EXPECT_EQ(map.h16, Hex16(50000));
- EXPECT_EQ(map.h32, Hex32(3000000000));
+ EXPECT_EQ(map.h32, Hex32(3000000000U));
EXPECT_EQ(map.h64, Hex64(6000000000LL));
}
}
map.numbers.push_back(1024);
llvm::raw_string_ostream ostr(intermediate);
- Output yout(ostr);
+ Output yout(ostr);
yout << map;
+
+ // Verify sequences were written in flow style
+ ostr.flush();
+ llvm::StringRef flowOut(intermediate);
+ EXPECT_NE(llvm::StringRef::npos, flowOut.find("one, two"));
+ EXPECT_NE(llvm::StringRef::npos, flowOut.find("10, -30, 1024"));
}
{
typedef std::vector<TotalSeconds> SecondsSequence;
-LLVM_YAML_IS_FLOW_SEQUENCE_VECTOR(TotalSeconds)
+LLVM_YAML_IS_SEQUENCE_VECTOR(TotalSeconds)
namespace llvm {
typedef std::vector<KindAndFlags> KindAndFlagsSequence;
-LLVM_YAML_IS_FLOW_SEQUENCE_VECTOR(KindAndFlags)
+LLVM_YAML_IS_SEQUENCE_VECTOR(KindAndFlags)
namespace llvm {
namespace yaml {
struct MappingTraits<KindAndFlags> {
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<AFlags>(kf.flags);
+ io.mapRequired("flags", aflags);
+ kf.flags = aflags;
+ } else {
+ BFlags bflags = static_cast<BFlags>(kf.flags);
+ io.mapRequired("flags", bflags);
+ kf.flags = bflags;
+ }
}
};
}
EXPECT_FALSE(yin.error());
EXPECT_EQ(seq.size(), 2UL);
EXPECT_EQ(seq[0].kind, kindA);
- EXPECT_EQ(seq[0].flags, a2);
+ EXPECT_EQ(seq[0].flags, (uint32_t)a2);
EXPECT_EQ(seq[1].kind, kindB);
- EXPECT_EQ(seq[1].flags, b1);
+ EXPECT_EQ(seq[1].flags, (uint32_t)b1);
}
//
EXPECT_FALSE(yin.error());
EXPECT_EQ(seq2.size(), 5UL);
EXPECT_EQ(seq2[0].kind, kindA);
- EXPECT_EQ(seq2[0].flags, a1);
+ EXPECT_EQ(seq2[0].flags, (uint32_t)a1);
EXPECT_EQ(seq2[1].kind, kindB);
- EXPECT_EQ(seq2[1].flags, b1);
+ EXPECT_EQ(seq2[1].flags, (uint32_t)b1);
EXPECT_EQ(seq2[2].kind, kindA);
- EXPECT_EQ(seq2[2].flags, a2);
+ EXPECT_EQ(seq2[2].flags, (uint32_t)a2);
EXPECT_EQ(seq2[3].kind, kindB);
- EXPECT_EQ(seq2[3].flags, b2);
+ EXPECT_EQ(seq2[3].flags, (uint32_t)b2);
EXPECT_EQ(seq2[4].kind, kindA);
- EXPECT_EQ(seq2[4].flags, a3);
+ EXPECT_EQ(seq2[4].flags, (uint32_t)a3);
}
}
EXPECT_TRUE(yin.error());
}
-