Union in vec in HIDL.

Not sure why this was disallowed in the first place.

Bug: 31973802
Test: hidl_test
Change-Id: I3170560fb9e72277874f7c5861dc0ce4dcf9e40a
diff --git a/VectorType.cpp b/VectorType.cpp
index fa9761e..03604dc 100644
--- a/VectorType.cpp
+++ b/VectorType.cpp
@@ -44,8 +44,7 @@
     if (elementType->isBitField()) {
         return true;
     }
-    if (elementType->isCompoundType() &&
-        static_cast<const CompoundType*>(elementType)->style() == CompoundType::STYLE_STRUCT) {
+    if (elementType->isCompoundType()) {
         return true;
     }
     if (elementType->isInterface()) {
diff --git a/test/hidl_test/hidl_test_client.cpp b/test/hidl_test/hidl_test_client.cpp
index a2dc4af..aa8859a 100644
--- a/test/hidl_test/hidl_test_client.cpp
+++ b/test/hidl_test/hidl_test_client.cpp
@@ -963,6 +963,23 @@
     }));
 }
 
+TEST_F(HidlTest, FooConvertToBoolIfSmallTest) {
+    hidl_vec<IFoo::Union> u = {
+        {.intValue = 7}, {.intValue = 0}, {.intValue = 1}, {.intValue = 8},
+    };
+    EXPECT_OK(foo->convertToBoolIfSmall(IFoo::Discriminator::INT, u, [&](const auto& res) {
+        ASSERT_EQ(4u, res.size());
+        EXPECT_EQ(IFoo::Discriminator::INT, res[0].discriminator);
+        EXPECT_EQ(u[0].intValue, res[0].value.intValue);
+        EXPECT_EQ(IFoo::Discriminator::BOOL, res[1].discriminator);
+        EXPECT_EQ(static_cast<bool>(u[1].intValue), res[1].value.boolValue);
+        EXPECT_EQ(IFoo::Discriminator::BOOL, res[2].discriminator);
+        EXPECT_EQ(static_cast<bool>(u[2].intValue), res[2].value.boolValue);
+        EXPECT_EQ(IFoo::Discriminator::INT, res[3].discriminator);
+        EXPECT_EQ(u[3].intValue, res[3].value.intValue);
+    }));
+}
+
 TEST_F(HidlTest, FooDoThisTest) {
     ALOGI("CLIENT call doThis.");
     EXPECT_OK(foo->doThis(1.0f));