diff --git a/aidl_language.h b/aidl_language.h
index 15ce4bb..f3c5829 100644
--- a/aidl_language.h
+++ b/aidl_language.h
@@ -999,6 +999,10 @@
     return constants_;
   }
   const std::vector<std::unique_ptr<AidlMethod>>& GetMethods() const { return methods_; }
+  void AddMethod(std::unique_ptr<AidlMethod> method) {
+    members_.push_back(method.get());
+    methods_.push_back(std::move(method));
+  }
   const std::vector<const AidlMember*>& GetMembers() const { return members_; }
   void TraverseChildren(std::function<void(const AidlNode&)> traverse) const override {
     AidlAnnotatable::TraverseChildren(traverse);
@@ -1007,17 +1011,6 @@
     }
   }
 
-  // Modifiers
-  void AddMethod(std::unique_ptr<AidlMethod> method) {
-    members_.push_back(method.get());
-    methods_.push_back(std::move(method));
-  }
-  void AddType(std::unique_ptr<AidlDefinedType> type) {
-    type->SetEnclosingScope(this);
-    members_.push_back(type.get());
-    types_.push_back(std::move(type));
-  }
-
  protected:
   // utility for subclasses with getter names
   bool CheckValidForGetterNames() const;
diff --git a/aidl_to_cpp_common.cpp b/aidl_to_cpp_common.cpp
index 030b13e..b8e38ea 100644
--- a/aidl_to_cpp_common.cpp
+++ b/aidl_to_cpp_common.cpp
@@ -481,7 +481,7 @@
     const auto& default_value = name_of(first_field->GetType(), typenames) + "(" +
                                 first_field->ValueString(decorator) + ")";
 
-    out << "Tag _tag = " << default_name << ";\n";
+    out << "Tag _tag __attribute__((aligned (1))) = " << default_name << ";\n";
     out << "union _value_t {\n";
     out.Indent();
     out << "_value_t() {}\n";
@@ -512,12 +512,23 @@
 }
 
 void UnionWriter::PublicFields(CodeWriter& out) const {
-  out << "// Expose tag symbols for legacy code\n";
-  for (const auto& f : decl.GetFields()) {
-    out << "static const inline Tag";
-    GenerateDeprecated(out, *f);
-    out << " " << f->GetName() << " = Tag::" << f->GetName() << ";\n";
+  std::string tag_type = "int32_t";
+  if (decl.IsFixedSize()) {
+    // For @FixedSize union, we use a smaller type for a tag to minimize the size overhead.
+    AIDL_FATAL_IF(decl.GetFields().size() > std::numeric_limits<uint8_t>::max(), decl)
+        << "Too many fields for @FixedSize";
+    tag_type = "uint8_t";
   }
+  out << "enum Tag : " << tag_type << " {\n";
+  bool is_first = true;
+  for (const auto& f : decl.GetFields()) {
+    out << "  " << f->GetName();
+    GenerateDeprecated(out, *f);
+    if (is_first) out << " = 0";
+    out << ",  // " << f->Signature() << ";\n";
+    is_first = false;
+  }
+  out << "};\n";
 
   const auto& name = decl.GetName();
 
diff --git a/parser.cpp b/parser.cpp
index edb110b..9988f56 100644
--- a/parser.cpp
+++ b/parser.cpp
@@ -28,29 +28,6 @@
 YY_BUFFER_STATE yy_scan_buffer(char*, size_t, void*);
 void yy_delete_buffer(YY_BUFFER_STATE, void*);
 
-// For each union, generate nested "Tag" enum type so that "Tag" can be used as a valid type.
-//    union Foo { int a; int b; } => union Foo { ... enum Tag { a, b }}
-struct UnionTagGenerater : AidlVisitor {
-  void Visit(const AidlUnionDecl& decl) override {
-    std::vector<std::unique_ptr<AidlEnumerator>> enumerators;
-    for (const auto& field : decl.GetFields()) {
-      enumerators.push_back(std::make_unique<AidlEnumerator>(AIDL_LOCATION_HERE, field->GetName(),
-                                                             nullptr, field->GetComments()));
-    }
-    auto tag_enum = std::make_unique<AidlEnumDeclaration>(AIDL_LOCATION_HERE, "Tag", &enumerators,
-                                                          decl.GetPackage(), Comments{});
-    // Tag for @FixedSize union is limited to "byte" type so that it can be passed via FMQ with
-    // with lower overhead.
-    std::shared_ptr<AidlConstantValue> backing_type{
-        AidlConstantValue::String(AIDL_LOCATION_HERE, decl.IsFixedSize() ? "\"byte\"" : "\"int\"")};
-    std::vector<std::unique_ptr<AidlAnnotation>> annotations;
-    annotations.push_back(
-        AidlAnnotation::Parse(AIDL_LOCATION_HERE, "Backing", {{"type", backing_type}}, Comments{}));
-    tag_enum->Annotate(std::move(annotations));
-    const_cast<AidlUnionDecl&>(decl).AddType(std::move(tag_enum));
-  }
-};
-
 const AidlDocument* Parser::Parse(const std::string& filename,
                                   const android::aidl::IoDelegate& io_delegate,
                                   AidlTypenames& typenames, bool is_preprocessed) {
@@ -78,10 +55,6 @@
     return nullptr;
   }
 
-  // Preprocess parsed document before adding to typenames.
-  UnionTagGenerater v;
-  VisitTopDown(v, *parser.document_);
-
   // transfer ownership to AidlTypenames and return the raw pointer
   const AidlDocument* result = parser.document_.get();
   if (!typenames.AddDocument(std::move(parser.document_))) {
diff --git a/tests/aidl_test_client_ndk_parcelables.cpp b/tests/aidl_test_client_ndk_parcelables.cpp
index 8b9cd19..72d309d 100644
--- a/tests/aidl_test_client_ndk_parcelables.cpp
+++ b/tests/aidl_test_client_ndk_parcelables.cpp
@@ -25,7 +25,6 @@
 #include <aidl/android/aidl/fixedsizearray/FixedSizeArrayExample.h>
 #include <aidl/android/aidl/tests/ITestService.h>
 #include <aidl/android/aidl/tests/RecursiveList.h>
-#include <aidl/android/aidl/tests/Union.h>
 
 using aidl::android::aidl::fixedsizearray::FixedSizeArrayExample;
 using BnRepeatFixedSizeArray =
@@ -40,7 +39,6 @@
 using aidl::android::aidl::tests::BackendType;
 using aidl::android::aidl::tests::ITestService;
 using aidl::android::aidl::tests::RecursiveList;
-using aidl::android::aidl::tests::Union;
 using android::OK;
 using ndk::AParcel_readData;
 using ndk::AParcel_writeData;
@@ -81,21 +79,6 @@
   EXPECT_EQ(nullptr, cur);
 }
 
-TEST_F(AidlTest, GetUnionTags) {
-  std::vector<Union> unions;
-  std::vector<Union::Tag> tags;
-  // test empty
-  auto status = getService<ITestService>()->GetUnionTags(unions, &tags);
-  ASSERT_TRUE(status.isOk());
-  EXPECT_EQ(tags, (std::vector<Union::Tag>{}));
-  // test non-empty
-  unions.push_back(Union::make<Union::n>());
-  unions.push_back(Union::make<Union::ns>());
-  status = getService<ITestService>()->GetUnionTags(unions, &tags);
-  ASSERT_TRUE(status.isOk());
-  EXPECT_EQ(tags, (std::vector<Union::Tag>{Union::n, Union::ns}));
-}
-
 TEST_F(AidlTest, FixedSizeArray) {
   auto parcel = AParcel_create();
 
diff --git a/tests/aidl_test_client_parcelables.cpp b/tests/aidl_test_client_parcelables.cpp
index 119f513..8d4adee 100644
--- a/tests/aidl_test_client_parcelables.cpp
+++ b/tests/aidl_test_client_parcelables.cpp
@@ -575,21 +575,6 @@
   EXPECT_EQ(nullptr, cur);
 }
 
-TEST_F(AidlTest, GetUnionTags) {
-  std::vector<Union> unions;
-  std::vector<Union::Tag> tags;
-  // test empty
-  auto status = service->GetUnionTags(unions, &tags);
-  ASSERT_TRUE(status.isOk()) << status.toString8();
-  EXPECT_EQ(tags, (std::vector<Union::Tag>{}));
-  // test non-empty
-  unions.push_back(Union::make<Union::n>());
-  unions.push_back(Union::make<Union::ns>());
-  status = service->GetUnionTags(unions, &tags);
-  ASSERT_TRUE(status.isOk()) << status.toString8();
-  EXPECT_EQ(tags, (std::vector<Union::Tag>{Union::n, Union::ns}));
-}
-
 TEST_F(AidlTest, FixedSizeArray) {
   android::Parcel parcel;
 
diff --git a/tests/aidl_test_service.cpp b/tests/aidl_test_service.cpp
index a13547f..f000372 100644
--- a/tests/aidl_test_service.cpp
+++ b/tests/aidl_test_service.cpp
@@ -742,15 +742,6 @@
     return Status::ok();
   }
 
-  Status GetUnionTags(const std::vector<Union>& input,
-                      std::vector<Union::Tag>* _aidl_return) override {
-    std::vector<Union::Tag> tags;
-    std::transform(input.begin(), input.end(), std::back_inserter(tags),
-                   std::mem_fn(&Union::getTag));
-    *_aidl_return = std::move(tags);
-    return Status::ok();
-  }
-
   Status GetCppJavaTests(sp<IBinder>* ret) {
     *ret = new CppJavaTests;
     return Status::ok();
diff --git a/tests/android/aidl/tests/ITestService.aidl b/tests/android/aidl/tests/ITestService.aidl
index 63c0c6c..f8e168a 100644
--- a/tests/android/aidl/tests/ITestService.aidl
+++ b/tests/android/aidl/tests/ITestService.aidl
@@ -25,7 +25,6 @@
 import android.aidl.tests.LongEnum;
 import android.aidl.tests.RecursiveList;
 import android.aidl.tests.StructuredParcelable;
-import android.aidl.tests.Union;
 import android.aidl.tests.extension.ExtendableParcelable;
 
 /**
@@ -260,8 +259,6 @@
     IOldName GetOldNameInterface();
     INewName GetNewNameInterface();
 
-    Union.Tag[] GetUnionTags(in Union[] input);
-
     // Retrieve the ICppJavaTests if the server supports it
     @nullable IBinder GetCppJavaTests();
 
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/ITestService.cpp b/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/ITestService.cpp
index b7e11ae..40264c0 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/ITestService.cpp
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/ITestService.cpp
@@ -2527,44 +2527,6 @@
   return _aidl_status;
 }
 
-::android::binder::Status BpTestService::GetUnionTags(const ::std::vector<::android::aidl::tests::Union>& input, ::std::vector<::android::aidl::tests::Union::Tag>* _aidl_return) {
-  ::android::Parcel _aidl_data;
-  _aidl_data.markSensitive();
-  _aidl_data.markForBinder(remoteStrong());
-  ::android::Parcel _aidl_reply;
-  ::android::status_t _aidl_ret_status = ::android::OK;
-  ::android::binder::Status _aidl_status;
-  _aidl_ret_status = _aidl_data.writeInterfaceToken(getInterfaceDescriptor());
-  if (((_aidl_ret_status) != (::android::OK))) {
-    goto _aidl_error;
-  }
-  _aidl_ret_status = _aidl_data.writeParcelableVector(input);
-  if (((_aidl_ret_status) != (::android::OK))) {
-    goto _aidl_error;
-  }
-  _aidl_ret_status = remote()->transact(BnTestService::TRANSACTION_GetUnionTags, _aidl_data, &_aidl_reply, ::android::IBinder::FLAG_CLEAR_BUF);
-  if (UNLIKELY(_aidl_ret_status == ::android::UNKNOWN_TRANSACTION && ITestService::getDefaultImpl())) {
-     return ITestService::getDefaultImpl()->GetUnionTags(input, _aidl_return);
-  }
-  if (((_aidl_ret_status) != (::android::OK))) {
-    goto _aidl_error;
-  }
-  _aidl_ret_status = _aidl_status.readFromParcel(_aidl_reply);
-  if (((_aidl_ret_status) != (::android::OK))) {
-    goto _aidl_error;
-  }
-  if (!_aidl_status.isOk()) {
-    return _aidl_status;
-  }
-  _aidl_ret_status = _aidl_reply.readEnumVector(_aidl_return);
-  if (((_aidl_ret_status) != (::android::OK))) {
-    goto _aidl_error;
-  }
-  _aidl_error:
-  _aidl_status.setFromStatusT(_aidl_ret_status);
-  return _aidl_status;
-}
-
 ::android::binder::Status BpTestService::GetCppJavaTests(::android::sp<::android::IBinder>* _aidl_return) {
   ::android::Parcel _aidl_data;
   _aidl_data.markSensitive();
@@ -4640,36 +4602,6 @@
     }
   }
   break;
-  case BnTestService::TRANSACTION_GetUnionTags:
-  {
-    ::std::vector<::android::aidl::tests::Union> in_input;
-    ::std::vector<::android::aidl::tests::Union::Tag> _aidl_return;
-    if (!(_aidl_data.checkInterface(this))) {
-      _aidl_ret_status = ::android::BAD_TYPE;
-      break;
-    }
-    _aidl_ret_status = _aidl_data.readParcelableVector(&in_input);
-    if (((_aidl_ret_status) != (::android::OK))) {
-      break;
-    }
-    if (auto st = _aidl_data.enforceNoDataAvail(); !st.isOk()) {
-      _aidl_ret_status = st.writeToParcel(_aidl_reply);
-      break;
-    }
-    ::android::binder::Status _aidl_status(GetUnionTags(in_input, &_aidl_return));
-    _aidl_ret_status = _aidl_status.writeToParcel(_aidl_reply);
-    if (((_aidl_ret_status) != (::android::OK))) {
-      break;
-    }
-    if (!_aidl_status.isOk()) {
-      break;
-    }
-    _aidl_ret_status = _aidl_reply->writeEnumVector(_aidl_return);
-    if (((_aidl_ret_status) != (::android::OK))) {
-      break;
-    }
-  }
-  break;
   case BnTestService::TRANSACTION_GetCppJavaTests:
   {
     ::android::sp<::android::IBinder> _aidl_return;
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/ITestService.cpp.d b/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/ITestService.cpp.d
index de66202..f82081e 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/ITestService.cpp.d
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/android/aidl/tests/ITestService.cpp.d
@@ -9,6 +9,6 @@
   system/tools/aidl/tests/android/aidl/tests/LongEnum.aidl \
   system/tools/aidl/tests/android/aidl/tests/RecursiveList.aidl \
   system/tools/aidl/tests/android/aidl/tests/StructuredParcelable.aidl \
-  system/tools/aidl/tests/android/aidl/tests/Union.aidl \
   system/tools/aidl/tests/android/aidl/tests/extension/ExtendableParcelable.aidl \
-  system/tools/aidl/tests/android/aidl/tests/ConstantExpressionEnum.aidl
+  system/tools/aidl/tests/android/aidl/tests/ConstantExpressionEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/Union.aidl
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/ArrayOfInterfaces.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/ArrayOfInterfaces.h
index b5c0a6c..0265063 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/ArrayOfInterfaces.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/ArrayOfInterfaces.h
@@ -2,16 +2,12 @@
 
 #include <android/aidl/tests/ArrayOfInterfaces.h>
 #include <android/binder_to_string.h>
-#include <array>
-#include <binder/Enums.h>
 #include <binder/IBinder.h>
 #include <binder/IInterface.h>
 #include <binder/Parcel.h>
 #include <binder/Status.h>
 #include <cassert>
-#include <cstdint>
 #include <optional>
-#include <string>
 #include <tuple>
 #include <type_traits>
 #include <utility>
@@ -140,17 +136,12 @@
   };  // class MyParcelable
   class MyUnion : public ::android::Parcelable {
   public:
-    enum class Tag : int32_t {
-      iface = 0,
-      nullable_iface = 1,
-      iface_array = 2,
-      nullable_iface_array = 3,
+    enum Tag : int32_t {
+      iface = 0,  // android.aidl.tests.ArrayOfInterfaces.IEmptyInterface iface;
+      nullable_iface,  // android.aidl.tests.ArrayOfInterfaces.IEmptyInterface nullable_iface;
+      iface_array,  // android.aidl.tests.ArrayOfInterfaces.IEmptyInterface[] iface_array;
+      nullable_iface_array,  // android.aidl.tests.ArrayOfInterfaces.IEmptyInterface[] nullable_iface_array;
     };
-    // Expose tag symbols for legacy code
-    static const inline Tag iface = Tag::iface;
-    static const inline Tag nullable_iface = Tag::nullable_iface;
-    static const inline Tag iface_array = Tag::iface_array;
-    static const inline Tag nullable_iface_array = Tag::nullable_iface_array;
 
     template<typename _Tp>
     static constexpr bool _not_self = !std::is_same_v<std::remove_cv_t<std::remove_reference_t<_Tp>>, MyUnion>;
@@ -272,37 +263,3 @@
 }  // namespace tests
 }  // namespace aidl
 }  // namespace android
-namespace android {
-namespace aidl {
-namespace tests {
-[[nodiscard]] static inline std::string toString(ArrayOfInterfaces::MyUnion::Tag val) {
-  switch(val) {
-  case ArrayOfInterfaces::MyUnion::Tag::iface:
-    return "iface";
-  case ArrayOfInterfaces::MyUnion::Tag::nullable_iface:
-    return "nullable_iface";
-  case ArrayOfInterfaces::MyUnion::Tag::iface_array:
-    return "iface_array";
-  case ArrayOfInterfaces::MyUnion::Tag::nullable_iface_array:
-    return "nullable_iface_array";
-  default:
-    return std::to_string(static_cast<int32_t>(val));
-  }
-}
-}  // namespace tests
-}  // namespace aidl
-}  // namespace android
-namespace android {
-namespace internal {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wc++17-extensions"
-template <>
-constexpr inline std::array<::android::aidl::tests::ArrayOfInterfaces::MyUnion::Tag, 4> enum_values<::android::aidl::tests::ArrayOfInterfaces::MyUnion::Tag> = {
-  ::android::aidl::tests::ArrayOfInterfaces::MyUnion::Tag::iface,
-  ::android::aidl::tests::ArrayOfInterfaces::MyUnion::Tag::nullable_iface,
-  ::android::aidl::tests::ArrayOfInterfaces::MyUnion::Tag::iface_array,
-  ::android::aidl::tests::ArrayOfInterfaces::MyUnion::Tag::nullable_iface_array,
-};
-#pragma clang diagnostic pop
-}  // namespace internal
-}  // namespace android
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BnTestService.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BnTestService.h
index 3cb8ad0..2d2a864 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BnTestService.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BnTestService.h
@@ -71,9 +71,8 @@
   static constexpr uint32_t TRANSACTION_ReverseNullableIBinderArray = ::android::IBinder::FIRST_CALL_TRANSACTION + 60;
   static constexpr uint32_t TRANSACTION_GetOldNameInterface = ::android::IBinder::FIRST_CALL_TRANSACTION + 61;
   static constexpr uint32_t TRANSACTION_GetNewNameInterface = ::android::IBinder::FIRST_CALL_TRANSACTION + 62;
-  static constexpr uint32_t TRANSACTION_GetUnionTags = ::android::IBinder::FIRST_CALL_TRANSACTION + 63;
-  static constexpr uint32_t TRANSACTION_GetCppJavaTests = ::android::IBinder::FIRST_CALL_TRANSACTION + 64;
-  static constexpr uint32_t TRANSACTION_getBackendType = ::android::IBinder::FIRST_CALL_TRANSACTION + 65;
+  static constexpr uint32_t TRANSACTION_GetCppJavaTests = ::android::IBinder::FIRST_CALL_TRANSACTION + 63;
+  static constexpr uint32_t TRANSACTION_getBackendType = ::android::IBinder::FIRST_CALL_TRANSACTION + 64;
   explicit BnTestService();
   ::android::status_t onTransact(uint32_t _aidl_code, const ::android::Parcel& _aidl_data, ::android::Parcel* _aidl_reply, uint32_t _aidl_flags) override;
 };  // class BnTestService
@@ -271,9 +270,6 @@
   ::android::binder::Status GetNewNameInterface(::android::sp<::android::aidl::tests::INewName>* _aidl_return) override {
     return _aidl_delegate->GetNewNameInterface(_aidl_return);
   }
-  ::android::binder::Status GetUnionTags(const ::std::vector<::android::aidl::tests::Union>& input, ::std::vector<::android::aidl::tests::Union::Tag>* _aidl_return) override {
-    return _aidl_delegate->GetUnionTags(input, _aidl_return);
-  }
   ::android::binder::Status GetCppJavaTests(::android::sp<::android::IBinder>* _aidl_return) override {
     return _aidl_delegate->GetCppJavaTests(_aidl_return);
   }
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BpTestService.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BpTestService.h
index 3829d9b..c1cbaa8 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BpTestService.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/BpTestService.h
@@ -75,7 +75,6 @@
   ::android::binder::Status ReverseNullableIBinderArray(const ::std::optional<::std::vector<::android::sp<::android::IBinder>>>& input, ::std::optional<::std::vector<::android::sp<::android::IBinder>>>* repeated, ::std::optional<::std::vector<::android::sp<::android::IBinder>>>* _aidl_return) override;
   ::android::binder::Status GetOldNameInterface(::android::sp<::android::aidl::tests::IOldName>* _aidl_return) override;
   ::android::binder::Status GetNewNameInterface(::android::sp<::android::aidl::tests::INewName>* _aidl_return) override;
-  ::android::binder::Status GetUnionTags(const ::std::vector<::android::aidl::tests::Union>& input, ::std::vector<::android::aidl::tests::Union::Tag>* _aidl_return) override;
   ::android::binder::Status GetCppJavaTests(::android::sp<::android::IBinder>* _aidl_return) override;
   ::android::binder::Status getBackendType(::android::aidl::tests::BackendType* _aidl_return) override;
 };  // class BpTestService
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/FixedSize.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/FixedSize.h
index 65f6711..f94a3b8 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/FixedSize.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/FixedSize.h
@@ -3,13 +3,10 @@
 #include <android/aidl/tests/FixedSize.h>
 #include <android/aidl/tests/LongEnum.h>
 #include <android/binder_to_string.h>
-#include <array>
-#include <binder/Enums.h>
 #include <binder/Parcel.h>
 #include <binder/Status.h>
 #include <cassert>
 #include <cstdint>
-#include <string>
 #include <tuple>
 #include <type_traits>
 #include <utility>
@@ -27,25 +24,16 @@
 public:
   class FixedUnion : public ::android::Parcelable {
   public:
-    enum class Tag : int8_t {
-      booleanValue = 0,
-      byteValue = 1,
-      charValue = 2,
-      intValue = 3,
-      longValue = 4,
-      floatValue = 5,
-      doubleValue = 6,
-      enumValue = 7,
+    enum Tag : uint8_t {
+      booleanValue = 0,  // boolean booleanValue;
+      byteValue,  // byte byteValue;
+      charValue,  // char charValue;
+      intValue,  // int intValue;
+      longValue,  // long longValue;
+      floatValue,  // float floatValue;
+      doubleValue,  // double doubleValue;
+      enumValue,  // android.aidl.tests.LongEnum enumValue;
     };
-    // Expose tag symbols for legacy code
-    static const inline Tag booleanValue = Tag::booleanValue;
-    static const inline Tag byteValue = Tag::byteValue;
-    static const inline Tag charValue = Tag::charValue;
-    static const inline Tag intValue = Tag::intValue;
-    static const inline Tag longValue = Tag::longValue;
-    static const inline Tag floatValue = Tag::floatValue;
-    static const inline Tag doubleValue = Tag::doubleValue;
-    static const inline Tag enumValue = Tag::enumValue;
 
     template <Tag _Tag>
     using _at = typename std::tuple_element<static_cast<size_t>(_Tag), std::tuple<bool, int8_t, char16_t, int32_t, int64_t, float, double, ::android::aidl::tests::LongEnum>>::type;
@@ -131,7 +119,7 @@
       return os.str();
     }
   private:
-    Tag _tag = booleanValue;
+    Tag _tag __attribute__((aligned (1))) = booleanValue;
     union _value_t {
       _value_t() {}
       ~_value_t() {}
@@ -232,49 +220,3 @@
 }  // namespace tests
 }  // namespace aidl
 }  // namespace android
-namespace android {
-namespace aidl {
-namespace tests {
-[[nodiscard]] static inline std::string toString(FixedSize::FixedUnion::Tag val) {
-  switch(val) {
-  case FixedSize::FixedUnion::Tag::booleanValue:
-    return "booleanValue";
-  case FixedSize::FixedUnion::Tag::byteValue:
-    return "byteValue";
-  case FixedSize::FixedUnion::Tag::charValue:
-    return "charValue";
-  case FixedSize::FixedUnion::Tag::intValue:
-    return "intValue";
-  case FixedSize::FixedUnion::Tag::longValue:
-    return "longValue";
-  case FixedSize::FixedUnion::Tag::floatValue:
-    return "floatValue";
-  case FixedSize::FixedUnion::Tag::doubleValue:
-    return "doubleValue";
-  case FixedSize::FixedUnion::Tag::enumValue:
-    return "enumValue";
-  default:
-    return std::to_string(static_cast<int8_t>(val));
-  }
-}
-}  // namespace tests
-}  // namespace aidl
-}  // namespace android
-namespace android {
-namespace internal {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wc++17-extensions"
-template <>
-constexpr inline std::array<::android::aidl::tests::FixedSize::FixedUnion::Tag, 8> enum_values<::android::aidl::tests::FixedSize::FixedUnion::Tag> = {
-  ::android::aidl::tests::FixedSize::FixedUnion::Tag::booleanValue,
-  ::android::aidl::tests::FixedSize::FixedUnion::Tag::byteValue,
-  ::android::aidl::tests::FixedSize::FixedUnion::Tag::charValue,
-  ::android::aidl::tests::FixedSize::FixedUnion::Tag::intValue,
-  ::android::aidl::tests::FixedSize::FixedUnion::Tag::longValue,
-  ::android::aidl::tests::FixedSize::FixedUnion::Tag::floatValue,
-  ::android::aidl::tests::FixedSize::FixedUnion::Tag::doubleValue,
-  ::android::aidl::tests::FixedSize::FixedUnion::Tag::enumValue,
-};
-#pragma clang diagnostic pop
-}  // namespace internal
-}  // namespace android
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/ITestService.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/ITestService.h
index 9246a87..dd0e7f1 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/ITestService.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/ITestService.h
@@ -10,7 +10,6 @@
 #include <android/aidl/tests/LongEnum.h>
 #include <android/aidl/tests/RecursiveList.h>
 #include <android/aidl/tests/StructuredParcelable.h>
-#include <android/aidl/tests/Union.h>
 #include <android/aidl/tests/extension/ExtendableParcelable.h>
 #include <android/binder_to_string.h>
 #include <binder/IBinder.h>
@@ -273,7 +272,6 @@
   virtual ::android::binder::Status ReverseNullableIBinderArray(const ::std::optional<::std::vector<::android::sp<::android::IBinder>>>& input, ::std::optional<::std::vector<::android::sp<::android::IBinder>>>* repeated, ::std::optional<::std::vector<::android::sp<::android::IBinder>>>* _aidl_return) = 0;
   virtual ::android::binder::Status GetOldNameInterface(::android::sp<::android::aidl::tests::IOldName>* _aidl_return) = 0;
   virtual ::android::binder::Status GetNewNameInterface(::android::sp<::android::aidl::tests::INewName>* _aidl_return) = 0;
-  virtual ::android::binder::Status GetUnionTags(const ::std::vector<::android::aidl::tests::Union>& input, ::std::vector<::android::aidl::tests::Union::Tag>* _aidl_return) = 0;
   virtual ::android::binder::Status GetCppJavaTests(::android::sp<::android::IBinder>* _aidl_return) = 0;
   virtual ::android::binder::Status getBackendType(::android::aidl::tests::BackendType* _aidl_return) = 0;
 };  // class ITestService
@@ -472,9 +470,6 @@
   ::android::binder::Status GetNewNameInterface(::android::sp<::android::aidl::tests::INewName>* /*_aidl_return*/) override {
     return ::android::binder::Status::fromStatusT(::android::UNKNOWN_TRANSACTION);
   }
-  ::android::binder::Status GetUnionTags(const ::std::vector<::android::aidl::tests::Union>& /*input*/, ::std::vector<::android::aidl::tests::Union::Tag>* /*_aidl_return*/) override {
-    return ::android::binder::Status::fromStatusT(::android::UNKNOWN_TRANSACTION);
-  }
   ::android::binder::Status GetCppJavaTests(::android::sp<::android::IBinder>* /*_aidl_return*/) override {
     return ::android::binder::Status::fromStatusT(::android::UNKNOWN_TRANSACTION);
   }
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/ListOfInterfaces.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/ListOfInterfaces.h
index 455bf4b..e9dcb2b 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/ListOfInterfaces.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/ListOfInterfaces.h
@@ -2,16 +2,12 @@
 
 #include <android/aidl/tests/ListOfInterfaces.h>
 #include <android/binder_to_string.h>
-#include <array>
-#include <binder/Enums.h>
 #include <binder/IBinder.h>
 #include <binder/IInterface.h>
 #include <binder/Parcel.h>
 #include <binder/Status.h>
 #include <cassert>
-#include <cstdint>
 #include <optional>
-#include <string>
 #include <tuple>
 #include <type_traits>
 #include <utility>
@@ -140,17 +136,12 @@
   };  // class MyParcelable
   class MyUnion : public ::android::Parcelable {
   public:
-    enum class Tag : int32_t {
-      iface = 0,
-      nullable_iface = 1,
-      iface_list = 2,
-      nullable_iface_list = 3,
+    enum Tag : int32_t {
+      iface = 0,  // android.aidl.tests.ListOfInterfaces.IEmptyInterface iface;
+      nullable_iface,  // android.aidl.tests.ListOfInterfaces.IEmptyInterface nullable_iface;
+      iface_list,  // List<android.aidl.tests.ListOfInterfaces.IEmptyInterface> iface_list;
+      nullable_iface_list,  // List<android.aidl.tests.ListOfInterfaces.IEmptyInterface> nullable_iface_list;
     };
-    // Expose tag symbols for legacy code
-    static const inline Tag iface = Tag::iface;
-    static const inline Tag nullable_iface = Tag::nullable_iface;
-    static const inline Tag iface_list = Tag::iface_list;
-    static const inline Tag nullable_iface_list = Tag::nullable_iface_list;
 
     template<typename _Tp>
     static constexpr bool _not_self = !std::is_same_v<std::remove_cv_t<std::remove_reference_t<_Tp>>, MyUnion>;
@@ -272,37 +263,3 @@
 }  // namespace tests
 }  // namespace aidl
 }  // namespace android
-namespace android {
-namespace aidl {
-namespace tests {
-[[nodiscard]] static inline std::string toString(ListOfInterfaces::MyUnion::Tag val) {
-  switch(val) {
-  case ListOfInterfaces::MyUnion::Tag::iface:
-    return "iface";
-  case ListOfInterfaces::MyUnion::Tag::nullable_iface:
-    return "nullable_iface";
-  case ListOfInterfaces::MyUnion::Tag::iface_list:
-    return "iface_list";
-  case ListOfInterfaces::MyUnion::Tag::nullable_iface_list:
-    return "nullable_iface_list";
-  default:
-    return std::to_string(static_cast<int32_t>(val));
-  }
-}
-}  // namespace tests
-}  // namespace aidl
-}  // namespace android
-namespace android {
-namespace internal {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wc++17-extensions"
-template <>
-constexpr inline std::array<::android::aidl::tests::ListOfInterfaces::MyUnion::Tag, 4> enum_values<::android::aidl::tests::ListOfInterfaces::MyUnion::Tag> = {
-  ::android::aidl::tests::ListOfInterfaces::MyUnion::Tag::iface,
-  ::android::aidl::tests::ListOfInterfaces::MyUnion::Tag::nullable_iface,
-  ::android::aidl::tests::ListOfInterfaces::MyUnion::Tag::iface_list,
-  ::android::aidl::tests::ListOfInterfaces::MyUnion::Tag::nullable_iface_list,
-};
-#pragma clang diagnostic pop
-}  // namespace internal
-}  // namespace android
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/Union.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/Union.h
index a82300f..4428401 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/Union.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/Union.h
@@ -2,8 +2,6 @@
 
 #include <android/aidl/tests/ByteEnum.h>
 #include <android/binder_to_string.h>
-#include <array>
-#include <binder/Enums.h>
 #include <binder/IBinder.h>
 #include <binder/Parcel.h>
 #include <binder/Status.h>
@@ -25,23 +23,15 @@
 namespace tests {
 class Union : public ::android::Parcelable {
 public:
-  enum class Tag : int32_t {
-    ns = 0,
-    n = 1,
-    m = 2,
-    s = 3,
-    ibinder = 4,
-    ss = 5,
-    be = 6,
+  enum Tag : int32_t {
+    ns = 0,  // int[] ns;
+    n,  // int n;
+    m,  // int m;
+    s,  // String s;
+    ibinder,  // IBinder ibinder;
+    ss,  // List<String> ss;
+    be,  // android.aidl.tests.ByteEnum be;
   };
-  // Expose tag symbols for legacy code
-  static const inline Tag ns = Tag::ns;
-  static const inline Tag n = Tag::n;
-  static const inline Tag m = Tag::m;
-  static const inline Tag s = Tag::s;
-  static const inline Tag ibinder = Tag::ibinder;
-  static const inline Tag ss = Tag::ss;
-  static const inline Tag be = Tag::be;
 
   template<typename _Tp>
   static constexpr bool _not_self = !std::is_same_v<std::remove_cv_t<std::remove_reference_t<_Tp>>, Union>;
@@ -135,46 +125,3 @@
 }  // namespace tests
 }  // namespace aidl
 }  // namespace android
-namespace android {
-namespace aidl {
-namespace tests {
-[[nodiscard]] static inline std::string toString(Union::Tag val) {
-  switch(val) {
-  case Union::Tag::ns:
-    return "ns";
-  case Union::Tag::n:
-    return "n";
-  case Union::Tag::m:
-    return "m";
-  case Union::Tag::s:
-    return "s";
-  case Union::Tag::ibinder:
-    return "ibinder";
-  case Union::Tag::ss:
-    return "ss";
-  case Union::Tag::be:
-    return "be";
-  default:
-    return std::to_string(static_cast<int32_t>(val));
-  }
-}
-}  // namespace tests
-}  // namespace aidl
-}  // namespace android
-namespace android {
-namespace internal {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wc++17-extensions"
-template <>
-constexpr inline std::array<::android::aidl::tests::Union::Tag, 7> enum_values<::android::aidl::tests::Union::Tag> = {
-  ::android::aidl::tests::Union::Tag::ns,
-  ::android::aidl::tests::Union::Tag::n,
-  ::android::aidl::tests::Union::Tag::m,
-  ::android::aidl::tests::Union::Tag::s,
-  ::android::aidl::tests::Union::Tag::ibinder,
-  ::android::aidl::tests::Union::Tag::ss,
-  ::android::aidl::tests::Union::Tag::be,
-};
-#pragma clang diagnostic pop
-}  // namespace internal
-}  // namespace android
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/UnionWithFd.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/UnionWithFd.h
index c97edf1..06ae2a6 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/UnionWithFd.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/UnionWithFd.h
@@ -1,14 +1,11 @@
 #pragma once
 
 #include <android/binder_to_string.h>
-#include <array>
-#include <binder/Enums.h>
 #include <binder/Parcel.h>
 #include <binder/ParcelFileDescriptor.h>
 #include <binder/Status.h>
 #include <cassert>
 #include <cstdint>
-#include <string>
 #include <type_traits>
 #include <utility>
 #include <utils/String16.h>
@@ -23,13 +20,10 @@
 namespace tests {
 class UnionWithFd : public ::android::Parcelable {
 public:
-  enum class Tag : int32_t {
-    num = 0,
-    pfd = 1,
+  enum Tag : int32_t {
+    num = 0,  // int num;
+    pfd,  // ParcelFileDescriptor pfd;
   };
-  // Expose tag symbols for legacy code
-  static const inline Tag num = Tag::num;
-  static const inline Tag pfd = Tag::pfd;
 
   template<typename _Tp>
   static constexpr bool _not_self = !std::is_same_v<std::remove_cv_t<std::remove_reference_t<_Tp>>, UnionWithFd>;
@@ -117,31 +111,3 @@
 }  // namespace tests
 }  // namespace aidl
 }  // namespace android
-namespace android {
-namespace aidl {
-namespace tests {
-[[nodiscard]] static inline std::string toString(UnionWithFd::Tag val) {
-  switch(val) {
-  case UnionWithFd::Tag::num:
-    return "num";
-  case UnionWithFd::Tag::pfd:
-    return "pfd";
-  default:
-    return std::to_string(static_cast<int32_t>(val));
-  }
-}
-}  // namespace tests
-}  // namespace aidl
-}  // namespace android
-namespace android {
-namespace internal {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wc++17-extensions"
-template <>
-constexpr inline std::array<::android::aidl::tests::UnionWithFd::Tag, 2> enum_values<::android::aidl::tests::UnionWithFd::Tag> = {
-  ::android::aidl::tests::UnionWithFd::Tag::num,
-  ::android::aidl::tests::UnionWithFd::Tag::pfd,
-};
-#pragma clang diagnostic pop
-}  // namespace internal
-}  // namespace android
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/unions/EnumUnion.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/unions/EnumUnion.h
index a65f9f0..3898fbc 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/unions/EnumUnion.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/unions/EnumUnion.h
@@ -3,13 +3,9 @@
 #include <android/aidl/tests/IntEnum.h>
 #include <android/aidl/tests/LongEnum.h>
 #include <android/binder_to_string.h>
-#include <array>
-#include <binder/Enums.h>
 #include <binder/Parcel.h>
 #include <binder/Status.h>
 #include <cassert>
-#include <cstdint>
-#include <string>
 #include <type_traits>
 #include <utility>
 #include <utils/String16.h>
@@ -25,13 +21,10 @@
 namespace unions {
 class EnumUnion : public ::android::Parcelable {
 public:
-  enum class Tag : int32_t {
-    intEnum = 0,
-    longEnum = 1,
+  enum Tag : int32_t {
+    intEnum = 0,  // android.aidl.tests.IntEnum intEnum;
+    longEnum,  // android.aidl.tests.LongEnum longEnum;
   };
-  // Expose tag symbols for legacy code
-  static const inline Tag intEnum = Tag::intEnum;
-  static const inline Tag longEnum = Tag::longEnum;
 
   template<typename _Tp>
   static constexpr bool _not_self = !std::is_same_v<std::remove_cv_t<std::remove_reference_t<_Tp>>, EnumUnion>;
@@ -120,33 +113,3 @@
 }  // namespace tests
 }  // namespace aidl
 }  // namespace android
-namespace android {
-namespace aidl {
-namespace tests {
-namespace unions {
-[[nodiscard]] static inline std::string toString(EnumUnion::Tag val) {
-  switch(val) {
-  case EnumUnion::Tag::intEnum:
-    return "intEnum";
-  case EnumUnion::Tag::longEnum:
-    return "longEnum";
-  default:
-    return std::to_string(static_cast<int32_t>(val));
-  }
-}
-}  // namespace unions
-}  // namespace tests
-}  // namespace aidl
-}  // namespace android
-namespace android {
-namespace internal {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wc++17-extensions"
-template <>
-constexpr inline std::array<::android::aidl::tests::unions::EnumUnion::Tag, 2> enum_values<::android::aidl::tests::unions::EnumUnion::Tag> = {
-  ::android::aidl::tests::unions::EnumUnion::Tag::intEnum,
-  ::android::aidl::tests::unions::EnumUnion::Tag::longEnum,
-};
-#pragma clang diagnostic pop
-}  // namespace internal
-}  // namespace android
diff --git a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/unions/UnionInUnion.h b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/unions/UnionInUnion.h
index 9badc3a..9adbbe9 100644
--- a/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/unions/UnionInUnion.h
+++ b/tests/golden_output/aidl-test-interface-cpp-source/gen/include/android/aidl/tests/unions/UnionInUnion.h
@@ -2,13 +2,10 @@
 
 #include <android/aidl/tests/unions/EnumUnion.h>
 #include <android/binder_to_string.h>
-#include <array>
-#include <binder/Enums.h>
 #include <binder/Parcel.h>
 #include <binder/Status.h>
 #include <cassert>
 #include <cstdint>
-#include <string>
 #include <type_traits>
 #include <utility>
 #include <utils/String16.h>
@@ -24,13 +21,10 @@
 namespace unions {
 class UnionInUnion : public ::android::Parcelable {
 public:
-  enum class Tag : int32_t {
-    first = 0,
-    second = 1,
+  enum Tag : int32_t {
+    first = 0,  // android.aidl.tests.unions.EnumUnion first;
+    second,  // int second;
   };
-  // Expose tag symbols for legacy code
-  static const inline Tag first = Tag::first;
-  static const inline Tag second = Tag::second;
 
   template<typename _Tp>
   static constexpr bool _not_self = !std::is_same_v<std::remove_cv_t<std::remove_reference_t<_Tp>>, UnionInUnion>;
@@ -119,33 +113,3 @@
 }  // namespace tests
 }  // namespace aidl
 }  // namespace android
-namespace android {
-namespace aidl {
-namespace tests {
-namespace unions {
-[[nodiscard]] static inline std::string toString(UnionInUnion::Tag val) {
-  switch(val) {
-  case UnionInUnion::Tag::first:
-    return "first";
-  case UnionInUnion::Tag::second:
-    return "second";
-  default:
-    return std::to_string(static_cast<int32_t>(val));
-  }
-}
-}  // namespace unions
-}  // namespace tests
-}  // namespace aidl
-}  // namespace android
-namespace android {
-namespace internal {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wc++17-extensions"
-template <>
-constexpr inline std::array<::android::aidl::tests::unions::UnionInUnion::Tag, 2> enum_values<::android::aidl::tests::unions::UnionInUnion::Tag> = {
-  ::android::aidl::tests::unions::UnionInUnion::Tag::first,
-  ::android::aidl::tests::unions::UnionInUnion::Tag::second,
-};
-#pragma clang diagnostic pop
-}  // namespace internal
-}  // namespace android
diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ArrayOfInterfaces.java b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ArrayOfInterfaces.java
index ea45e08..5c86379 100644
--- a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ArrayOfInterfaces.java
+++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ArrayOfInterfaces.java
@@ -565,11 +565,5 @@
       this._tag = _tag;
       this._value = _value;
     }
-    public static @interface Tag {
-      public static final int iface = 0;
-      public static final int nullable_iface = 1;
-      public static final int iface_array = 2;
-      public static final int nullable_iface_array = 3;
-    }
   }
 }
diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/FixedSize.java b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/FixedSize.java
index 2ff3068..1b4ca32 100644
--- a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/FixedSize.java
+++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/FixedSize.java
@@ -404,15 +404,5 @@
       this._tag = _tag;
       this._value = _value;
     }
-    public static @interface Tag {
-      public static final byte booleanValue = 0;
-      public static final byte byteValue = 1;
-      public static final byte charValue = 2;
-      public static final byte intValue = 3;
-      public static final byte longValue = 4;
-      public static final byte floatValue = 5;
-      public static final byte doubleValue = 6;
-      public static final byte enumValue = 7;
-    }
   }
 }
diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ITestService.java b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ITestService.java
index 1530943..50d65a6 100644
--- a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ITestService.java
+++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ITestService.java
@@ -276,10 +276,6 @@
     {
       return null;
     }
-    @Override public int[] GetUnionTags(android.aidl.tests.Union[] input) throws android.os.RemoteException
-    {
-      return null;
-    }
     // Retrieve the ICppJavaTests if the server supports it
     @Override public android.os.IBinder GetCppJavaTests() throws android.os.RemoteException
     {
@@ -577,10 +573,6 @@
     {
       return mImpl.GetNewNameInterface();
     }
-    @Override public int[] GetUnionTags(android.aidl.tests.Union[] input) throws android.os.RemoteException
-    {
-      return mImpl.GetUnionTags(input);
-    }
     // Retrieve the ICppJavaTests if the server supports it
     @Override public android.os.IBinder GetCppJavaTests() throws android.os.RemoteException
     {
@@ -1389,16 +1381,6 @@
           reply.writeStrongInterface(_result);
           break;
         }
-        case TRANSACTION_GetUnionTags:
-        {
-          android.aidl.tests.Union[] _arg0;
-          _arg0 = data.createTypedArray(android.aidl.tests.Union.CREATOR);
-          data.enforceNoDataAvail();
-          int[] _result = this.GetUnionTags(_arg0);
-          reply.writeNoException();
-          reply.writeIntArray(_result);
-          break;
-        }
         case TRANSACTION_GetCppJavaTests:
         {
           android.os.IBinder _result = this.GetCppJavaTests();
@@ -3072,30 +3054,6 @@
         }
         return _result;
       }
-      @Override public int[] GetUnionTags(android.aidl.tests.Union[] input) throws android.os.RemoteException
-      {
-        android.os.Parcel _data = android.os.Parcel.obtain(asBinder());
-        _data.markSensitive();
-        android.os.Parcel _reply = android.os.Parcel.obtain();
-        int[] _result;
-        try {
-          _data.writeInterfaceToken(DESCRIPTOR);
-          _data.writeTypedArray(input, 0);
-          boolean _status = mRemote.transact(Stub.TRANSACTION_GetUnionTags, _data, _reply, android.os.IBinder.FLAG_CLEAR_BUF);
-          if (!_status) {
-            if (getDefaultImpl() != null) {
-              return getDefaultImpl().GetUnionTags(input);
-            }
-          }
-          _reply.readException();
-          _result = _reply.createIntArray();
-        }
-        finally {
-          _reply.recycle();
-          _data.recycle();
-        }
-        return _result;
-      }
       // Retrieve the ICppJavaTests if the server supports it
       @Override public android.os.IBinder GetCppJavaTests() throws android.os.RemoteException
       {
@@ -3208,9 +3166,8 @@
     static final int TRANSACTION_ReverseNullableIBinderArray = (android.os.IBinder.FIRST_CALL_TRANSACTION + 60);
     static final int TRANSACTION_GetOldNameInterface = (android.os.IBinder.FIRST_CALL_TRANSACTION + 61);
     static final int TRANSACTION_GetNewNameInterface = (android.os.IBinder.FIRST_CALL_TRANSACTION + 62);
-    static final int TRANSACTION_GetUnionTags = (android.os.IBinder.FIRST_CALL_TRANSACTION + 63);
-    static final int TRANSACTION_GetCppJavaTests = (android.os.IBinder.FIRST_CALL_TRANSACTION + 64);
-    static final int TRANSACTION_getBackendType = (android.os.IBinder.FIRST_CALL_TRANSACTION + 65);
+    static final int TRANSACTION_GetCppJavaTests = (android.os.IBinder.FIRST_CALL_TRANSACTION + 63);
+    static final int TRANSACTION_getBackendType = (android.os.IBinder.FIRST_CALL_TRANSACTION + 64);
     public static boolean setDefaultImpl(android.aidl.tests.ITestService impl) {
       // Only one user of this interface can use this function
       // at a time. This is a heuristic to detect if two different
@@ -3400,7 +3357,6 @@
   public android.os.IBinder[] ReverseNullableIBinderArray(android.os.IBinder[] input, android.os.IBinder[] repeated) throws android.os.RemoteException;
   public android.aidl.tests.IOldName GetOldNameInterface() throws android.os.RemoteException;
   public android.aidl.tests.INewName GetNewNameInterface() throws android.os.RemoteException;
-  public int[] GetUnionTags(android.aidl.tests.Union[] input) throws android.os.RemoteException;
   // Retrieve the ICppJavaTests if the server supports it
   public android.os.IBinder GetCppJavaTests() throws android.os.RemoteException;
   public byte getBackendType() throws android.os.RemoteException;
diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ITestService.java.d b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ITestService.java.d
index 561c508..f82b264 100644
--- a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ITestService.java.d
+++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ITestService.java.d
@@ -9,6 +9,6 @@
   system/tools/aidl/tests/android/aidl/tests/LongEnum.aidl \
   system/tools/aidl/tests/android/aidl/tests/RecursiveList.aidl \
   system/tools/aidl/tests/android/aidl/tests/StructuredParcelable.aidl \
-  system/tools/aidl/tests/android/aidl/tests/Union.aidl \
   system/tools/aidl/tests/android/aidl/tests/extension/ExtendableParcelable.aidl \
-  system/tools/aidl/tests/android/aidl/tests/ConstantExpressionEnum.aidl
+  system/tools/aidl/tests/android/aidl/tests/ConstantExpressionEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/Union.aidl
diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ListOfInterfaces.java b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ListOfInterfaces.java
index 6a2564d..fafba0c 100644
--- a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ListOfInterfaces.java
+++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/ListOfInterfaces.java
@@ -545,11 +545,5 @@
       this._tag = _tag;
       this._value = _value;
     }
-    public static @interface Tag {
-      public static final int iface = 0;
-      public static final int nullable_iface = 1;
-      public static final int iface_list = 2;
-      public static final int nullable_iface_list = 3;
-    }
   }
 }
diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/Union.java b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/Union.java
index 018898a..50688a6 100644
--- a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/Union.java
+++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/Union.java
@@ -283,13 +283,4 @@
     this._tag = _tag;
     this._value = _value;
   }
-  public static @interface Tag {
-    public static final int ns = 0;
-    public static final int n = 1;
-    public static final int m = 2;
-    public static final int s = 3;
-    public static final int ibinder = 4;
-    public static final int ss = 5;
-    public static final int be = 6;
-  }
 }
diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/UnionWithFd.java b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/UnionWithFd.java
index bdd6946..941c947 100644
--- a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/UnionWithFd.java
+++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/UnionWithFd.java
@@ -137,8 +137,4 @@
     this._tag = _tag;
     this._value = _value;
   }
-  public static @interface Tag {
-    public static final int num = 0;
-    public static final int pfd = 1;
-  }
 }
diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/unions/EnumUnion.java b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/unions/EnumUnion.java
index 038d813..28df6de 100644
--- a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/unions/EnumUnion.java
+++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/unions/EnumUnion.java
@@ -151,8 +151,4 @@
     this._tag = _tag;
     this._value = _value;
   }
-  public static @interface Tag {
-    public static final int intEnum = 0;
-    public static final int longEnum = 1;
-  }
 }
diff --git a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/unions/UnionInUnion.java b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/unions/UnionInUnion.java
index 90a68d3..241511e 100644
--- a/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/unions/UnionInUnion.java
+++ b/tests/golden_output/aidl-test-interface-java-source/gen/android/aidl/tests/unions/UnionInUnion.java
@@ -161,8 +161,4 @@
     this._tag = _tag;
     this._value = _value;
   }
-  public static @interface Tag {
-    public static final int first = 0;
-    public static final int second = 1;
-  }
 }
diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/ITestService.cpp b/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/ITestService.cpp
index 8c9ff0a..0268aaa 100644
--- a/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/ITestService.cpp
+++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/ITestService.cpp
@@ -1246,25 +1246,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 63 /*GetUnionTags*/): {
-      std::vector<::aidl::android::aidl::tests::Union> in_input;
-      std::vector<::aidl::android::aidl::tests::Union::Tag> _aidl_return;
-
-      _aidl_ret_status = ::ndk::AParcel_readData(_aidl_in, &in_input);
-      if (_aidl_ret_status != STATUS_OK) break;
-
-      ::ndk::ScopedAStatus _aidl_status = _aidl_impl->GetUnionTags(in_input, &_aidl_return);
-      _aidl_ret_status = AParcel_writeStatusHeader(_aidl_out, _aidl_status.get());
-      if (_aidl_ret_status != STATUS_OK) break;
-
-      if (!AStatus_isOk(_aidl_status.get())) break;
-
-      _aidl_ret_status = ::ndk::AParcel_writeData(_aidl_out, _aidl_return);
-      if (_aidl_ret_status != STATUS_OK) break;
-
-      break;
-    }
-    case (FIRST_CALL_TRANSACTION + 64 /*GetCppJavaTests*/): {
+    case (FIRST_CALL_TRANSACTION + 63 /*GetCppJavaTests*/): {
       ::ndk::SpAIBinder _aidl_return;
 
       ::ndk::ScopedAStatus _aidl_status = _aidl_impl->GetCppJavaTests(&_aidl_return);
@@ -1278,7 +1260,7 @@
 
       break;
     }
-    case (FIRST_CALL_TRANSACTION + 65 /*getBackendType*/): {
+    case (FIRST_CALL_TRANSACTION + 64 /*getBackendType*/): {
       ::aidl::android::aidl::tests::BackendType _aidl_return;
 
       ::ndk::ScopedAStatus _aidl_status = _aidl_impl->getBackendType(&_aidl_return);
@@ -3962,47 +3944,6 @@
   _aidl_status_return:
   return _aidl_status;
 }
-::ndk::ScopedAStatus BpTestService::GetUnionTags(const std::vector<::aidl::android::aidl::tests::Union>& in_input, std::vector<::aidl::android::aidl::tests::Union::Tag>* _aidl_return) {
-  binder_status_t _aidl_ret_status = STATUS_OK;
-  ::ndk::ScopedAStatus _aidl_status;
-  ::ndk::ScopedAParcel _aidl_in;
-  ::ndk::ScopedAParcel _aidl_out;
-
-  _aidl_ret_status = AIBinder_prepareTransaction(asBinder().get(), _aidl_in.getR());
-  AParcel_markSensitive(_aidl_in.get());
-  if (_aidl_ret_status != STATUS_OK) goto _aidl_error;
-
-  _aidl_ret_status = ::ndk::AParcel_writeData(_aidl_in.get(), in_input);
-  if (_aidl_ret_status != STATUS_OK) goto _aidl_error;
-
-  _aidl_ret_status = AIBinder_transact(
-    asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 63 /*GetUnionTags*/),
-    _aidl_in.getR(),
-    _aidl_out.getR(),
-    FLAG_CLEAR_BUF
-    #ifdef BINDER_STABILITY_SUPPORT
-    | FLAG_PRIVATE_LOCAL
-    #endif  // BINDER_STABILITY_SUPPORT
-    );
-  if (_aidl_ret_status == STATUS_UNKNOWN_TRANSACTION && ITestService::getDefaultImpl()) {
-    _aidl_status = ITestService::getDefaultImpl()->GetUnionTags(in_input, _aidl_return);
-    goto _aidl_status_return;
-  }
-  if (_aidl_ret_status != STATUS_OK) goto _aidl_error;
-
-  _aidl_ret_status = AParcel_readStatusHeader(_aidl_out.get(), _aidl_status.getR());
-  if (_aidl_ret_status != STATUS_OK) goto _aidl_error;
-
-  if (!AStatus_isOk(_aidl_status.get())) goto _aidl_status_return;
-  _aidl_ret_status = ::ndk::AParcel_readData(_aidl_out.get(), _aidl_return);
-  if (_aidl_ret_status != STATUS_OK) goto _aidl_error;
-
-  _aidl_error:
-  _aidl_status.set(AStatus_fromStatus(_aidl_ret_status));
-  _aidl_status_return:
-  return _aidl_status;
-}
 ::ndk::ScopedAStatus BpTestService::GetCppJavaTests(::ndk::SpAIBinder* _aidl_return) {
   binder_status_t _aidl_ret_status = STATUS_OK;
   ::ndk::ScopedAStatus _aidl_status;
@@ -4015,7 +3956,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 64 /*GetCppJavaTests*/),
+    (FIRST_CALL_TRANSACTION + 63 /*GetCppJavaTests*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -4053,7 +3994,7 @@
 
   _aidl_ret_status = AIBinder_transact(
     asBinder().get(),
-    (FIRST_CALL_TRANSACTION + 65 /*getBackendType*/),
+    (FIRST_CALL_TRANSACTION + 64 /*getBackendType*/),
     _aidl_in.getR(),
     _aidl_out.getR(),
     FLAG_CLEAR_BUF
@@ -4447,11 +4388,6 @@
   _aidl_status.set(AStatus_fromStatus(STATUS_UNKNOWN_TRANSACTION));
   return _aidl_status;
 }
-::ndk::ScopedAStatus ITestServiceDefault::GetUnionTags(const std::vector<::aidl::android::aidl::tests::Union>& /*in_input*/, std::vector<::aidl::android::aidl::tests::Union::Tag>* /*_aidl_return*/) {
-  ::ndk::ScopedAStatus _aidl_status;
-  _aidl_status.set(AStatus_fromStatus(STATUS_UNKNOWN_TRANSACTION));
-  return _aidl_status;
-}
 ::ndk::ScopedAStatus ITestServiceDefault::GetCppJavaTests(::ndk::SpAIBinder* /*_aidl_return*/) {
   ::ndk::ScopedAStatus _aidl_status;
   _aidl_status.set(AStatus_fromStatus(STATUS_UNKNOWN_TRANSACTION));
diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/ITestService.cpp.d b/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/ITestService.cpp.d
index 19acd9f..b46066a 100644
--- a/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/ITestService.cpp.d
+++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/android/aidl/tests/ITestService.cpp.d
@@ -9,6 +9,6 @@
   system/tools/aidl/tests/android/aidl/tests/LongEnum.aidl \
   system/tools/aidl/tests/android/aidl/tests/RecursiveList.aidl \
   system/tools/aidl/tests/android/aidl/tests/StructuredParcelable.aidl \
-  system/tools/aidl/tests/android/aidl/tests/Union.aidl \
   system/tools/aidl/tests/android/aidl/tests/extension/ExtendableParcelable.aidl \
-  system/tools/aidl/tests/android/aidl/tests/ConstantExpressionEnum.aidl
+  system/tools/aidl/tests/android/aidl/tests/ConstantExpressionEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/Union.aidl
diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/ArrayOfInterfaces.h b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/ArrayOfInterfaces.h
index b2b9e7b..40951a7 100644
--- a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/ArrayOfInterfaces.h
+++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/ArrayOfInterfaces.h
@@ -1,6 +1,5 @@
 #pragma once
 
-#include <array>
 #include <cassert>
 #include <cstdint>
 #include <memory>
@@ -10,7 +9,6 @@
 #include <utility>
 #include <variant>
 #include <vector>
-#include <android/binder_enums.h>
 #include <android/binder_ibinder.h>
 #include <android/binder_interface_utils.h>
 #include <android/binder_parcelable_utils.h>
@@ -154,19 +152,13 @@
     typedef std::false_type fixed_size;
     static const char* descriptor;
 
-    enum class Tag : int32_t {
-      iface = 0,
-      nullable_iface = 1,
-      iface_array = 2,
-      nullable_iface_array = 3,
+    enum Tag : int32_t {
+      iface = 0,  // android.aidl.tests.ArrayOfInterfaces.IEmptyInterface iface;
+      nullable_iface,  // android.aidl.tests.ArrayOfInterfaces.IEmptyInterface nullable_iface;
+      iface_array,  // android.aidl.tests.ArrayOfInterfaces.IEmptyInterface[] iface_array;
+      nullable_iface_array,  // android.aidl.tests.ArrayOfInterfaces.IEmptyInterface[] nullable_iface_array;
     };
 
-    // Expose tag symbols for legacy code
-    static const inline Tag iface = Tag::iface;
-    static const inline Tag nullable_iface = Tag::nullable_iface;
-    static const inline Tag iface_array = Tag::iface_array;
-    static const inline Tag nullable_iface_array = Tag::nullable_iface_array;
-
     template<typename _Tp>
     static constexpr bool _not_self = !std::is_same_v<std::remove_cv_t<std::remove_reference_t<_Tp>>, MyUnion>;
 
@@ -285,39 +277,3 @@
 }  // namespace aidl
 }  // namespace android
 }  // namespace aidl
-namespace aidl {
-namespace android {
-namespace aidl {
-namespace tests {
-[[nodiscard]] static inline std::string toString(ArrayOfInterfaces::MyUnion::Tag val) {
-  switch(val) {
-  case ArrayOfInterfaces::MyUnion::Tag::iface:
-    return "iface";
-  case ArrayOfInterfaces::MyUnion::Tag::nullable_iface:
-    return "nullable_iface";
-  case ArrayOfInterfaces::MyUnion::Tag::iface_array:
-    return "iface_array";
-  case ArrayOfInterfaces::MyUnion::Tag::nullable_iface_array:
-    return "nullable_iface_array";
-  default:
-    return std::to_string(static_cast<int32_t>(val));
-  }
-}
-}  // namespace tests
-}  // namespace aidl
-}  // namespace android
-}  // namespace aidl
-namespace ndk {
-namespace internal {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wc++17-extensions"
-template <>
-constexpr inline std::array<aidl::android::aidl::tests::ArrayOfInterfaces::MyUnion::Tag, 4> enum_values<aidl::android::aidl::tests::ArrayOfInterfaces::MyUnion::Tag> = {
-  aidl::android::aidl::tests::ArrayOfInterfaces::MyUnion::Tag::iface,
-  aidl::android::aidl::tests::ArrayOfInterfaces::MyUnion::Tag::nullable_iface,
-  aidl::android::aidl::tests::ArrayOfInterfaces::MyUnion::Tag::iface_array,
-  aidl::android::aidl::tests::ArrayOfInterfaces::MyUnion::Tag::nullable_iface_array,
-};
-#pragma clang diagnostic pop
-}  // namespace internal
-}  // namespace ndk
diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/BpTestService.h b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/BpTestService.h
index 2cd9768..71b75be 100644
--- a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/BpTestService.h
+++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/BpTestService.h
@@ -76,7 +76,6 @@
   ::ndk::ScopedAStatus ReverseNullableIBinderArray(const std::optional<std::vector<::ndk::SpAIBinder>>& in_input, std::optional<std::vector<::ndk::SpAIBinder>>* out_repeated, std::optional<std::vector<::ndk::SpAIBinder>>* _aidl_return) override;
   ::ndk::ScopedAStatus GetOldNameInterface(std::shared_ptr<::aidl::android::aidl::tests::IOldName>* _aidl_return) override;
   ::ndk::ScopedAStatus GetNewNameInterface(std::shared_ptr<::aidl::android::aidl::tests::INewName>* _aidl_return) override;
-  ::ndk::ScopedAStatus GetUnionTags(const std::vector<::aidl::android::aidl::tests::Union>& in_input, std::vector<::aidl::android::aidl::tests::Union::Tag>* _aidl_return) override;
   ::ndk::ScopedAStatus GetCppJavaTests(::ndk::SpAIBinder* _aidl_return) override;
   ::ndk::ScopedAStatus getBackendType(::aidl::android::aidl::tests::BackendType* _aidl_return) override;
 };
diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/FixedSize.h b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/FixedSize.h
index 541757a..7c92e11 100644
--- a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/FixedSize.h
+++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/FixedSize.h
@@ -1,6 +1,5 @@
 #pragma once
 
-#include <array>
 #include <cassert>
 #include <cstdint>
 #include <memory>
@@ -11,7 +10,6 @@
 #include <utility>
 #include <variant>
 #include <vector>
-#include <android/binder_enums.h>
 #include <android/binder_interface_utils.h>
 #include <android/binder_parcelable_utils.h>
 #include <android/binder_to_string.h>
@@ -39,27 +37,17 @@
     typedef std::true_type fixed_size;
     static const char* descriptor;
 
-    enum class Tag : int8_t {
-      booleanValue = 0,
-      byteValue = 1,
-      charValue = 2,
-      intValue = 3,
-      longValue = 4,
-      floatValue = 5,
-      doubleValue = 6,
-      enumValue = 7,
+    enum Tag : uint8_t {
+      booleanValue = 0,  // boolean booleanValue;
+      byteValue,  // byte byteValue;
+      charValue,  // char charValue;
+      intValue,  // int intValue;
+      longValue,  // long longValue;
+      floatValue,  // float floatValue;
+      doubleValue,  // double doubleValue;
+      enumValue,  // android.aidl.tests.LongEnum enumValue;
     };
 
-    // Expose tag symbols for legacy code
-    static const inline Tag booleanValue = Tag::booleanValue;
-    static const inline Tag byteValue = Tag::byteValue;
-    static const inline Tag charValue = Tag::charValue;
-    static const inline Tag intValue = Tag::intValue;
-    static const inline Tag longValue = Tag::longValue;
-    static const inline Tag floatValue = Tag::floatValue;
-    static const inline Tag doubleValue = Tag::doubleValue;
-    static const inline Tag enumValue = Tag::enumValue;
-
     template <Tag _Tag>
     using _at = typename std::tuple_element<static_cast<size_t>(_Tag), std::tuple<bool, int8_t, char16_t, int32_t, int64_t, float, double, ::aidl::android::aidl::tests::LongEnum>>::type;
     template <Tag _Tag, typename _Type>
@@ -142,7 +130,7 @@
       return os.str();
     }
   private:
-    Tag _tag = booleanValue;
+    Tag _tag __attribute__((aligned (1))) = booleanValue;
     union _value_t {
       _value_t() {}
       ~_value_t() {}
@@ -245,51 +233,3 @@
 }  // namespace aidl
 }  // namespace android
 }  // namespace aidl
-namespace aidl {
-namespace android {
-namespace aidl {
-namespace tests {
-[[nodiscard]] static inline std::string toString(FixedSize::FixedUnion::Tag val) {
-  switch(val) {
-  case FixedSize::FixedUnion::Tag::booleanValue:
-    return "booleanValue";
-  case FixedSize::FixedUnion::Tag::byteValue:
-    return "byteValue";
-  case FixedSize::FixedUnion::Tag::charValue:
-    return "charValue";
-  case FixedSize::FixedUnion::Tag::intValue:
-    return "intValue";
-  case FixedSize::FixedUnion::Tag::longValue:
-    return "longValue";
-  case FixedSize::FixedUnion::Tag::floatValue:
-    return "floatValue";
-  case FixedSize::FixedUnion::Tag::doubleValue:
-    return "doubleValue";
-  case FixedSize::FixedUnion::Tag::enumValue:
-    return "enumValue";
-  default:
-    return std::to_string(static_cast<int8_t>(val));
-  }
-}
-}  // namespace tests
-}  // namespace aidl
-}  // namespace android
-}  // namespace aidl
-namespace ndk {
-namespace internal {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wc++17-extensions"
-template <>
-constexpr inline std::array<aidl::android::aidl::tests::FixedSize::FixedUnion::Tag, 8> enum_values<aidl::android::aidl::tests::FixedSize::FixedUnion::Tag> = {
-  aidl::android::aidl::tests::FixedSize::FixedUnion::Tag::booleanValue,
-  aidl::android::aidl::tests::FixedSize::FixedUnion::Tag::byteValue,
-  aidl::android::aidl::tests::FixedSize::FixedUnion::Tag::charValue,
-  aidl::android::aidl::tests::FixedSize::FixedUnion::Tag::intValue,
-  aidl::android::aidl::tests::FixedSize::FixedUnion::Tag::longValue,
-  aidl::android::aidl::tests::FixedSize::FixedUnion::Tag::floatValue,
-  aidl::android::aidl::tests::FixedSize::FixedUnion::Tag::doubleValue,
-  aidl::android::aidl::tests::FixedSize::FixedUnion::Tag::enumValue,
-};
-#pragma clang diagnostic pop
-}  // namespace internal
-}  // namespace ndk
diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/ITestService.h b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/ITestService.h
index 2c396b8..dfa1692 100644
--- a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/ITestService.h
+++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/ITestService.h
@@ -20,7 +20,6 @@
 #include <aidl/android/aidl/tests/LongEnum.h>
 #include <aidl/android/aidl/tests/RecursiveList.h>
 #include <aidl/android/aidl/tests/StructuredParcelable.h>
-#include <aidl/android/aidl/tests/Union.h>
 #include <aidl/android/aidl/tests/extension/ExtendableParcelable.h>
 #ifdef BINDER_STABILITY_SUPPORT
 #include <android/binder_stability.h>
@@ -281,9 +280,8 @@
   static constexpr uint32_t TRANSACTION_ReverseNullableIBinderArray = FIRST_CALL_TRANSACTION + 60;
   static constexpr uint32_t TRANSACTION_GetOldNameInterface = FIRST_CALL_TRANSACTION + 61;
   static constexpr uint32_t TRANSACTION_GetNewNameInterface = FIRST_CALL_TRANSACTION + 62;
-  static constexpr uint32_t TRANSACTION_GetUnionTags = FIRST_CALL_TRANSACTION + 63;
-  static constexpr uint32_t TRANSACTION_GetCppJavaTests = FIRST_CALL_TRANSACTION + 64;
-  static constexpr uint32_t TRANSACTION_getBackendType = FIRST_CALL_TRANSACTION + 65;
+  static constexpr uint32_t TRANSACTION_GetCppJavaTests = FIRST_CALL_TRANSACTION + 63;
+  static constexpr uint32_t TRANSACTION_getBackendType = FIRST_CALL_TRANSACTION + 64;
 
   static std::shared_ptr<ITestService> fromBinder(const ::ndk::SpAIBinder& binder);
   static binder_status_t writeToParcel(AParcel* parcel, const std::shared_ptr<ITestService>& instance);
@@ -353,7 +351,6 @@
   virtual ::ndk::ScopedAStatus ReverseNullableIBinderArray(const std::optional<std::vector<::ndk::SpAIBinder>>& in_input, std::optional<std::vector<::ndk::SpAIBinder>>* out_repeated, std::optional<std::vector<::ndk::SpAIBinder>>* _aidl_return) = 0;
   virtual ::ndk::ScopedAStatus GetOldNameInterface(std::shared_ptr<::aidl::android::aidl::tests::IOldName>* _aidl_return) = 0;
   virtual ::ndk::ScopedAStatus GetNewNameInterface(std::shared_ptr<::aidl::android::aidl::tests::INewName>* _aidl_return) = 0;
-  virtual ::ndk::ScopedAStatus GetUnionTags(const std::vector<::aidl::android::aidl::tests::Union>& in_input, std::vector<::aidl::android::aidl::tests::Union::Tag>* _aidl_return) = 0;
   virtual ::ndk::ScopedAStatus GetCppJavaTests(::ndk::SpAIBinder* _aidl_return) = 0;
   virtual ::ndk::ScopedAStatus getBackendType(::aidl::android::aidl::tests::BackendType* _aidl_return) = 0;
 private:
@@ -424,7 +421,6 @@
   ::ndk::ScopedAStatus ReverseNullableIBinderArray(const std::optional<std::vector<::ndk::SpAIBinder>>& in_input, std::optional<std::vector<::ndk::SpAIBinder>>* out_repeated, std::optional<std::vector<::ndk::SpAIBinder>>* _aidl_return) override;
   ::ndk::ScopedAStatus GetOldNameInterface(std::shared_ptr<::aidl::android::aidl::tests::IOldName>* _aidl_return) override;
   ::ndk::ScopedAStatus GetNewNameInterface(std::shared_ptr<::aidl::android::aidl::tests::INewName>* _aidl_return) override;
-  ::ndk::ScopedAStatus GetUnionTags(const std::vector<::aidl::android::aidl::tests::Union>& in_input, std::vector<::aidl::android::aidl::tests::Union::Tag>* _aidl_return) override;
   ::ndk::ScopedAStatus GetCppJavaTests(::ndk::SpAIBinder* _aidl_return) override;
   ::ndk::ScopedAStatus getBackendType(::aidl::android::aidl::tests::BackendType* _aidl_return) override;
   ::ndk::SpAIBinder asBinder() override;
diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/ListOfInterfaces.h b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/ListOfInterfaces.h
index e0dc968..7c93f75 100644
--- a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/ListOfInterfaces.h
+++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/ListOfInterfaces.h
@@ -1,6 +1,5 @@
 #pragma once
 
-#include <array>
 #include <cassert>
 #include <cstdint>
 #include <memory>
@@ -10,7 +9,6 @@
 #include <utility>
 #include <variant>
 #include <vector>
-#include <android/binder_enums.h>
 #include <android/binder_ibinder.h>
 #include <android/binder_interface_utils.h>
 #include <android/binder_parcelable_utils.h>
@@ -154,19 +152,13 @@
     typedef std::false_type fixed_size;
     static const char* descriptor;
 
-    enum class Tag : int32_t {
-      iface = 0,
-      nullable_iface = 1,
-      iface_list = 2,
-      nullable_iface_list = 3,
+    enum Tag : int32_t {
+      iface = 0,  // android.aidl.tests.ListOfInterfaces.IEmptyInterface iface;
+      nullable_iface,  // android.aidl.tests.ListOfInterfaces.IEmptyInterface nullable_iface;
+      iface_list,  // List<android.aidl.tests.ListOfInterfaces.IEmptyInterface> iface_list;
+      nullable_iface_list,  // List<android.aidl.tests.ListOfInterfaces.IEmptyInterface> nullable_iface_list;
     };
 
-    // Expose tag symbols for legacy code
-    static const inline Tag iface = Tag::iface;
-    static const inline Tag nullable_iface = Tag::nullable_iface;
-    static const inline Tag iface_list = Tag::iface_list;
-    static const inline Tag nullable_iface_list = Tag::nullable_iface_list;
-
     template<typename _Tp>
     static constexpr bool _not_self = !std::is_same_v<std::remove_cv_t<std::remove_reference_t<_Tp>>, MyUnion>;
 
@@ -285,39 +277,3 @@
 }  // namespace aidl
 }  // namespace android
 }  // namespace aidl
-namespace aidl {
-namespace android {
-namespace aidl {
-namespace tests {
-[[nodiscard]] static inline std::string toString(ListOfInterfaces::MyUnion::Tag val) {
-  switch(val) {
-  case ListOfInterfaces::MyUnion::Tag::iface:
-    return "iface";
-  case ListOfInterfaces::MyUnion::Tag::nullable_iface:
-    return "nullable_iface";
-  case ListOfInterfaces::MyUnion::Tag::iface_list:
-    return "iface_list";
-  case ListOfInterfaces::MyUnion::Tag::nullable_iface_list:
-    return "nullable_iface_list";
-  default:
-    return std::to_string(static_cast<int32_t>(val));
-  }
-}
-}  // namespace tests
-}  // namespace aidl
-}  // namespace android
-}  // namespace aidl
-namespace ndk {
-namespace internal {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wc++17-extensions"
-template <>
-constexpr inline std::array<aidl::android::aidl::tests::ListOfInterfaces::MyUnion::Tag, 4> enum_values<aidl::android::aidl::tests::ListOfInterfaces::MyUnion::Tag> = {
-  aidl::android::aidl::tests::ListOfInterfaces::MyUnion::Tag::iface,
-  aidl::android::aidl::tests::ListOfInterfaces::MyUnion::Tag::nullable_iface,
-  aidl::android::aidl::tests::ListOfInterfaces::MyUnion::Tag::iface_list,
-  aidl::android::aidl::tests::ListOfInterfaces::MyUnion::Tag::nullable_iface_list,
-};
-#pragma clang diagnostic pop
-}  // namespace internal
-}  // namespace ndk
diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/Union.h b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/Union.h
index a94d03f..27ee97c 100644
--- a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/Union.h
+++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/Union.h
@@ -1,6 +1,5 @@
 #pragma once
 
-#include <array>
 #include <cassert>
 #include <cstdint>
 #include <memory>
@@ -10,7 +9,6 @@
 #include <utility>
 #include <variant>
 #include <vector>
-#include <android/binder_enums.h>
 #include <android/binder_interface_utils.h>
 #include <android/binder_parcelable_utils.h>
 #include <android/binder_to_string.h>
@@ -32,25 +30,16 @@
   typedef std::false_type fixed_size;
   static const char* descriptor;
 
-  enum class Tag : int32_t {
-    ns = 0,
-    n = 1,
-    m = 2,
-    s = 3,
-    ibinder = 4,
-    ss = 5,
-    be = 6,
+  enum Tag : int32_t {
+    ns = 0,  // int[] ns;
+    n,  // int n;
+    m,  // int m;
+    s,  // String s;
+    ibinder,  // IBinder ibinder;
+    ss,  // List<String> ss;
+    be,  // android.aidl.tests.ByteEnum be;
   };
 
-  // Expose tag symbols for legacy code
-  static const inline Tag ns = Tag::ns;
-  static const inline Tag n = Tag::n;
-  static const inline Tag m = Tag::m;
-  static const inline Tag s = Tag::s;
-  static const inline Tag ibinder = Tag::ibinder;
-  static const inline Tag ss = Tag::ss;
-  static const inline Tag be = Tag::be;
-
   template<typename _Tp>
   static constexpr bool _not_self = !std::is_same_v<std::remove_cv_t<std::remove_reference_t<_Tp>>, Union>;
 
@@ -142,48 +131,3 @@
 }  // namespace aidl
 }  // namespace android
 }  // namespace aidl
-namespace aidl {
-namespace android {
-namespace aidl {
-namespace tests {
-[[nodiscard]] static inline std::string toString(Union::Tag val) {
-  switch(val) {
-  case Union::Tag::ns:
-    return "ns";
-  case Union::Tag::n:
-    return "n";
-  case Union::Tag::m:
-    return "m";
-  case Union::Tag::s:
-    return "s";
-  case Union::Tag::ibinder:
-    return "ibinder";
-  case Union::Tag::ss:
-    return "ss";
-  case Union::Tag::be:
-    return "be";
-  default:
-    return std::to_string(static_cast<int32_t>(val));
-  }
-}
-}  // namespace tests
-}  // namespace aidl
-}  // namespace android
-}  // namespace aidl
-namespace ndk {
-namespace internal {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wc++17-extensions"
-template <>
-constexpr inline std::array<aidl::android::aidl::tests::Union::Tag, 7> enum_values<aidl::android::aidl::tests::Union::Tag> = {
-  aidl::android::aidl::tests::Union::Tag::ns,
-  aidl::android::aidl::tests::Union::Tag::n,
-  aidl::android::aidl::tests::Union::Tag::m,
-  aidl::android::aidl::tests::Union::Tag::s,
-  aidl::android::aidl::tests::Union::Tag::ibinder,
-  aidl::android::aidl::tests::Union::Tag::ss,
-  aidl::android::aidl::tests::Union::Tag::be,
-};
-#pragma clang diagnostic pop
-}  // namespace internal
-}  // namespace ndk
diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/UnionWithFd.h b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/UnionWithFd.h
index 986b542..818ff01 100644
--- a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/UnionWithFd.h
+++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/UnionWithFd.h
@@ -1,6 +1,5 @@
 #pragma once
 
-#include <array>
 #include <cassert>
 #include <cstdint>
 #include <memory>
@@ -10,7 +9,6 @@
 #include <utility>
 #include <variant>
 #include <vector>
-#include <android/binder_enums.h>
 #include <android/binder_interface_utils.h>
 #include <android/binder_parcelable_utils.h>
 #include <android/binder_to_string.h>
@@ -31,15 +29,11 @@
   typedef std::false_type fixed_size;
   static const char* descriptor;
 
-  enum class Tag : int32_t {
-    num = 0,
-    pfd = 1,
+  enum Tag : int32_t {
+    num = 0,  // int num;
+    pfd,  // ParcelFileDescriptor pfd;
   };
 
-  // Expose tag symbols for legacy code
-  static const inline Tag num = Tag::num;
-  static const inline Tag pfd = Tag::pfd;
-
   template<typename _Tp>
   static constexpr bool _not_self = !std::is_same_v<std::remove_cv_t<std::remove_reference_t<_Tp>>, UnionWithFd>;
 
@@ -125,33 +119,3 @@
 }  // namespace aidl
 }  // namespace android
 }  // namespace aidl
-namespace aidl {
-namespace android {
-namespace aidl {
-namespace tests {
-[[nodiscard]] static inline std::string toString(UnionWithFd::Tag val) {
-  switch(val) {
-  case UnionWithFd::Tag::num:
-    return "num";
-  case UnionWithFd::Tag::pfd:
-    return "pfd";
-  default:
-    return std::to_string(static_cast<int32_t>(val));
-  }
-}
-}  // namespace tests
-}  // namespace aidl
-}  // namespace android
-}  // namespace aidl
-namespace ndk {
-namespace internal {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wc++17-extensions"
-template <>
-constexpr inline std::array<aidl::android::aidl::tests::UnionWithFd::Tag, 2> enum_values<aidl::android::aidl::tests::UnionWithFd::Tag> = {
-  aidl::android::aidl::tests::UnionWithFd::Tag::num,
-  aidl::android::aidl::tests::UnionWithFd::Tag::pfd,
-};
-#pragma clang diagnostic pop
-}  // namespace internal
-}  // namespace ndk
diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/unions/EnumUnion.h b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/unions/EnumUnion.h
index f52a45e..dc3c3fb 100644
--- a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/unions/EnumUnion.h
+++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/unions/EnumUnion.h
@@ -1,6 +1,5 @@
 #pragma once
 
-#include <array>
 #include <cassert>
 #include <cstdint>
 #include <memory>
@@ -10,7 +9,6 @@
 #include <utility>
 #include <variant>
 #include <vector>
-#include <android/binder_enums.h>
 #include <android/binder_interface_utils.h>
 #include <android/binder_parcelable_utils.h>
 #include <android/binder_to_string.h>
@@ -34,15 +32,11 @@
   typedef std::false_type fixed_size;
   static const char* descriptor;
 
-  enum class Tag : int32_t {
-    intEnum = 0,
-    longEnum = 1,
+  enum Tag : int32_t {
+    intEnum = 0,  // android.aidl.tests.IntEnum intEnum;
+    longEnum,  // android.aidl.tests.LongEnum longEnum;
   };
 
-  // Expose tag symbols for legacy code
-  static const inline Tag intEnum = Tag::intEnum;
-  static const inline Tag longEnum = Tag::longEnum;
-
   template<typename _Tp>
   static constexpr bool _not_self = !std::is_same_v<std::remove_cv_t<std::remove_reference_t<_Tp>>, EnumUnion>;
 
@@ -129,35 +123,3 @@
 }  // namespace aidl
 }  // namespace android
 }  // namespace aidl
-namespace aidl {
-namespace android {
-namespace aidl {
-namespace tests {
-namespace unions {
-[[nodiscard]] static inline std::string toString(EnumUnion::Tag val) {
-  switch(val) {
-  case EnumUnion::Tag::intEnum:
-    return "intEnum";
-  case EnumUnion::Tag::longEnum:
-    return "longEnum";
-  default:
-    return std::to_string(static_cast<int32_t>(val));
-  }
-}
-}  // namespace unions
-}  // namespace tests
-}  // namespace aidl
-}  // namespace android
-}  // namespace aidl
-namespace ndk {
-namespace internal {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wc++17-extensions"
-template <>
-constexpr inline std::array<aidl::android::aidl::tests::unions::EnumUnion::Tag, 2> enum_values<aidl::android::aidl::tests::unions::EnumUnion::Tag> = {
-  aidl::android::aidl::tests::unions::EnumUnion::Tag::intEnum,
-  aidl::android::aidl::tests::unions::EnumUnion::Tag::longEnum,
-};
-#pragma clang diagnostic pop
-}  // namespace internal
-}  // namespace ndk
diff --git a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/unions/UnionInUnion.h b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/unions/UnionInUnion.h
index a41dfbb..147a566 100644
--- a/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/unions/UnionInUnion.h
+++ b/tests/golden_output/aidl-test-interface-ndk-source/gen/include/aidl/android/aidl/tests/unions/UnionInUnion.h
@@ -1,6 +1,5 @@
 #pragma once
 
-#include <array>
 #include <cassert>
 #include <cstdint>
 #include <memory>
@@ -10,7 +9,6 @@
 #include <utility>
 #include <variant>
 #include <vector>
-#include <android/binder_enums.h>
 #include <android/binder_interface_utils.h>
 #include <android/binder_parcelable_utils.h>
 #include <android/binder_to_string.h>
@@ -33,15 +31,11 @@
   typedef std::false_type fixed_size;
   static const char* descriptor;
 
-  enum class Tag : int32_t {
-    first = 0,
-    second = 1,
+  enum Tag : int32_t {
+    first = 0,  // android.aidl.tests.unions.EnumUnion first;
+    second,  // int second;
   };
 
-  // Expose tag symbols for legacy code
-  static const inline Tag first = Tag::first;
-  static const inline Tag second = Tag::second;
-
   template<typename _Tp>
   static constexpr bool _not_self = !std::is_same_v<std::remove_cv_t<std::remove_reference_t<_Tp>>, UnionInUnion>;
 
@@ -128,35 +122,3 @@
 }  // namespace aidl
 }  // namespace android
 }  // namespace aidl
-namespace aidl {
-namespace android {
-namespace aidl {
-namespace tests {
-namespace unions {
-[[nodiscard]] static inline std::string toString(UnionInUnion::Tag val) {
-  switch(val) {
-  case UnionInUnion::Tag::first:
-    return "first";
-  case UnionInUnion::Tag::second:
-    return "second";
-  default:
-    return std::to_string(static_cast<int32_t>(val));
-  }
-}
-}  // namespace unions
-}  // namespace tests
-}  // namespace aidl
-}  // namespace android
-}  // namespace aidl
-namespace ndk {
-namespace internal {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wc++17-extensions"
-template <>
-constexpr inline std::array<aidl::android::aidl::tests::unions::UnionInUnion::Tag, 2> enum_values<aidl::android::aidl::tests::unions::UnionInUnion::Tag> = {
-  aidl::android::aidl::tests::unions::UnionInUnion::Tag::first,
-  aidl::android::aidl::tests::unions::UnionInUnion::Tag::second,
-};
-#pragma clang diagnostic pop
-}  // namespace internal
-}  // namespace ndk
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ArrayOfInterfaces.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ArrayOfInterfaces.rs
index 42b05dc..ee4b1f1 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ArrayOfInterfaces.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ArrayOfInterfaces.rs
@@ -384,18 +384,6 @@
   impl binder::binder_impl::ParcelableMetadata for MyUnion {
     fn get_descriptor() -> &'static str { "android.aidl.tests.ArrayOfInterfaces.MyUnion" }
   }
-  pub mod Tag {
-    #![allow(non_upper_case_globals)]
-    use binder::declare_binder_enum;
-    declare_binder_enum! {
-      Tag : [i32; 4] {
-        iface = 0,
-        nullable_iface = 1,
-        iface_array = 2,
-        nullable_iface_array = 3,
-      }
-    }
-  }
 }
 pub(crate) mod mangled {
  pub use super::ArrayOfInterfaces as _7_android_4_aidl_5_tests_17_ArrayOfInterfaces;
@@ -403,5 +391,4 @@
  pub use super::IMyInterface::IMyInterface as _7_android_4_aidl_5_tests_17_ArrayOfInterfaces_12_IMyInterface;
  pub use super::MyParcelable::MyParcelable as _7_android_4_aidl_5_tests_17_ArrayOfInterfaces_12_MyParcelable;
  pub use super::MyUnion::MyUnion as _7_android_4_aidl_5_tests_17_ArrayOfInterfaces_7_MyUnion;
- pub use super::MyUnion::Tag::Tag as _7_android_4_aidl_5_tests_17_ArrayOfInterfaces_7_MyUnion_3_Tag;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/FixedSize.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/FixedSize.rs
index 2ea4430..ef73f72 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/FixedSize.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/FixedSize.rs
@@ -216,26 +216,9 @@
   impl binder::binder_impl::ParcelableMetadata for FixedUnion {
     fn get_descriptor() -> &'static str { "android.aidl.tests.FixedSize.FixedUnion" }
   }
-  pub mod Tag {
-    #![allow(non_upper_case_globals)]
-    use binder::declare_binder_enum;
-    declare_binder_enum! {
-      Tag : [i8; 8] {
-        booleanValue = 0,
-        byteValue = 1,
-        charValue = 2,
-        intValue = 3,
-        longValue = 4,
-        floatValue = 5,
-        doubleValue = 6,
-        enumValue = 7,
-      }
-    }
-  }
 }
 pub(crate) mod mangled {
  pub use super::FixedSize as _7_android_4_aidl_5_tests_9_FixedSize;
  pub use super::FixedParcelable::FixedParcelable as _7_android_4_aidl_5_tests_9_FixedSize_15_FixedParcelable;
  pub use super::FixedUnion::FixedUnion as _7_android_4_aidl_5_tests_9_FixedSize_10_FixedUnion;
- pub use super::FixedUnion::Tag::Tag as _7_android_4_aidl_5_tests_9_FixedSize_10_FixedUnion_3_Tag;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ITestService.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ITestService.rs
index 36c03d4..9e8fd92 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ITestService.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ITestService.rs
@@ -78,7 +78,6 @@
   fn ReverseNullableIBinderArray(&self, _arg_input: Option<&[Option<binder::SpIBinder>]>, _arg_repeated: &mut Option<Vec<Option<binder::SpIBinder>>>) -> binder::Result<Option<Vec<Option<binder::SpIBinder>>>>;
   fn GetOldNameInterface(&self) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_IOldName>>;
   fn GetNewNameInterface(&self) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_INewName>>;
-  fn GetUnionTags(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_5_Union]) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_5_Union_3_Tag>>;
   fn GetCppJavaTests(&self) -> binder::Result<Option<binder::SpIBinder>>;
   fn getBackendType(&self) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_11_BackendType>;
   fn getDefaultImpl() -> ITestServiceDefaultRef where Self: Sized {
@@ -154,7 +153,6 @@
   fn ReverseNullableIBinderArray<'a>(&'a self, _arg_input: Option<&'a [Option<binder::SpIBinder>]>, _arg_repeated: &'a mut Option<Vec<Option<binder::SpIBinder>>>) -> binder::BoxFuture<'a, binder::Result<Option<Vec<Option<binder::SpIBinder>>>>>;
   fn GetOldNameInterface<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_IOldName>>>;
   fn GetNewNameInterface<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_INewName>>>;
-  fn GetUnionTags<'a>(&'a self, _arg_input: &'a [crate::mangled::_7_android_4_aidl_5_tests_5_Union]) -> binder::BoxFuture<'a, binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_5_Union_3_Tag>>>;
   fn GetCppJavaTests<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<Option<binder::SpIBinder>>>;
   fn getBackendType<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<crate::mangled::_7_android_4_aidl_5_tests_11_BackendType>>;
 }
@@ -225,7 +223,6 @@
   async fn ReverseNullableIBinderArray(&self, _arg_input: Option<&[Option<binder::SpIBinder>]>, _arg_repeated: &mut Option<Vec<Option<binder::SpIBinder>>>) -> binder::Result<Option<Vec<Option<binder::SpIBinder>>>>;
   async fn GetOldNameInterface(&self) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_IOldName>>;
   async fn GetNewNameInterface(&self) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_INewName>>;
-  async fn GetUnionTags(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_5_Union]) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_5_Union_3_Tag>>;
   async fn GetCppJavaTests(&self) -> binder::Result<Option<binder::SpIBinder>>;
   async fn getBackendType(&self) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_11_BackendType>;
 }
@@ -438,9 +435,6 @@
       fn GetNewNameInterface(&self) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_INewName>> {
         self._rt.block_on(self._inner.GetNewNameInterface())
       }
-      fn GetUnionTags(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_5_Union]) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_5_Union_3_Tag>> {
-        self._rt.block_on(self._inner.GetUnionTags(_arg_input))
-      }
       fn GetCppJavaTests(&self) -> binder::Result<Option<binder::SpIBinder>> {
         self._rt.block_on(self._inner.GetCppJavaTests())
       }
@@ -642,9 +636,6 @@
   fn GetNewNameInterface(&self) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_INewName>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
-  fn GetUnionTags(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_5_Union]) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_5_Union_3_Tag>> {
-    Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
-  }
   fn GetCppJavaTests(&self) -> binder::Result<Option<binder::SpIBinder>> {
     Err(binder::StatusCode::UNKNOWN_TRANSACTION.into())
   }
@@ -716,9 +707,8 @@
   pub const ReverseNullableIBinderArray: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 60;
   pub const GetOldNameInterface: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 61;
   pub const GetNewNameInterface: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 62;
-  pub const GetUnionTags: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 63;
-  pub const GetCppJavaTests: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 64;
-  pub const getBackendType: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 65;
+  pub const GetCppJavaTests: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 63;
+  pub const getBackendType: binder::binder_impl::TransactionCode = binder::binder_impl::FIRST_CALL_TRANSACTION + 64;
 }
 pub type ITestServiceDefaultRef = Option<std::sync::Arc<dyn ITestServiceDefault>>;
 use lazy_static::lazy_static;
@@ -1959,24 +1949,6 @@
     let _aidl_return: binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_INewName> = _aidl_reply.read()?;
     Ok(_aidl_return)
   }
-  fn build_parcel_GetUnionTags(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_5_Union]) -> binder::Result<binder::binder_impl::Parcel> {
-    let mut aidl_data = self.binder.prepare_transact()?;
-    aidl_data.mark_sensitive();
-    aidl_data.write(_arg_input)?;
-    Ok(aidl_data)
-  }
-  fn read_response_GetUnionTags(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_5_Union], _aidl_reply: std::result::Result<binder::binder_impl::Parcel, binder::StatusCode>) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_5_Union_3_Tag>> {
-    if let Err(binder::StatusCode::UNKNOWN_TRANSACTION) = _aidl_reply {
-      if let Some(_aidl_default_impl) = <Self as ITestService>::getDefaultImpl() {
-        return _aidl_default_impl.GetUnionTags(_arg_input);
-      }
-    }
-    let _aidl_reply = _aidl_reply?;
-    let _aidl_status: binder::Status = _aidl_reply.read()?;
-    if !_aidl_status.is_ok() { return Err(_aidl_status); }
-    let _aidl_return: Vec<crate::mangled::_7_android_4_aidl_5_tests_5_Union_3_Tag> = _aidl_reply.read()?;
-    Ok(_aidl_return)
-  }
   fn build_parcel_GetCppJavaTests(&self) -> binder::Result<binder::binder_impl::Parcel> {
     let mut aidl_data = self.binder.prepare_transact()?;
     aidl_data.mark_sensitive();
@@ -2328,11 +2300,6 @@
     let _aidl_reply = self.binder.submit_transact(transactions::GetNewNameInterface, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
     self.read_response_GetNewNameInterface(_aidl_reply)
   }
-  fn GetUnionTags(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_5_Union]) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_5_Union_3_Tag>> {
-    let _aidl_data = self.build_parcel_GetUnionTags(_arg_input)?;
-    let _aidl_reply = self.binder.submit_transact(transactions::GetUnionTags, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
-    self.read_response_GetUnionTags(_arg_input, _aidl_reply)
-  }
   fn GetCppJavaTests(&self) -> binder::Result<Option<binder::SpIBinder>> {
     let _aidl_data = self.build_parcel_GetCppJavaTests()?;
     let _aidl_reply = self.binder.submit_transact(transactions::GetCppJavaTests, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL);
@@ -3159,19 +3126,6 @@
       }
     )
   }
-  fn GetUnionTags<'a>(&'a self, _arg_input: &'a [crate::mangled::_7_android_4_aidl_5_tests_5_Union]) -> binder::BoxFuture<'a, binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_5_Union_3_Tag>>> {
-    let _aidl_data = match self.build_parcel_GetUnionTags(_arg_input) {
-      Ok(_aidl_data) => _aidl_data,
-      Err(err) => return Box::pin(std::future::ready(Err(err))),
-    };
-    let binder = self.binder.clone();
-    P::spawn(
-      move || binder.submit_transact(transactions::GetUnionTags, _aidl_data, binder::binder_impl::FLAG_CLEAR_BUF | binder::binder_impl::FLAG_PRIVATE_LOCAL),
-      move |_aidl_reply| async move {
-        self.read_response_GetUnionTags(_arg_input, _aidl_reply)
-      }
-    )
-  }
   fn GetCppJavaTests<'a>(&'a self) -> binder::BoxFuture<'a, binder::Result<Option<binder::SpIBinder>>> {
     let _aidl_data = match self.build_parcel_GetCppJavaTests() {
       Ok(_aidl_data) => _aidl_data,
@@ -3263,7 +3217,6 @@
   fn ReverseNullableIBinderArray(&self, _arg_input: Option<&[Option<binder::SpIBinder>]>, _arg_repeated: &mut Option<Vec<Option<binder::SpIBinder>>>) -> binder::Result<Option<Vec<Option<binder::SpIBinder>>>> { self.0.ReverseNullableIBinderArray(_arg_input, _arg_repeated) }
   fn GetOldNameInterface(&self) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_IOldName>> { self.0.GetOldNameInterface() }
   fn GetNewNameInterface(&self) -> binder::Result<binder::Strong<dyn crate::mangled::_7_android_4_aidl_5_tests_8_INewName>> { self.0.GetNewNameInterface() }
-  fn GetUnionTags(&self, _arg_input: &[crate::mangled::_7_android_4_aidl_5_tests_5_Union]) -> binder::Result<Vec<crate::mangled::_7_android_4_aidl_5_tests_5_Union_3_Tag>> { self.0.GetUnionTags(_arg_input) }
   fn GetCppJavaTests(&self) -> binder::Result<Option<binder::SpIBinder>> { self.0.GetCppJavaTests() }
   fn getBackendType(&self) -> binder::Result<crate::mangled::_7_android_4_aidl_5_tests_11_BackendType> { self.0.getBackendType() }
 }
@@ -4066,18 +4019,6 @@
       }
       Ok(())
     }
-    transactions::GetUnionTags => {
-      let _arg_input: Vec<crate::mangled::_7_android_4_aidl_5_tests_5_Union> = _aidl_data.read()?;
-      let _aidl_return = _aidl_service.GetUnionTags(&_arg_input);
-      match &_aidl_return {
-        Ok(_aidl_return) => {
-          _aidl_reply.write(&binder::Status::from(binder::StatusCode::OK))?;
-          _aidl_reply.write(_aidl_return)?;
-        }
-        Err(_aidl_status) => _aidl_reply.write(_aidl_status)?
-      }
-      Ok(())
-    }
     transactions::GetCppJavaTests => {
       let _aidl_return = _aidl_service.GetCppJavaTests();
       match &_aidl_return {
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ITestService.rs.d b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ITestService.rs.d
index 9786dc1..3f2111f 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ITestService.rs.d
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ITestService.rs.d
@@ -9,6 +9,6 @@
   system/tools/aidl/tests/android/aidl/tests/LongEnum.aidl \
   system/tools/aidl/tests/android/aidl/tests/RecursiveList.aidl \
   system/tools/aidl/tests/android/aidl/tests/StructuredParcelable.aidl \
-  system/tools/aidl/tests/android/aidl/tests/Union.aidl \
   system/tools/aidl/tests/android/aidl/tests/extension/ExtendableParcelable.aidl \
-  system/tools/aidl/tests/android/aidl/tests/ConstantExpressionEnum.aidl
+  system/tools/aidl/tests/android/aidl/tests/ConstantExpressionEnum.aidl \
+  system/tools/aidl/tests/android/aidl/tests/Union.aidl
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ListOfInterfaces.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ListOfInterfaces.rs
index 4f5d5c6..274006e 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ListOfInterfaces.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/ListOfInterfaces.rs
@@ -380,18 +380,6 @@
   impl binder::binder_impl::ParcelableMetadata for MyUnion {
     fn get_descriptor() -> &'static str { "android.aidl.tests.ListOfInterfaces.MyUnion" }
   }
-  pub mod Tag {
-    #![allow(non_upper_case_globals)]
-    use binder::declare_binder_enum;
-    declare_binder_enum! {
-      Tag : [i32; 4] {
-        iface = 0,
-        nullable_iface = 1,
-        iface_list = 2,
-        nullable_iface_list = 3,
-      }
-    }
-  }
 }
 pub(crate) mod mangled {
  pub use super::ListOfInterfaces as _7_android_4_aidl_5_tests_16_ListOfInterfaces;
@@ -399,5 +387,4 @@
  pub use super::IMyInterface::IMyInterface as _7_android_4_aidl_5_tests_16_ListOfInterfaces_12_IMyInterface;
  pub use super::MyParcelable::MyParcelable as _7_android_4_aidl_5_tests_16_ListOfInterfaces_12_MyParcelable;
  pub use super::MyUnion::MyUnion as _7_android_4_aidl_5_tests_16_ListOfInterfaces_7_MyUnion;
- pub use super::MyUnion::Tag::Tag as _7_android_4_aidl_5_tests_16_ListOfInterfaces_7_MyUnion_3_Tag;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/Union.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/Union.rs
index a2f9295..44f1f78 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/Union.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/Union.rs
@@ -98,22 +98,6 @@
 impl binder::binder_impl::ParcelableMetadata for Union {
   fn get_descriptor() -> &'static str { "android.aidl.tests.Union" }
 }
-pub mod Tag {
-  #![allow(non_upper_case_globals)]
-  use binder::declare_binder_enum;
-  declare_binder_enum! {
-    Tag : [i32; 7] {
-      ns = 0,
-      n = 1,
-      m = 2,
-      s = 3,
-      ibinder = 4,
-      ss = 5,
-      be = 6,
-    }
-  }
-}
 pub(crate) mod mangled {
  pub use super::Union as _7_android_4_aidl_5_tests_5_Union;
- pub use super::Tag::Tag as _7_android_4_aidl_5_tests_5_Union_3_Tag;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/UnionWithFd.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/UnionWithFd.rs
index 49f9f16..29af5a3 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/UnionWithFd.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/UnionWithFd.rs
@@ -48,17 +48,6 @@
 impl binder::binder_impl::ParcelableMetadata for UnionWithFd {
   fn get_descriptor() -> &'static str { "android.aidl.tests.UnionWithFd" }
 }
-pub mod Tag {
-  #![allow(non_upper_case_globals)]
-  use binder::declare_binder_enum;
-  declare_binder_enum! {
-    Tag : [i32; 2] {
-      num = 0,
-      pfd = 1,
-    }
-  }
-}
 pub(crate) mod mangled {
  pub use super::UnionWithFd as _7_android_4_aidl_5_tests_11_UnionWithFd;
- pub use super::Tag::Tag as _7_android_4_aidl_5_tests_11_UnionWithFd_3_Tag;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/unions/EnumUnion.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/unions/EnumUnion.rs
index 4d5fe95..bf142f7 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/unions/EnumUnion.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/unions/EnumUnion.rs
@@ -47,17 +47,6 @@
 impl binder::binder_impl::ParcelableMetadata for EnumUnion {
   fn get_descriptor() -> &'static str { "android.aidl.tests.unions.EnumUnion" }
 }
-pub mod Tag {
-  #![allow(non_upper_case_globals)]
-  use binder::declare_binder_enum;
-  declare_binder_enum! {
-    Tag : [i32; 2] {
-      intEnum = 0,
-      longEnum = 1,
-    }
-  }
-}
 pub(crate) mod mangled {
  pub use super::EnumUnion as _7_android_4_aidl_5_tests_6_unions_9_EnumUnion;
- pub use super::Tag::Tag as _7_android_4_aidl_5_tests_6_unions_9_EnumUnion_3_Tag;
 }
diff --git a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/unions/UnionInUnion.rs b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/unions/UnionInUnion.rs
index 511f44c..fd2d68d 100644
--- a/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/unions/UnionInUnion.rs
+++ b/tests/golden_output/aidl-test-interface-rust-source/gen/android/aidl/tests/unions/UnionInUnion.rs
@@ -47,17 +47,6 @@
 impl binder::binder_impl::ParcelableMetadata for UnionInUnion {
   fn get_descriptor() -> &'static str { "android.aidl.tests.unions.UnionInUnion" }
 }
-pub mod Tag {
-  #![allow(non_upper_case_globals)]
-  use binder::declare_binder_enum;
-  declare_binder_enum! {
-    Tag : [i32; 2] {
-      first = 0,
-      second = 1,
-    }
-  }
-}
 pub(crate) mod mangled {
  pub use super::UnionInUnion as _7_android_4_aidl_5_tests_6_unions_12_UnionInUnion;
- pub use super::Tag::Tag as _7_android_4_aidl_5_tests_6_unions_12_UnionInUnion_3_Tag;
 }
diff --git a/tests/golden_output/aidl-test-versioned-interface-V1-cpp-source/gen/include/android/aidl/versioned/tests/BazUnion.h b/tests/golden_output/aidl-test-versioned-interface-V1-cpp-source/gen/include/android/aidl/versioned/tests/BazUnion.h
index 25e0d16..c8ba05b 100644
--- a/tests/golden_output/aidl-test-versioned-interface-V1-cpp-source/gen/include/android/aidl/versioned/tests/BazUnion.h
+++ b/tests/golden_output/aidl-test-versioned-interface-V1-cpp-source/gen/include/android/aidl/versioned/tests/BazUnion.h
@@ -1,13 +1,10 @@
 #pragma once
 
 #include <android/binder_to_string.h>
-#include <array>
-#include <binder/Enums.h>
 #include <binder/Parcel.h>
 #include <binder/Status.h>
 #include <cassert>
 #include <cstdint>
-#include <string>
 #include <type_traits>
 #include <utility>
 #include <utils/String16.h>
@@ -23,11 +20,9 @@
 namespace tests {
 class BazUnion : public ::android::Parcelable {
 public:
-  enum class Tag : int32_t {
-    intNum = 0,
+  enum Tag : int32_t {
+    intNum = 0,  // int intNum;
   };
-  // Expose tag symbols for legacy code
-  static const inline Tag intNum = Tag::intNum;
 
   template<typename _Tp>
   static constexpr bool _not_self = !std::is_same_v<std::remove_cv_t<std::remove_reference_t<_Tp>>, BazUnion>;
@@ -115,30 +110,3 @@
 }  // namespace versioned
 }  // namespace aidl
 }  // namespace android
-namespace android {
-namespace aidl {
-namespace versioned {
-namespace tests {
-[[nodiscard]] static inline std::string toString(BazUnion::Tag val) {
-  switch(val) {
-  case BazUnion::Tag::intNum:
-    return "intNum";
-  default:
-    return std::to_string(static_cast<int32_t>(val));
-  }
-}
-}  // namespace tests
-}  // namespace versioned
-}  // namespace aidl
-}  // namespace android
-namespace android {
-namespace internal {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wc++17-extensions"
-template <>
-constexpr inline std::array<::android::aidl::versioned::tests::BazUnion::Tag, 1> enum_values<::android::aidl::versioned::tests::BazUnion::Tag> = {
-  ::android::aidl::versioned::tests::BazUnion::Tag::intNum,
-};
-#pragma clang diagnostic pop
-}  // namespace internal
-}  // namespace android
diff --git a/tests/golden_output/aidl-test-versioned-interface-V1-java-source/gen/android/aidl/versioned/tests/BazUnion.java b/tests/golden_output/aidl-test-versioned-interface-V1-java-source/gen/android/aidl/versioned/tests/BazUnion.java
index 3f0e3d7..29da9c2 100644
--- a/tests/golden_output/aidl-test-versioned-interface-V1-java-source/gen/android/aidl/versioned/tests/BazUnion.java
+++ b/tests/golden_output/aidl-test-versioned-interface-V1-java-source/gen/android/aidl/versioned/tests/BazUnion.java
@@ -102,7 +102,4 @@
     this._tag = _tag;
     this._value = _value;
   }
-  public static @interface Tag {
-    public static final int intNum = 0;
-  }
 }
diff --git a/tests/golden_output/aidl-test-versioned-interface-V1-ndk-source/gen/include/aidl/android/aidl/versioned/tests/BazUnion.h b/tests/golden_output/aidl-test-versioned-interface-V1-ndk-source/gen/include/aidl/android/aidl/versioned/tests/BazUnion.h
index 9218a0b..24a8014 100644
--- a/tests/golden_output/aidl-test-versioned-interface-V1-ndk-source/gen/include/aidl/android/aidl/versioned/tests/BazUnion.h
+++ b/tests/golden_output/aidl-test-versioned-interface-V1-ndk-source/gen/include/aidl/android/aidl/versioned/tests/BazUnion.h
@@ -1,6 +1,5 @@
 #pragma once
 
-#include <array>
 #include <cassert>
 #include <cstdint>
 #include <memory>
@@ -10,7 +9,6 @@
 #include <utility>
 #include <variant>
 #include <vector>
-#include <android/binder_enums.h>
 #include <android/binder_interface_utils.h>
 #include <android/binder_parcelable_utils.h>
 #include <android/binder_to_string.h>
@@ -32,13 +30,10 @@
   typedef std::false_type fixed_size;
   static const char* descriptor;
 
-  enum class Tag : int32_t {
-    intNum = 0,
+  enum Tag : int32_t {
+    intNum = 0,  // int intNum;
   };
 
-  // Expose tag symbols for legacy code
-  static const inline Tag intNum = Tag::intNum;
-
   template<typename _Tp>
   static constexpr bool _not_self = !std::is_same_v<std::remove_cv_t<std::remove_reference_t<_Tp>>, BazUnion>;
 
@@ -124,32 +119,3 @@
 }  // namespace aidl
 }  // namespace android
 }  // namespace aidl
-namespace aidl {
-namespace android {
-namespace aidl {
-namespace versioned {
-namespace tests {
-[[nodiscard]] static inline std::string toString(BazUnion::Tag val) {
-  switch(val) {
-  case BazUnion::Tag::intNum:
-    return "intNum";
-  default:
-    return std::to_string(static_cast<int32_t>(val));
-  }
-}
-}  // namespace tests
-}  // namespace versioned
-}  // namespace aidl
-}  // namespace android
-}  // namespace aidl
-namespace ndk {
-namespace internal {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wc++17-extensions"
-template <>
-constexpr inline std::array<aidl::android::aidl::versioned::tests::BazUnion::Tag, 1> enum_values<aidl::android::aidl::versioned::tests::BazUnion::Tag> = {
-  aidl::android::aidl::versioned::tests::BazUnion::Tag::intNum,
-};
-#pragma clang diagnostic pop
-}  // namespace internal
-}  // namespace ndk
diff --git a/tests/golden_output/aidl-test-versioned-interface-V1-rust-source/gen/android/aidl/versioned/tests/BazUnion.rs b/tests/golden_output/aidl-test-versioned-interface-V1-rust-source/gen/android/aidl/versioned/tests/BazUnion.rs
index b60ff88..5e30930 100644
--- a/tests/golden_output/aidl-test-versioned-interface-V1-rust-source/gen/android/aidl/versioned/tests/BazUnion.rs
+++ b/tests/golden_output/aidl-test-versioned-interface-V1-rust-source/gen/android/aidl/versioned/tests/BazUnion.rs
@@ -37,16 +37,6 @@
 impl binder::binder_impl::ParcelableMetadata for BazUnion {
   fn get_descriptor() -> &'static str { "android.aidl.versioned.tests.BazUnion" }
 }
-pub mod Tag {
-  #![allow(non_upper_case_globals)]
-  use binder::declare_binder_enum;
-  declare_binder_enum! {
-    Tag : [i32; 1] {
-      intNum = 0,
-    }
-  }
-}
 pub(crate) mod mangled {
  pub use super::BazUnion as _7_android_4_aidl_9_versioned_5_tests_8_BazUnion;
- pub use super::Tag::Tag as _7_android_4_aidl_9_versioned_5_tests_8_BazUnion_3_Tag;
 }
diff --git a/tests/golden_output/aidl_test_loggable_interface-cpp-source/gen/include/android/aidl/loggable/Union.h b/tests/golden_output/aidl_test_loggable_interface-cpp-source/gen/include/android/aidl/loggable/Union.h
index 9b67e56..fbaf018 100644
--- a/tests/golden_output/aidl_test_loggable_interface-cpp-source/gen/include/android/aidl/loggable/Union.h
+++ b/tests/golden_output/aidl_test_loggable_interface-cpp-source/gen/include/android/aidl/loggable/Union.h
@@ -1,8 +1,6 @@
 #pragma once
 
 #include <android/binder_to_string.h>
-#include <array>
-#include <binder/Enums.h>
 #include <binder/Parcel.h>
 #include <binder/Status.h>
 #include <cassert>
@@ -22,13 +20,10 @@
 namespace loggable {
 class Union : public ::android::Parcelable {
 public:
-  enum class Tag : int32_t {
-    num = 0,
-    str = 1,
+  enum Tag : int32_t {
+    num = 0,  // int num;
+    str,  // String str;
   };
-  // Expose tag symbols for legacy code
-  static const inline Tag num = Tag::num;
-  static const inline Tag str = Tag::str;
 
   template<typename _Tp>
   static constexpr bool _not_self = !std::is_same_v<std::remove_cv_t<std::remove_reference_t<_Tp>>, Union>;
@@ -116,31 +111,3 @@
 }  // namespace loggable
 }  // namespace aidl
 }  // namespace android
-namespace android {
-namespace aidl {
-namespace loggable {
-[[nodiscard]] static inline std::string toString(Union::Tag val) {
-  switch(val) {
-  case Union::Tag::num:
-    return "num";
-  case Union::Tag::str:
-    return "str";
-  default:
-    return std::to_string(static_cast<int32_t>(val));
-  }
-}
-}  // namespace loggable
-}  // namespace aidl
-}  // namespace android
-namespace android {
-namespace internal {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wc++17-extensions"
-template <>
-constexpr inline std::array<::android::aidl::loggable::Union::Tag, 2> enum_values<::android::aidl::loggable::Union::Tag> = {
-  ::android::aidl::loggable::Union::Tag::num,
-  ::android::aidl::loggable::Union::Tag::str,
-};
-#pragma clang diagnostic pop
-}  // namespace internal
-}  // namespace android
diff --git a/tests/golden_output/aidl_test_loggable_interface-java-source/gen/android/aidl/loggable/Union.java b/tests/golden_output/aidl_test_loggable_interface-java-source/gen/android/aidl/loggable/Union.java
index f85770f..1751db3 100644
--- a/tests/golden_output/aidl_test_loggable_interface-java-source/gen/android/aidl/loggable/Union.java
+++ b/tests/golden_output/aidl_test_loggable_interface-java-source/gen/android/aidl/loggable/Union.java
@@ -127,8 +127,4 @@
     this._tag = _tag;
     this._value = _value;
   }
-  public static @interface Tag {
-    public static final int num = 0;
-    public static final int str = 1;
-  }
 }
diff --git a/tests/golden_output/aidl_test_loggable_interface-ndk-source/gen/include/aidl/android/aidl/loggable/Union.h b/tests/golden_output/aidl_test_loggable_interface-ndk-source/gen/include/aidl/android/aidl/loggable/Union.h
index ef0532f..2969134 100644
--- a/tests/golden_output/aidl_test_loggable_interface-ndk-source/gen/include/aidl/android/aidl/loggable/Union.h
+++ b/tests/golden_output/aidl_test_loggable_interface-ndk-source/gen/include/aidl/android/aidl/loggable/Union.h
@@ -1,6 +1,5 @@
 #pragma once
 
-#include <array>
 #include <cassert>
 #include <cstdint>
 #include <memory>
@@ -10,7 +9,6 @@
 #include <utility>
 #include <variant>
 #include <vector>
-#include <android/binder_enums.h>
 #include <android/binder_interface_utils.h>
 #include <android/binder_parcelable_utils.h>
 #include <android/binder_to_string.h>
@@ -31,15 +29,11 @@
   typedef std::false_type fixed_size;
   static const char* descriptor;
 
-  enum class Tag : int32_t {
-    num = 0,
-    str = 1,
+  enum Tag : int32_t {
+    num = 0,  // int num;
+    str,  // String str;
   };
 
-  // Expose tag symbols for legacy code
-  static const inline Tag num = Tag::num;
-  static const inline Tag str = Tag::str;
-
   template<typename _Tp>
   static constexpr bool _not_self = !std::is_same_v<std::remove_cv_t<std::remove_reference_t<_Tp>>, Union>;
 
@@ -125,33 +119,3 @@
 }  // namespace aidl
 }  // namespace android
 }  // namespace aidl
-namespace aidl {
-namespace android {
-namespace aidl {
-namespace loggable {
-[[nodiscard]] static inline std::string toString(Union::Tag val) {
-  switch(val) {
-  case Union::Tag::num:
-    return "num";
-  case Union::Tag::str:
-    return "str";
-  default:
-    return std::to_string(static_cast<int32_t>(val));
-  }
-}
-}  // namespace loggable
-}  // namespace aidl
-}  // namespace android
-}  // namespace aidl
-namespace ndk {
-namespace internal {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wc++17-extensions"
-template <>
-constexpr inline std::array<aidl::android::aidl::loggable::Union::Tag, 2> enum_values<aidl::android::aidl::loggable::Union::Tag> = {
-  aidl::android::aidl::loggable::Union::Tag::num,
-  aidl::android::aidl::loggable::Union::Tag::str,
-};
-#pragma clang diagnostic pop
-}  // namespace internal
-}  // namespace ndk
diff --git a/tests/java/src/android/aidl/service/TestServiceServer.java b/tests/java/src/android/aidl/service/TestServiceServer.java
index 51a7520..ad98416 100644
--- a/tests/java/src/android/aidl/service/TestServiceServer.java
+++ b/tests/java/src/android/aidl/service/TestServiceServer.java
@@ -592,15 +592,6 @@
     return new MyNewName();
   }
 
-  @Override
-  public int[] GetUnionTags(Union[] input) throws RemoteException {
-    int[] tags = new int[input.length];
-    for (int i = 0; i < input.length; i++) {
-      tags[i] = input[i].getTag();
-    }
-    return tags;
-  }
-
   class MyCppJavaTests extends ICppJavaTests.Stub {
     @Override
     public BadParcelable RepeatBadParcelable(BadParcelable input) throws RemoteException {
diff --git a/tests/java/src/android/aidl/tests/TestServiceClient.java b/tests/java/src/android/aidl/tests/TestServiceClient.java
index 6dfacc9..e9140cc 100644
--- a/tests/java/src/android/aidl/tests/TestServiceClient.java
+++ b/tests/java/src/android/aidl/tests/TestServiceClient.java
@@ -956,13 +956,6 @@
     }
 
     @Test
-    public void testGetUnionTags() throws RemoteException {
-      assertArrayEquals(new int[] {}, service.GetUnionTags(new Union[] {}));
-      assertArrayEquals(new int[] {Union.n, Union.ns},
-          service.GetUnionTags(new Union[] {Union.n(0), Union.ns(new int[] {})}));
-    }
-
-    @Test
     public void testDescribeContents() throws Exception {
       CompilerChecks cc = new CompilerChecks();
       cc.pfd_array = new ParcelFileDescriptor[] {null, null, null};
diff --git a/tests/rust/test_client.rs b/tests/rust/test_client.rs
index 81315c9..35c3af3 100644
--- a/tests/rust/test_client.rs
+++ b/tests/rust/test_client.rs
@@ -822,15 +822,6 @@
 }
 
 #[test]
-fn test_get_union_tags() {
-    let service = get_test_service();
-    let result = service.GetUnionTags(&[]);
-    assert_eq!(result, Ok(vec![]));
-    let result = service.GetUnionTags(&[Union::Union::N(0), Union::Union::Ns(vec![])]);
-    assert_eq!(result, Ok(vec![Union::Tag::Tag::n, Union::Tag::Tag::ns]));
-}
-
-#[test]
 fn test_unions() {
     assert_eq!(Union::Union::default(), Union::Union::Ns(vec![]));
     assert_eq!(EnumUnion::default(), EnumUnion::IntEnum(IntEnum::FOO));
diff --git a/tests/rust/test_service.rs b/tests/rust/test_service.rs
index 3a5c09c..1d3c092 100644
--- a/tests/rust/test_service.rs
+++ b/tests/rust/test_service.rs
@@ -441,21 +441,6 @@
         Ok(INewName::BnNewName::new_binder(NewName, BinderFeatures::default()))
     }
 
-    fn GetUnionTags(&self, input: &[Union::Union]) -> binder::Result<Vec<Union::Tag::Tag>> {
-        Ok(input
-            .iter()
-            .map(|u| match u {
-                Union::Union::Ns(_) => Union::Tag::Tag::ns,
-                Union::Union::N(_) => Union::Tag::Tag::n,
-                Union::Union::M(_) => Union::Tag::Tag::m,
-                Union::Union::S(_) => Union::Tag::Tag::s,
-                Union::Union::Ibinder(_) => Union::Tag::Tag::ibinder,
-                Union::Union::Ss(_) => Union::Tag::Tag::ss,
-                Union::Union::Be(_) => Union::Tag::Tag::be,
-            })
-            .collect::<Vec<_>>())
-    }
-
     fn GetCppJavaTests(&self) -> binder::Result<Option<SpIBinder>> {
         Ok(None)
     }
diff --git a/tests/rust/test_service_async.rs b/tests/rust/test_service_async.rs
index cfc0f28..f6cd039 100644
--- a/tests/rust/test_service_async.rs
+++ b/tests/rust/test_service_async.rs
@@ -483,21 +483,6 @@
         Ok(INewName::BnNewName::new_async_binder(NewName, rt(), BinderFeatures::default()))
     }
 
-    async fn GetUnionTags(&self, input: &[Union::Union]) -> binder::Result<Vec<Union::Tag::Tag>> {
-        Ok(input
-            .iter()
-            .map(|u| match u {
-                Union::Union::Ns(_) => Union::Tag::Tag::ns,
-                Union::Union::N(_) => Union::Tag::Tag::n,
-                Union::Union::M(_) => Union::Tag::Tag::m,
-                Union::Union::S(_) => Union::Tag::Tag::s,
-                Union::Union::Ibinder(_) => Union::Tag::Tag::ibinder,
-                Union::Union::Ss(_) => Union::Tag::Tag::ss,
-                Union::Union::Be(_) => Union::Tag::Tag::be,
-            })
-            .collect::<Vec<_>>())
-    }
-
     async fn GetCppJavaTests(&self) -> binder::Result<Option<SpIBinder>> {
         Ok(None)
     }
