@@ -1197,58 +1197,57 @@ TEST_F(TypeTest, TestTypeRelations) {
11971197 Type i32 = Type::i32 ;
11981198 Type unreachable = Type::unreachable;
11991199
1200- #define assertLUB (a, b, lub, glb ) \
1201- { \
1202- auto lub1 = Type::getLeastUpperBound (a, b); \
1203- auto lub2 = Type::getLeastUpperBound (b, a); \
1204- EXPECT_EQ (lub, lub1); \
1205- EXPECT_EQ (lub1, lub2); \
1206- if (lub != Type::none) { \
1207- EXPECT_TRUE (Type::isSubType (a, lub)); \
1208- EXPECT_TRUE (Type::isSubType (b, lub)); \
1209- } \
1210- auto glb1 = Type::getGreatestLowerBound (a, b); \
1211- auto glb2 = Type::getGreatestLowerBound (b, a); \
1212- EXPECT_EQ (glb, glb1); \
1213- EXPECT_EQ (glb, glb2); \
1214- EXPECT_TRUE (Type::isSubType (glb, a)); \
1215- EXPECT_TRUE (Type::isSubType (glb, b)); \
1216- if (a == b) { \
1217- EXPECT_TRUE (Type::isSubType (a, b)); \
1218- EXPECT_TRUE (Type::isSubType (b, a)); \
1219- EXPECT_EQ (lub, a); \
1220- EXPECT_EQ (glb, a); \
1221- } else if (lub == b) { \
1222- EXPECT_TRUE (Type::isSubType (a, b)); \
1223- EXPECT_FALSE (Type::isSubType (b, a)); \
1224- EXPECT_EQ (glb, a); \
1225- } else if (lub == a) { \
1226- EXPECT_FALSE (Type::isSubType (a, b)); \
1227- EXPECT_TRUE (Type::isSubType (b, a)); \
1228- EXPECT_EQ (glb, b); \
1229- } else if (lub != Type::none) { \
1230- EXPECT_FALSE (Type::isSubType (a, b)); \
1231- EXPECT_FALSE (Type::isSubType (b, a)); \
1232- EXPECT_NE (glb, a); \
1233- EXPECT_NE (glb, b); \
1234- } else { \
1235- EXPECT_FALSE (Type::isSubType (a, b)); \
1236- EXPECT_FALSE (Type::isSubType (b, a)); \
1237- } \
1238- \
1239- if (a.isRef () && b.isRef ()) { \
1240- auto htA = a.getHeapType (); \
1241- auto htB = b.getHeapType (); \
1242- \
1243- if (lub == Type::none) { \
1244- EXPECT_NE (htA.getTop (), htB.getTop ()); \
1245- EXPECT_NE (htA.getBottom (), htB.getBottom ()); \
1246- } else { \
1247- EXPECT_EQ (htA.getTop (), htB.getTop ()); \
1248- EXPECT_EQ (htA.getBottom (), htB.getBottom ()); \
1249- } \
1250- } \
1251- }
1200+ auto assertLUB = [](Type a, Type b, Type lub, Type glb) {
1201+ auto lub1 = Type::getLeastUpperBound (a, b);
1202+ auto lub2 = Type::getLeastUpperBound (b, a);
1203+ EXPECT_EQ (lub, lub1);
1204+ EXPECT_EQ (lub1, lub2);
1205+ if (lub != Type::none) {
1206+ EXPECT_TRUE (Type::isSubType (a, lub));
1207+ EXPECT_TRUE (Type::isSubType (b, lub));
1208+ }
1209+ auto glb1 = Type::getGreatestLowerBound (a, b);
1210+ auto glb2 = Type::getGreatestLowerBound (b, a);
1211+ EXPECT_EQ (glb, glb1);
1212+ EXPECT_EQ (glb, glb2);
1213+ EXPECT_TRUE (Type::isSubType (glb, a));
1214+ EXPECT_TRUE (Type::isSubType (glb, b));
1215+ if (a == b) {
1216+ EXPECT_TRUE (Type::isSubType (a, b));
1217+ EXPECT_TRUE (Type::isSubType (b, a));
1218+ EXPECT_EQ (lub, a);
1219+ EXPECT_EQ (glb, a);
1220+ } else if (lub == b) {
1221+ EXPECT_TRUE (Type::isSubType (a, b));
1222+ EXPECT_FALSE (Type::isSubType (b, a));
1223+ EXPECT_EQ (glb, a);
1224+ } else if (lub == a) {
1225+ EXPECT_FALSE (Type::isSubType (a, b));
1226+ EXPECT_TRUE (Type::isSubType (b, a));
1227+ EXPECT_EQ (glb, b);
1228+ } else if (lub != Type::none) {
1229+ EXPECT_FALSE (Type::isSubType (a, b));
1230+ EXPECT_FALSE (Type::isSubType (b, a));
1231+ EXPECT_NE (glb, a);
1232+ EXPECT_NE (glb, b);
1233+ } else {
1234+ EXPECT_FALSE (Type::isSubType (a, b));
1235+ EXPECT_FALSE (Type::isSubType (b, a));
1236+ }
1237+
1238+ if (a.isRef () && b.isRef ()) {
1239+ auto htA = a.getHeapType ();
1240+ auto htB = b.getHeapType ();
1241+
1242+ if (lub == Type::none) {
1243+ EXPECT_NE (htA.getTop (), htB.getTop ());
1244+ EXPECT_NE (htA.getBottom (), htB.getBottom ());
1245+ } else {
1246+ EXPECT_EQ (htA.getTop (), htB.getTop ());
1247+ EXPECT_EQ (htA.getBottom (), htB.getBottom ());
1248+ }
1249+ }
1250+ };
12521251
12531252 assertLUB (any, any, any, any);
12541253 assertLUB (any, nullAny, nullAny, any);
0 commit comments