[SystemZ] Add test missing from r186148
[oota-llvm.git] / unittests / Support / YAMLIOTest.cpp
index 5c9db01a06f200e4b13b9e21fdb2183087710058..0993d8c0b555e53c47ceaae5619aacade2caa5a7 100644 (file)
@@ -202,7 +202,7 @@ TEST(YAMLIO, TestReadBuiltInTypes) {
   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);
@@ -227,12 +227,12 @@ TEST(YAMLIO, TestReadWriteBuiltInTypes) {
   {
     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;
@@ -240,7 +240,7 @@ TEST(YAMLIO, TestReadWriteBuiltInTypes) {
     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);
@@ -256,7 +256,7 @@ TEST(YAMLIO, TestReadWriteBuiltInTypes) {
     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);
@@ -268,7 +268,7 @@ TEST(YAMLIO, TestReadWriteBuiltInTypes) {
     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));
   }
 }
@@ -600,8 +600,14 @@ TEST(YAMLIO, TestReadWriteMyFlowSequence) {
     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"));
   }
 
   {
@@ -632,7 +638,7 @@ LLVM_YAML_STRONG_TYPEDEF(uint32_t, TotalSeconds)
 
 typedef std::vector<TotalSeconds> SecondsSequence;
 
-LLVM_YAML_IS_FLOW_SEQUENCE_VECTOR(TotalSeconds)
+LLVM_YAML_IS_SEQUENCE_VECTOR(TotalSeconds)
 
 
 namespace llvm {
@@ -745,7 +751,7 @@ struct KindAndFlags {
 
 typedef std::vector<KindAndFlags> KindAndFlagsSequence;
 
-LLVM_YAML_IS_FLOW_SEQUENCE_VECTOR(KindAndFlags)
+LLVM_YAML_IS_SEQUENCE_VECTOR(KindAndFlags)
 
 namespace llvm {
 namespace yaml {
@@ -776,11 +782,17 @@ 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;
+      }
     }
   };
 }
@@ -798,9 +810,9 @@ TEST(YAMLIO, TestReadKindAndFlagsSequence) {
   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);
 }
 
 //
@@ -828,15 +840,15 @@ TEST(YAMLIO, TestReadWriteKindAndFlagsSequence) {
     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);
   }
 }
 
@@ -1285,4 +1297,3 @@ TEST(YAMLIO, TestReadBuiltInTypesHex64Error) {
   EXPECT_TRUE(yin.error());
 }
 
-