[clang] [clang][ssaf] Remove NestedBuildNamespace (PR #208291)

Aviral Goel via cfe-commits cfe-commits at lists.llvm.org
Wed Jul 8 11:52:04 PDT 2026


https://github.com/aviralg created https://github.com/llvm/llvm-project/pull/208291

None

>From 2e35826ac1bd8214168e0e39a51fe1ff181befb5 Mon Sep 17 00:00:00 2001
From: Aviral Goel <goel.aviral at gmail.com>
Date: Thu, 2 Jul 2026 20:40:16 -0700
Subject: [PATCH 1/2] Remove BuildNamespaceKind

---
 .../Core/Model/BuildNamespace.h               |  33 +-----
 .../Core/Model/PrivateFieldNames.def          |   1 -
 .../Core/Support/FormatProviders.h            |   7 --
 .../Core/Model/BuildNamespace.cpp             |  27 +----
 .../Core/ModelStringConversions.h             |  36 ------
 .../JSONFormat/JSONFormatImpl.cpp             |  40 +------
 .../Serialization/JSONFormat/JSONFormatImpl.h |  13 ---
 .../JSONFormat/MultiArchStaticLibrary.cpp     |  12 --
 .../JSONFormat/StaticLibrary.cpp              |  10 --
 .../TUSummaryExtractorFrontendAction.cpp      |   4 +-
 .../Inputs/tu-summary-bad-array.json          |   1 -
 .../Inputs/tu-summary-bad-summary.json        |   1 -
 .../PointerFlow/Inputs/tu-summary-no-key.json |   1 -
 .../PointerFlow/Inputs/tu-summary.json        |   1 -
 .../Inputs/wpa-result-bad-edges.json          |   1 -
 .../Inputs/wpa-result-odd-count.json          |   1 -
 .../PointerFlow/Inputs/wpa-result.json        |   3 -
 .../Inputs/tu-summary-bad-element.json        |   1 -
 .../Inputs/tu-summary-bad-ptr-level.json      |   1 -
 .../Inputs/tu-summary-no-key.json             |   1 -
 .../UnsafeBufferUsage/Inputs/tu-summary.json  |   1 -
 .../Inputs/wpa-result-bad-epls.json           |   1 -
 .../Inputs/wpa-result-odd-count.json          |   1 -
 .../UnsafeBufferUsage/Inputs/wpa-result.json  |   3 -
 .../ssaf-analyzer/Inputs/lu-tags-only.json    |   2 -
 .../Scalable/ssaf-analyzer/Inputs/lu.json     |   4 -
 .../Scalable/ssaf-analyzer/Outputs/all.json   |   3 -
 .../Scalable/ssaf-analyzer/Outputs/both.json  |   3 -
 .../Scalable/ssaf-analyzer/Outputs/pairs.json |   3 -
 .../Scalable/ssaf-analyzer/Outputs/tags.json  |   3 -
 .../Artifact/Inputs/rt-lu-empty.json          |   1 -
 .../rt-multi-arch-shared-library-empty.json   |   1 -
 ...rt-multi-arch-shared-library-nonempty.json |   5 -
 .../rt-multi-arch-static-library-empty.json   |   2 -
 ...rt-multi-arch-static-library-nonempty.json |   4 -
 .../Inputs/rt-static-library-empty.json       |   1 -
 .../Artifact/Inputs/rt-tu-empty.json          |   1 -
 .../invalid-direct-callee-element.json        |   1 -
 .../CallGraph/invalid-direct-callee-id.json   |   1 -
 .../Inputs/CallGraph/missing-def-col.json     |   1 -
 .../Inputs/CallGraph/missing-def-file.json    |   1 -
 .../Inputs/CallGraph/missing-def-line.json    |   1 -
 .../Inputs/CallGraph/missing-def.json         |   1 -
 .../CallGraph/missing-direct-callees.json     |   1 -
 .../Inputs/CallGraph/missing-pretty-name.json |   1 -
 .../CallGraph/missing-virtual-callees.json    |   1 -
 .../Inputs/data-element-not-object.json       |   3 +-
 .../Inputs/data-entry-missing-data.json       |   3 +-
 .../data-entry-missing-summary-name.json      |   3 +-
 .../LUSummary/Inputs/data-not-array.json      |   3 +-
 .../duplicate-entity-id-in-data-map.json      |   5 +-
 .../LUSummary/Inputs/duplicate-entity.json    |   7 +-
 .../Inputs/duplicate-summary-name.json        |   3 +-
 .../entity-data-element-not-object.json       |   3 +-
 .../Inputs/entity-data-missing-entity-id.json |   3 +-
 .../entity-data-missing-entity-summary.json   |   3 +-
 .../Inputs/entity-id-not-uint64.json          |   3 +-
 .../Inputs/entity-name-missing-namespace.json |   3 +-
 .../Inputs/entity-name-missing-suffix.json    |   4 +-
 .../Inputs/entity-name-missing-usr.json       |   5 +-
 .../Inputs/id-table-element-not-object.json   |   3 +-
 .../Inputs/id-table-entry-id-not-uint64.json  |   5 +-
 .../Inputs/id-table-entry-missing-id.json     |   5 +-
 .../Inputs/id-table-entry-missing-name.json   |   3 +-
 .../LUSummary/Inputs/id-table-not-array.json  |   3 +-
 .../Inputs/linkage-table-duplicate-id.json    |   5 +-
 .../linkage-table-element-not-object.json     |   3 +-
 .../linkage-table-entry-id-not-uint64.json    |   3 +-
 ...kage-table-entry-linkage-invalid-type.json |   3 +-
 ...kage-table-entry-linkage-missing-type.json |   3 +-
 .../linkage-table-entry-missing-id.json       |   3 +-
 .../linkage-table-entry-missing-linkage.json  |   3 +-
 .../Inputs/linkage-table-extra-id.json        |   3 +-
 .../Inputs/linkage-table-missing-id.json      |   5 +-
 .../Inputs/linkage-table-not-array.json       |   3 +-
 .../lu-namespace-element-invalid-kind.json    |  13 ---
 .../lu-namespace-element-missing-kind.json    |  12 --
 .../lu-namespace-element-missing-name.json    |   4 +-
 .../Inputs/lu-namespace-not-array.json        |   3 +-
 .../LUSummary/Inputs/mismatched-type.json     |   1 -
 .../LUSummary/Inputs/missing-data.json        |   3 +-
 .../LUSummary/Inputs/missing-id-table.json    |   3 +-
 .../Inputs/missing-linkage-table.json         |   3 +-
 .../Inputs/missing-target-triple.json         |   1 -
 .../LUSummary/Inputs/missing-type.json        |   1 -
 .../namespace-element-invalid-kind.json       |  34 ------
 .../namespace-element-missing-kind.json       |  33 ------
 .../namespace-element-missing-name.json       |   7 +-
 .../Inputs/namespace-element-not-object.json  |   3 +-
 .../Inputs/not-normalized-target-triple.json  |   1 -
 .../Inputs/pairs-element-not-object.json      |   3 +-
 .../Inputs/pairs-invalid-first-field.json     |   3 +-
 .../pairs-invalid-pairs-field-type.json       |   3 +-
 .../Inputs/pairs-invalid-second-field.json    |   3 +-
 .../Inputs/pairs-missing-first-field.json     |   3 +-
 .../Inputs/pairs-missing-pairs-field.json     |   3 +-
 .../Inputs/pairs-missing-second-field.json    |   3 +-
 .../read-entity-summary-no-format-info.json   |   3 +-
 .../LUSummary/Inputs/rt-empty-data-entry.json |   1 -
 .../LUSummary/Inputs/rt-empty-namespace.json  |   1 -
 .../LUSummary/Inputs/rt-linkage-external.json |   2 -
 .../LUSummary/Inputs/rt-linkage-internal.json |   2 -
 .../LUSummary/Inputs/rt-linkage-multiple.json |   4 -
 .../LUSummary/Inputs/rt-linkage-none.json     |   2 -
 .../rt-multiple-namespace-elements.json       |   3 -
 .../Inputs/rt-single-namespace-element.json   |   1 -
 .../Inputs/rt-two-summary-types.json          |   6 -
 .../ssaf-format/LUSummary/id-table.test       |  25 -----
 .../ssaf-format/LUSummary/permissions.test    |   2 +-
 .../ssaf-format/LUSummary/top-level.test      |  19 ----
 .../Inputs/duplicate-target-triple.json       |   3 -
 .../Inputs/member-empty-lu-namespace.json     |   1 -
 .../Inputs/member-inner-error.json            |   1 -
 .../Inputs/member-mismatched-type.json        |   2 -
 .../Inputs/member-missing-type.json           |   2 -
 .../Inputs/member-namespace-mismatch.json     |   2 -
 .../Inputs/member-not-object.json             |   1 -
 .../Inputs/members-not-array.json             |   1 -
 .../Inputs/mismatched-type.json               |   1 -
 .../Inputs/missing-members.json               |   1 -
 .../Inputs/missing-type.json                  |   1 -
 .../Inputs/rt-empty-members.json              |   1 -
 .../Inputs/rt-multiple-members.json           |   3 -
 .../Inputs/rt-nonempty-members.json           |   5 -
 .../Inputs/rt-single-member.json              |   2 -
 .../Inputs/rt-three-members.json              |   4 -
 .../Inputs/unsorted-members-input.json        |   3 -
 .../Inputs/unsorted-three-members-input.json  |   4 -
 .../Inputs/duplicate-target-triple.json       |   3 -
 .../Inputs/member-inner-error.json            |   1 -
 .../Inputs/member-mismatched-type.json        |   2 -
 .../Inputs/member-missing-type.json           |   2 -
 .../Inputs/member-namespace-mismatch.json     |   2 -
 .../Inputs/member-not-object.json             |   1 -
 .../Inputs/members-not-array.json             |   1 -
 .../Inputs/mismatched-type.json               |   1 -
 .../Inputs/missing-members.json               |   1 -
 .../Inputs/missing-type.json                  |   1 -
 .../Inputs/namespace-wrong-kind.json          |   8 --
 .../Inputs/rt-empty-members.json              |   1 -
 .../Inputs/rt-multiple-members.json           |   3 -
 .../Inputs/rt-nonempty-members.json           |   5 -
 .../Inputs/rt-single-member.json              |   2 -
 .../Inputs/rt-three-members.json              |   4 -
 .../Inputs/unsorted-members-input.json        |   3 -
 .../Inputs/unsorted-three-members-input.json  |   4 -
 .../MultiArchStaticLibrary/top-level.test     |   6 -
 .../Inputs/duplicate-member.json              |   3 -
 .../Inputs/member-inner-error.json            |   1 -
 .../Inputs/member-mismatched-type.json        |   1 -
 .../Inputs/member-missing-type.json           |   2 -
 .../Inputs/member-not-object.json             |   1 -
 .../Inputs/member-triple-mismatch.json        |   2 -
 .../Inputs/members-not-array.json             |   1 -
 .../StaticLibrary/Inputs/mismatched-type.json |   1 -
 .../StaticLibrary/Inputs/missing-members.json |   1 -
 .../Inputs/missing-target-triple.json         |   1 -
 .../StaticLibrary/Inputs/missing-type.json    |   1 -
 .../Inputs/namespace-invalid-kind.json        |   9 --
 .../Inputs/namespace-missing-kind.json        |   8 --
 .../Inputs/namespace-missing-name.json        |   4 +-
 .../Inputs/namespace-wrong-kind.json          |   9 --
 .../Inputs/not-normalized-target-triple.json  |   1 -
 .../StaticLibrary/Inputs/rt-empty.json        |   1 -
 .../Inputs/rt-multiple-members.json           |   4 -
 .../Inputs/rt-single-member.json              |   2 -
 .../Inputs/unsorted-members-input.json        |   4 -
 .../ssaf-format/StaticLibrary/top-level.test  |  23 +---
 .../Inputs/data-element-not-object.json       |   1 -
 .../Inputs/data-entry-missing-data.json       |   1 -
 .../data-entry-missing-summary-name.json      |   1 -
 .../TUSummary/Inputs/data-not-array.json      |   1 -
 .../duplicate-entity-id-in-data-map.json      |   1 -
 .../TUSummary/Inputs/duplicate-entity.json    |   5 +-
 .../Inputs/duplicate-summary-name.json        |   1 -
 .../entity-data-element-not-object.json       |   1 -
 .../Inputs/entity-data-missing-entity-id.json |   1 -
 .../entity-data-missing-entity-summary.json   |   1 -
 .../Inputs/entity-id-not-uint64.json          |   1 -
 .../Inputs/entity-name-missing-suffix.json    |   3 +-
 .../Inputs/entity-name-missing-usr.json       |   3 +-
 .../Inputs/id-table-element-not-object.json   |   1 -
 .../Inputs/id-table-entry-id-not-uint64.json  |   1 -
 .../Inputs/id-table-entry-missing-id.json     |   1 -
 .../Inputs/id-table-entry-missing-name.json   |   3 +-
 .../TUSummary/Inputs/id-table-not-array.json  |   1 -
 .../TUSummary/Inputs/invalid-kind.json        |  11 --
 .../Inputs/linkage-table-duplicate-id.json    |   5 +-
 .../linkage-table-element-not-object.json     |   1 -
 .../linkage-table-entry-id-not-uint64.json    |   3 +-
 ...kage-table-entry-linkage-invalid-type.json |   3 +-
 ...kage-table-entry-linkage-missing-type.json |   1 -
 .../linkage-table-entry-missing-id.json       |   3 +-
 .../linkage-table-entry-missing-linkage.json  |   1 -
 .../Inputs/linkage-table-extra-id.json        |   3 +-
 .../Inputs/linkage-table-missing-id.json      |   1 -
 .../Inputs/linkage-table-not-array.json       |   1 -
 .../TUSummary/Inputs/mismatched-type.json     |   1 -
 .../TUSummary/Inputs/missing-data.json        |   1 -
 .../TUSummary/Inputs/missing-id-table.json    |   1 -
 .../TUSummary/Inputs/missing-kind.json        |  10 --
 .../Inputs/missing-linkage-table.json         |   1 -
 .../TUSummary/Inputs/missing-name.json        |   4 +-
 .../Inputs/missing-target-triple.json         |   1 -
 .../TUSummary/Inputs/missing-type.json        |   1 -
 .../Inputs/not-normalized-target-triple.json  |   1 -
 .../Inputs/pairs-element-not-object.json      |   1 -
 .../Inputs/pairs-invalid-first-field.json     |   1 -
 .../pairs-invalid-pairs-field-type.json       |   1 -
 .../Inputs/pairs-invalid-second-field.json    |   1 -
 .../Inputs/pairs-missing-first-field.json     |   1 -
 .../Inputs/pairs-missing-pairs-field.json     |   1 -
 .../Inputs/pairs-missing-second-field.json    |   1 -
 .../read-entity-summary-no-format-info.json   |   1 -
 .../TUSummary/Inputs/rt-empty-data-entry.json |   1 -
 .../TUSummary/Inputs/rt-empty.json            |   1 -
 .../TUSummary/Inputs/rt-link-unit.json        |   1 -
 .../TUSummary/Inputs/rt-linkage-external.json |   1 -
 .../TUSummary/Inputs/rt-linkage-internal.json |   1 -
 .../TUSummary/Inputs/rt-linkage-multiple.json |   1 -
 .../TUSummary/Inputs/rt-linkage-none.json     |   1 -
 .../Inputs/rt-two-summary-types.json          |   1 -
 .../ssaf-format/TUSummary/top-level.test      |  21 ----
 .../Inputs/pairs-result-bad-count.json        |   2 -
 .../Inputs/pairs-result-entry-not-object.json |   1 -
 .../pairs-result-missing-entity-id.json       |   1 -
 .../WPASuite/Inputs/rt-all-results.json       |   3 -
 .../WPASuite/Inputs/rt-multiple-results.json  |   1 -
 .../Scalable/ssaf-linker/Inputs/tu-1.json     |   1 -
 .../Scalable/ssaf-linker/Inputs/tu-2.json     |   1 -
 .../Scalable/ssaf-linker/Inputs/tu-empty.json |   1 -
 .../Inputs/tu-invalid-entity-id-multikey.json |   1 -
 .../Inputs/tu-invalid-entity-id-ref.json      |   1 -
 .../Inputs/tu-invalid-entity-id-value.json    |   1 -
 .../ssaf-linker/Inputs/tu-missing-fields.json |   1 -
 .../Scalable/ssaf-linker/Outputs/lu-1+2.json  |  20 ----
 .../Scalable/ssaf-linker/Outputs/lu-1.json    |  11 --
 .../Scalable/ssaf-linker/Outputs/lu-2.json    |  11 --
 .../ssaf-linker/Outputs/lu-empty.json         |   1 -
 .../Scalable/ssaf-linker/linking-errors.test  |   2 +-
 clang/tools/clang-ssaf-linker/SSAFLinker.cpp  |   3 +-
 .../CallGraph/CallGraphExtractorTest.cpp      |   5 +-
 .../Analyses/PointerFlow/PointerFlowTest.cpp  |   3 +-
 .../PointerFlow/PointerFlowWPATest.cpp        |   6 +-
 .../UnsafeBufferUsageTest.cpp                 |   3 +-
 .../UnsafeBufferUsageWPATest.cpp              |   6 +-
 .../BuildNamespaceTest.cpp                    | 103 ++++--------------
 .../EntityIdTableTest.cpp                     |   4 +-
 .../EntityLinkerTest.cpp                      |  54 ++++-----
 .../ScalableStaticAnalysis/EntityNameTest.cpp |  41 +++----
 .../ScalableStaticAnalysis/LUSummaryTest.cpp  |   2 +-
 .../ModelStringConversionsTest.cpp            |  54 ---------
 .../Registries/MockSerializationFormat.cpp    |   2 +-
 .../SummaryExtractorRegistryTest.cpp          |   5 +-
 .../JSONFormatTest/LUSummaryTest.cpp          |  19 ++--
 .../JSONFormatTest/TUSummaryTest.cpp          |  25 ++---
 .../SummaryData/SummaryDataTest.cpp           |   6 +-
 .../TUSummaryBuilderTest.cpp                  |   5 +-
 .../AnalysisDriverTest.cpp                    |   6 +-
 .../UnsafeBufferReachableAnalysisTest.cpp     |   6 +-
 260 files changed, 174 insertions(+), 1093 deletions(-)
 delete mode 100644 clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/lu-namespace-element-invalid-kind.json
 delete mode 100644 clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/lu-namespace-element-missing-kind.json
 delete mode 100644 clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/namespace-element-invalid-kind.json
 delete mode 100644 clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/namespace-element-missing-kind.json
 delete mode 100644 clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/namespace-wrong-kind.json
 delete mode 100644 clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/namespace-invalid-kind.json
 delete mode 100644 clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/namespace-missing-kind.json
 delete mode 100644 clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/namespace-wrong-kind.json
 delete mode 100644 clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/invalid-kind.json
 delete mode 100644 clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-kind.json

diff --git a/clang/include/clang/ScalableStaticAnalysis/Core/Model/BuildNamespace.h b/clang/include/clang/ScalableStaticAnalysis/Core/Model/BuildNamespace.h
index d503b16bf294c..a11b979c4a550 100644
--- a/clang/include/clang/ScalableStaticAnalysis/Core/Model/BuildNamespace.h
+++ b/clang/include/clang/ScalableStaticAnalysis/Core/Model/BuildNamespace.h
@@ -27,38 +27,20 @@
 
 namespace clang::ssaf {
 
-enum class BuildNamespaceKind : unsigned short {
-  CompilationUnit,
-  LinkUnit,
-  StaticLibrary,
-  MultiArchStaticLibrary
-};
-
 /// Represents a single namespace in the build process.
 ///
 /// A BuildNamespace groups program entities, such as those belonging to a
-/// compilation unit or link unit (e.g., a shared library). Each namespace has a
-/// kind (CompilationUnit or LinkUnit) and a unique identifier name within that
-/// kind.
+/// compilation unit or link unit (e.g., a shared library). Each namespace is
+/// identified by a unique name.
 ///
 /// BuildNamespaces can be composed into NestedBuildNamespace to represent
 /// hierarchical namespace structures that model how software is constructed
 /// from its components.
 class BuildNamespace {
-  BuildNamespaceKind Kind;
   std::string Name;
 
-  auto asTuple() const { return std::tie(Kind, Name); }
-
 public:
-  BuildNamespace(BuildNamespaceKind Kind, llvm::StringRef Name)
-      : Kind(Kind), Name(Name.str()) {}
-
-  /// Creates a BuildNamespace representing a compilation unit.
-  ///
-  /// \param CompilationId The unique identifier for the compilation unit.
-  /// \returns A BuildNamespace with CompilationUnit kind.
-  static BuildNamespace makeCompilationUnit(llvm::StringRef CompilationId);
+  explicit BuildNamespace(llvm::StringRef Name) : Name(Name.str()) {}
 
   bool operator==(const BuildNamespace &Other) const;
   bool operator!=(const BuildNamespace &Other) const;
@@ -93,14 +75,6 @@ class NestedBuildNamespace {
     Namespaces.push_back(N);
   }
 
-  /// Creates a NestedBuildNamespace representing a compilation unit.
-  ///
-  /// \param CompilationId The unique identifier for the compilation unit.
-  /// \returns A NestedBuildNamespace containing a single CompilationUnit
-  ///          BuildNamespace.
-  static NestedBuildNamespace
-  makeCompilationUnit(llvm::StringRef CompilationId);
-
   /// Creates a new NestedBuildNamespace by appending additional namespace.
   ///
   /// \param Namespace The namespace to append.
@@ -124,7 +98,6 @@ class NestedBuildNamespace {
                                        const NestedBuildNamespace &NBN);
 };
 
-llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, BuildNamespaceKind BNK);
 llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, const BuildNamespace &BN);
 llvm::raw_ostream &operator<<(llvm::raw_ostream &OS,
                               const NestedBuildNamespace &NBN);
diff --git a/clang/include/clang/ScalableStaticAnalysis/Core/Model/PrivateFieldNames.def b/clang/include/clang/ScalableStaticAnalysis/Core/Model/PrivateFieldNames.def
index 33f47f8f9151c..e77d699814d0e 100644
--- a/clang/include/clang/ScalableStaticAnalysis/Core/Model/PrivateFieldNames.def
+++ b/clang/include/clang/ScalableStaticAnalysis/Core/Model/PrivateFieldNames.def
@@ -17,7 +17,6 @@
 #define FIELD(CLASS, FIELD_NAME)
 #endif
 
-FIELD(BuildNamespace, Kind)
 FIELD(BuildNamespace, Name)
 FIELD(EntityId, Index)
 FIELD(EntityIdTable, Entities)
diff --git a/clang/include/clang/ScalableStaticAnalysis/Core/Support/FormatProviders.h b/clang/include/clang/ScalableStaticAnalysis/Core/Support/FormatProviders.h
index e4a7b54033924..b3b9e597dbc74 100644
--- a/clang/include/clang/ScalableStaticAnalysis/Core/Support/FormatProviders.h
+++ b/clang/include/clang/ScalableStaticAnalysis/Core/Support/FormatProviders.h
@@ -46,13 +46,6 @@ template <> struct format_provider<clang::ssaf::EntityLinkage> {
   }
 };
 
-template <> struct format_provider<clang::ssaf::BuildNamespaceKind> {
-  static void format(clang::ssaf::BuildNamespaceKind Val, raw_ostream &OS,
-                     StringRef Style) {
-    OS << Val;
-  }
-};
-
 template <> struct format_provider<clang::ssaf::BuildNamespace> {
   static void format(const clang::ssaf::BuildNamespace &Val, raw_ostream &OS,
                      StringRef Style) {
diff --git a/clang/lib/ScalableStaticAnalysis/Core/Model/BuildNamespace.cpp b/clang/lib/ScalableStaticAnalysis/Core/Model/BuildNamespace.cpp
index f68ed961f71b9..953af8b12534b 100644
--- a/clang/lib/ScalableStaticAnalysis/Core/Model/BuildNamespace.cpp
+++ b/clang/lib/ScalableStaticAnalysis/Core/Model/BuildNamespace.cpp
@@ -7,21 +7,12 @@
 //===----------------------------------------------------------------------===//
 
 #include "clang/ScalableStaticAnalysis/Core/Model/BuildNamespace.h"
-#include "../ModelStringConversions.h"
 #include "llvm/ADT/STLExtras.h"
-#include "llvm/Support/ErrorHandling.h"
-#include <tuple>
 
 namespace clang::ssaf {
 
-BuildNamespace
-BuildNamespace::makeCompilationUnit(llvm::StringRef CompilationId) {
-  return BuildNamespace{BuildNamespaceKind::CompilationUnit,
-                        CompilationId.str()};
-}
-
 bool BuildNamespace::operator==(const BuildNamespace &Other) const {
-  return asTuple() == Other.asTuple();
+  return Name == Other.Name;
 }
 
 bool BuildNamespace::operator!=(const BuildNamespace &Other) const {
@@ -29,15 +20,7 @@ bool BuildNamespace::operator!=(const BuildNamespace &Other) const {
 }
 
 bool BuildNamespace::operator<(const BuildNamespace &Other) const {
-  return asTuple() < Other.asTuple();
-}
-
-NestedBuildNamespace
-NestedBuildNamespace::makeCompilationUnit(llvm::StringRef CompilationId) {
-  NestedBuildNamespace Result;
-  Result.Namespaces.push_back(
-      BuildNamespace::makeCompilationUnit(CompilationId));
-  return Result;
+  return Name < Other.Name;
 }
 
 bool NestedBuildNamespace::empty() const { return Namespaces.empty(); }
@@ -54,12 +37,8 @@ bool NestedBuildNamespace::operator<(const NestedBuildNamespace &Other) const {
   return Namespaces < Other.Namespaces;
 }
 
-llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, BuildNamespaceKind BNK) {
-  return OS << buildNamespaceKindToString(BNK);
-}
-
 llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, const BuildNamespace &BN) {
-  return OS << "BuildNamespace(" << BN.Kind << ", " << BN.Name << ")";
+  return OS << "BuildNamespace(" << BN.Name << ")";
 }
 
 llvm::raw_ostream &operator<<(llvm::raw_ostream &OS,
diff --git a/clang/lib/ScalableStaticAnalysis/Core/ModelStringConversions.h b/clang/lib/ScalableStaticAnalysis/Core/ModelStringConversions.h
index 9a4392bd72990..03f76211e8cea 100644
--- a/clang/lib/ScalableStaticAnalysis/Core/ModelStringConversions.h
+++ b/clang/lib/ScalableStaticAnalysis/Core/ModelStringConversions.h
@@ -16,7 +16,6 @@
 #ifndef LLVM_CLANG_LIB_ScalableStaticAnalysis_CORE_MODELSTRINGCONVERSIONS_H
 #define LLVM_CLANG_LIB_ScalableStaticAnalysis_CORE_MODELSTRINGCONVERSIONS_H
 
-#include "clang/ScalableStaticAnalysis/Core/Model/BuildNamespace.h"
 #include "clang/ScalableStaticAnalysis/Core/Model/EntityLinkage.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/Support/ErrorHandling.h"
@@ -24,41 +23,6 @@
 
 namespace clang::ssaf {
 
-//===----------------------------------------------------------------------===//
-// BuildNamespaceKind
-//===----------------------------------------------------------------------===//
-
-/// Returns the canonical string representation of \p BNK used for
-/// serialization and display (e.g. "CompilationUnit", "LinkUnit").
-inline llvm::StringRef buildNamespaceKindToString(BuildNamespaceKind BNK) {
-  switch (BNK) {
-  case BuildNamespaceKind::CompilationUnit:
-    return "CompilationUnit";
-  case BuildNamespaceKind::LinkUnit:
-    return "LinkUnit";
-  case BuildNamespaceKind::StaticLibrary:
-    return "StaticLibrary";
-  case BuildNamespaceKind::MultiArchStaticLibrary:
-    return "MultiArchStaticLibrary";
-  }
-  llvm_unreachable("Unhandled BuildNamespaceKind variant");
-}
-
-/// Parses a string produced by buildNamespaceKindToString(). Returns
-/// std::nullopt if \p Str does not match any known BuildNamespaceKind value.
-inline std::optional<BuildNamespaceKind>
-buildNamespaceKindFromString(llvm::StringRef Str) {
-  if (Str == "CompilationUnit")
-    return BuildNamespaceKind::CompilationUnit;
-  if (Str == "LinkUnit")
-    return BuildNamespaceKind::LinkUnit;
-  if (Str == "StaticLibrary")
-    return BuildNamespaceKind::StaticLibrary;
-  if (Str == "MultiArchStaticLibrary")
-    return BuildNamespaceKind::MultiArchStaticLibrary;
-  return std::nullopt;
-}
-
 //===----------------------------------------------------------------------===//
 // EntityLinkageType
 //===----------------------------------------------------------------------===//
diff --git a/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/JSONFormatImpl.cpp b/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/JSONFormatImpl.cpp
index f935761b3c476..95226bef38b97 100644
--- a/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/JSONFormatImpl.cpp
+++ b/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/JSONFormatImpl.cpp
@@ -235,49 +235,12 @@ Object JSONFormat::entityIdToJSONObject(EntityId EI) {
   return Result;
 }
 
-//----------------------------------------------------------------------------
-// BuildNamespaceKind
-//----------------------------------------------------------------------------
-
-llvm::Expected<BuildNamespaceKind>
-buildNamespaceKindFromJSON(llvm::StringRef BuildNamespaceKindStr) {
-  auto OptBuildNamespaceKind =
-      buildNamespaceKindFromString(BuildNamespaceKindStr);
-  if (!OptBuildNamespaceKind) {
-    return ErrorBuilder::create(std::errc::invalid_argument,
-                                ErrorMessages::InvalidBuildNamespaceKind,
-                                BuildNamespaceKindStr)
-        .build();
-  }
-  return *OptBuildNamespaceKind;
-}
-
-// Provided for consistency with respect to rest of the codebase.
-llvm::StringRef buildNamespaceKindToJSON(BuildNamespaceKind BNK) {
-  return buildNamespaceKindToString(BNK);
-}
-
 //----------------------------------------------------------------------------
 // BuildNamespace
 //----------------------------------------------------------------------------
 
 llvm::Expected<BuildNamespace>
 JSONFormat::buildNamespaceFromJSON(const Object &BuildNamespaceObject) const {
-  auto OptBuildNamespaceKindStr = BuildNamespaceObject.getString("kind");
-  if (!OptBuildNamespaceKindStr) {
-    return ErrorBuilder::create(std::errc::invalid_argument,
-                                ErrorMessages::FailedToReadObjectAtField,
-                                "BuildNamespaceKind", "kind", "string")
-        .build();
-  }
-
-  auto ExpectedKind = buildNamespaceKindFromJSON(*OptBuildNamespaceKindStr);
-  if (!ExpectedKind) {
-    return ErrorBuilder::wrap(ExpectedKind.takeError())
-        .context(ErrorMessages::ReadingFromField, "BuildNamespaceKind", "kind")
-        .build();
-  }
-
   auto OptNameStr = BuildNamespaceObject.getString("name");
   if (!OptNameStr) {
     return ErrorBuilder::create(std::errc::invalid_argument,
@@ -286,12 +249,11 @@ JSONFormat::buildNamespaceFromJSON(const Object &BuildNamespaceObject) const {
         .build();
   }
 
-  return {BuildNamespace(*ExpectedKind, *OptNameStr)};
+  return {BuildNamespace(*OptNameStr)};
 }
 
 Object JSONFormat::buildNamespaceToJSON(const BuildNamespace &BN) const {
   Object Result;
-  Result["kind"] = buildNamespaceKindToJSON(getKind(BN));
   Result["name"] = getName(BN);
   return Result;
 }
diff --git a/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/JSONFormatImpl.h b/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/JSONFormatImpl.h
index b17f296eda1b4..cd3643982dac2 100644
--- a/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/JSONFormatImpl.h
+++ b/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/JSONFormatImpl.h
@@ -108,9 +108,6 @@ inline constexpr const char
     *FailedToSerializeEntitySummaryMismatchedSummaryName =
         "JSONFormat - EntitySummary data for '{0}' reports mismatched '{1}'";
 
-inline constexpr const char *InvalidBuildNamespaceKind =
-    "invalid BuildNamespaceKind value '{0}' for field 'kind'";
-
 inline constexpr const char *InvalidEntityLinkageType =
     "invalid EntityLinkageType value '{0}' for field 'type'";
 
@@ -200,16 +197,6 @@ llvm::StringRef summaryNameToJSON(const SummaryName &SN);
 AnalysisName analysisNameFromJSON(llvm::StringRef AnalysisNameStr);
 llvm::StringRef analysisNameToJSON(const AnalysisName &AN);
 
-//----------------------------------------------------------------------------
-// BuildNamespaceKind helpers
-//----------------------------------------------------------------------------
-
-llvm::Expected<BuildNamespaceKind>
-buildNamespaceKindFromJSON(llvm::StringRef BuildNamespaceKindStr);
-
-// Provided for consistency with respect to rest of the codebase.
-llvm::StringRef buildNamespaceKindToJSON(BuildNamespaceKind BNK);
-
 //----------------------------------------------------------------------------
 // EntityLinkageType helpers
 //----------------------------------------------------------------------------
diff --git a/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/MultiArchStaticLibrary.cpp b/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/MultiArchStaticLibrary.cpp
index e8971a2f34be3..cfa84dbdcf883 100644
--- a/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/MultiArchStaticLibrary.cpp
+++ b/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/MultiArchStaticLibrary.cpp
@@ -70,18 +70,6 @@ JSONFormat::readMultiArchStaticLibraryFromObject(const Object &RootObject) {
         .build();
   }
 
-  if (getKind(*ExpectedNamespace) !=
-      BuildNamespaceKind::MultiArchStaticLibrary) {
-    return ErrorBuilder::create(
-               std::errc::invalid_argument,
-               ErrorMessages::MismatchedSummaryType,
-               buildNamespaceKindToJSON(
-                   BuildNamespaceKind::MultiArchStaticLibrary),
-               "namespace.kind",
-               buildNamespaceKindToJSON(getKind(*ExpectedNamespace)))
-        .build();
-  }
-
   const Array *MembersArray = RootObject.getArray("members");
   if (!MembersArray) {
     return ErrorBuilder::create(std::errc::invalid_argument,
diff --git a/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/StaticLibrary.cpp b/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/StaticLibrary.cpp
index d4538d19aed24..7786c58fa7c04 100644
--- a/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/StaticLibrary.cpp
+++ b/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/StaticLibrary.cpp
@@ -86,16 +86,6 @@ JSONFormat::readStaticLibraryFromObject(const Object &RootObject) {
         .build();
   }
 
-  if (getKind(*ExpectedNamespace) != BuildNamespaceKind::StaticLibrary) {
-    return ErrorBuilder::create(
-               std::errc::invalid_argument,
-               ErrorMessages::MismatchedSummaryType,
-               buildNamespaceKindToJSON(BuildNamespaceKind::StaticLibrary),
-               "namespace.kind",
-               buildNamespaceKindToJSON(getKind(*ExpectedNamespace)))
-        .build();
-  }
-
   StaticLibrary S(std::move(T), std::move(*ExpectedNamespace));
 
   const Array *MembersArray = RootObject.getArray("members");
diff --git a/clang/lib/ScalableStaticAnalysis/Frontend/TUSummaryExtractorFrontendAction.cpp b/clang/lib/ScalableStaticAnalysis/Frontend/TUSummaryExtractorFrontendAction.cpp
index bb4caef8f99ab..5c017ebca5d2c 100644
--- a/clang/lib/ScalableStaticAnalysis/Frontend/TUSummaryExtractorFrontendAction.cpp
+++ b/clang/lib/ScalableStaticAnalysis/Frontend/TUSummaryExtractorFrontendAction.cpp
@@ -141,9 +141,7 @@ TUSummaryRunner::TUSummaryRunner(llvm::Triple TargetTriple,
                                  std::unique_ptr<SerializationFormat> Format,
                                  const SSAFOptions &Opts)
     : MultiplexConsumer(std::vector<std::unique_ptr<ASTConsumer>>{}),
-      Summary(std::move(TargetTriple),
-              BuildNamespace(BuildNamespaceKind::CompilationUnit,
-                             Opts.CompilationUnitId)),
+      Summary(std::move(TargetTriple), BuildNamespace(Opts.CompilationUnitId)),
       Opts(Opts), Format(std::move(Format)) {
   assert(this->Format);
   assert(!Opts.CompilationUnitId.empty());
diff --git a/clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary-bad-array.json b/clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary-bad-array.json
index 282917559e5b5..adbc21b787283 100644
--- a/clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary-bad-array.json
+++ b/clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary-bad-array.json
@@ -82,7 +82,6 @@
     }
   ],
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "Mock.cpp"
   },
   "target_triple": "arm64-apple-macosx",
diff --git a/clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary-bad-summary.json b/clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary-bad-summary.json
index c2c5e119ca330..1e1823ae8ba92 100644
--- a/clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary-bad-summary.json
+++ b/clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary-bad-summary.json
@@ -59,7 +59,6 @@
     }
   ],
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "Mock.cpp"
   },
   "target_triple": "arm64-apple-macosx",
diff --git a/clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary-no-key.json b/clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary-no-key.json
index 14c654f8b7c14..506fd25759af4 100644
--- a/clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary-no-key.json
+++ b/clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary-no-key.json
@@ -88,7 +88,6 @@
     }
   ],
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "Mock.cpp"
   },
   "target_triple": "arm64-apple-macosx",
diff --git a/clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary.json b/clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary.json
index 9b0b4575e2f61..e9179fd5843f3 100644
--- a/clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary.json
+++ b/clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary.json
@@ -86,7 +86,6 @@
   ],
   "target_triple": "arm64-apple-macosx",
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "Mock.cpp"
   },
   "type": "TUSummary"
diff --git a/clang/test/Analysis/Scalable/PointerFlow/Inputs/wpa-result-bad-edges.json b/clang/test/Analysis/Scalable/PointerFlow/Inputs/wpa-result-bad-edges.json
index 85d68e0b5f1d0..381a2bb7d490a 100644
--- a/clang/test/Analysis/Scalable/PointerFlow/Inputs/wpa-result-bad-edges.json
+++ b/clang/test/Analysis/Scalable/PointerFlow/Inputs/wpa-result-bad-edges.json
@@ -5,7 +5,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ],
diff --git a/clang/test/Analysis/Scalable/PointerFlow/Inputs/wpa-result-odd-count.json b/clang/test/Analysis/Scalable/PointerFlow/Inputs/wpa-result-odd-count.json
index 391926df77dcb..f16c948422626 100644
--- a/clang/test/Analysis/Scalable/PointerFlow/Inputs/wpa-result-odd-count.json
+++ b/clang/test/Analysis/Scalable/PointerFlow/Inputs/wpa-result-odd-count.json
@@ -5,7 +5,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ],
diff --git a/clang/test/Analysis/Scalable/PointerFlow/Inputs/wpa-result.json b/clang/test/Analysis/Scalable/PointerFlow/Inputs/wpa-result.json
index 2d28f8697d339..575184b82b58c 100644
--- a/clang/test/Analysis/Scalable/PointerFlow/Inputs/wpa-result.json
+++ b/clang/test/Analysis/Scalable/PointerFlow/Inputs/wpa-result.json
@@ -5,7 +5,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ],
@@ -18,7 +17,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ],
@@ -31,7 +29,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ],
diff --git a/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary-bad-element.json b/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary-bad-element.json
index 8e73183ce3b29..77ffc18c5970a 100644
--- a/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary-bad-element.json
+++ b/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary-bad-element.json
@@ -45,7 +45,6 @@
     }
   ],
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "Mock.cpp"
   },
   "target_triple": "arm64-apple-macosx",
diff --git a/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary-bad-ptr-level.json b/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary-bad-ptr-level.json
index 9a4ef04219f0a..0841e08bb5797 100644
--- a/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary-bad-ptr-level.json
+++ b/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary-bad-ptr-level.json
@@ -50,7 +50,6 @@
     }
   ],
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "Mock.cpp"
   },
   "target_triple": "arm64-apple-macosx",
diff --git a/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary-no-key.json b/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary-no-key.json
index 0ab350fa56182..24f34c806b3ee 100644
--- a/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary-no-key.json
+++ b/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary-no-key.json
@@ -50,7 +50,6 @@
     }
   ],
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "Mock.cpp"
   },
   "target_triple": "arm64-apple-macosx",
diff --git a/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary.json b/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary.json
index e4df108408472..2e41a2a733625 100644
--- a/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary.json
+++ b/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary.json
@@ -100,7 +100,6 @@
   ],
   "target_triple": "arm64-apple-macosx",
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "Mock.cpp"
   },
   "type": "TUSummary"
diff --git a/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/wpa-result-bad-epls.json b/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/wpa-result-bad-epls.json
index f7ee6a2d197e8..651c52d8f5bc1 100644
--- a/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/wpa-result-bad-epls.json
+++ b/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/wpa-result-bad-epls.json
@@ -5,7 +5,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ],
diff --git a/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/wpa-result-odd-count.json b/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/wpa-result-odd-count.json
index 005a51a849f8f..a03dbedb832ba 100644
--- a/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/wpa-result-odd-count.json
+++ b/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/wpa-result-odd-count.json
@@ -5,7 +5,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ],
diff --git a/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/wpa-result.json b/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/wpa-result.json
index b3d2d605b7946..2bf9609968edc 100644
--- a/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/wpa-result.json
+++ b/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/wpa-result.json
@@ -5,7 +5,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ],
@@ -18,7 +17,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ],
@@ -31,7 +29,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ],
diff --git a/clang/test/Analysis/Scalable/ssaf-analyzer/Inputs/lu-tags-only.json b/clang/test/Analysis/Scalable/ssaf-analyzer/Inputs/lu-tags-only.json
index ddff7a789fffb..01552f15b6465 100644
--- a/clang/test/Analysis/Scalable/ssaf-analyzer/Inputs/lu-tags-only.json
+++ b/clang/test/Analysis/Scalable/ssaf-analyzer/Inputs/lu-tags-only.json
@@ -18,7 +18,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ],
@@ -37,7 +36,6 @@
   ],
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-analyzer/Inputs/lu.json b/clang/test/Analysis/Scalable/ssaf-analyzer/Inputs/lu.json
index 4654ada97a341..536901024bf67 100644
--- a/clang/test/Analysis/Scalable/ssaf-analyzer/Inputs/lu.json
+++ b/clang/test/Analysis/Scalable/ssaf-analyzer/Inputs/lu.json
@@ -62,7 +62,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ],
@@ -75,7 +74,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ],
@@ -88,7 +86,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ],
@@ -119,7 +116,6 @@
   ],
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-analyzer/Outputs/all.json b/clang/test/Analysis/Scalable/ssaf-analyzer/Outputs/all.json
index f1e8cf98553c9..cf9898105b195 100644
--- a/clang/test/Analysis/Scalable/ssaf-analyzer/Outputs/all.json
+++ b/clang/test/Analysis/Scalable/ssaf-analyzer/Outputs/all.json
@@ -5,7 +5,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ],
@@ -18,7 +17,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ],
@@ -31,7 +29,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ],
diff --git a/clang/test/Analysis/Scalable/ssaf-analyzer/Outputs/both.json b/clang/test/Analysis/Scalable/ssaf-analyzer/Outputs/both.json
index 814fea5823441..f5d85c5a3e272 100644
--- a/clang/test/Analysis/Scalable/ssaf-analyzer/Outputs/both.json
+++ b/clang/test/Analysis/Scalable/ssaf-analyzer/Outputs/both.json
@@ -5,7 +5,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ],
@@ -18,7 +17,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ],
@@ -31,7 +29,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ],
diff --git a/clang/test/Analysis/Scalable/ssaf-analyzer/Outputs/pairs.json b/clang/test/Analysis/Scalable/ssaf-analyzer/Outputs/pairs.json
index c8431c7280ce0..016892129cd11 100644
--- a/clang/test/Analysis/Scalable/ssaf-analyzer/Outputs/pairs.json
+++ b/clang/test/Analysis/Scalable/ssaf-analyzer/Outputs/pairs.json
@@ -5,7 +5,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ],
@@ -18,7 +17,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ],
@@ -31,7 +29,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ],
diff --git a/clang/test/Analysis/Scalable/ssaf-analyzer/Outputs/tags.json b/clang/test/Analysis/Scalable/ssaf-analyzer/Outputs/tags.json
index c3a7cfe9d6edb..b436bc72c85b3 100644
--- a/clang/test/Analysis/Scalable/ssaf-analyzer/Outputs/tags.json
+++ b/clang/test/Analysis/Scalable/ssaf-analyzer/Outputs/tags.json
@@ -5,7 +5,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ],
@@ -18,7 +17,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ],
@@ -31,7 +29,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-lu-empty.json b/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-lu-empty.json
index d3c64b8d3eaf3..255709aea10ae 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-lu-empty.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-lu-empty.json
@@ -4,7 +4,6 @@
   "linkage_table": [],
   "lu_namespace": [
     {
-      "kind": "CompilationUnit",
       "name": "test.cpp"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-multi-arch-shared-library-empty.json b/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-multi-arch-shared-library-empty.json
index 1cd693b2fc8ce..909e88382cf3e 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-multi-arch-shared-library-empty.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-multi-arch-shared-library-empty.json
@@ -2,7 +2,6 @@
   "members": [],
   "namespace": [
     {
-      "kind": "LinkUnit",
       "name": "libfoo"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-multi-arch-shared-library-nonempty.json b/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-multi-arch-shared-library-nonempty.json
index dc00a24f0eaf0..f8de5ef655606 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-multi-arch-shared-library-nonempty.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-multi-arch-shared-library-nonempty.json
@@ -8,7 +8,6 @@
           "name": {
             "namespace": [
               {
-                "kind": "LinkUnit",
                 "name": "libfoo"
               }
             ],
@@ -27,7 +26,6 @@
       ],
       "lu_namespace": [
         {
-          "kind": "LinkUnit",
           "name": "libfoo"
         }
       ],
@@ -42,7 +40,6 @@
           "name": {
             "namespace": [
               {
-                "kind": "LinkUnit",
                 "name": "libfoo"
               }
             ],
@@ -61,7 +58,6 @@
       ],
       "lu_namespace": [
         {
-          "kind": "LinkUnit",
           "name": "libfoo"
         }
       ],
@@ -71,7 +67,6 @@
   ],
   "namespace": [
     {
-      "kind": "LinkUnit",
       "name": "libfoo"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-multi-arch-static-library-empty.json b/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-multi-arch-static-library-empty.json
index dfe68cef81677..fa83e9f72ca17 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-multi-arch-static-library-empty.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-multi-arch-static-library-empty.json
@@ -3,7 +3,6 @@
     {
       "members": [],
       "namespace": {
-        "kind": "StaticLibrary",
         "name": "libfoo"
       },
       "target_triple": "arm64-apple-macosx",
@@ -11,7 +10,6 @@
     }
   ],
   "namespace": {
-    "kind": "MultiArchStaticLibrary",
     "name": "libfoo"
   },
   "type": "MultiArchStaticLibrary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-multi-arch-static-library-nonempty.json b/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-multi-arch-static-library-nonempty.json
index ea877c68be3fb..6386e9b664b68 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-multi-arch-static-library-nonempty.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-multi-arch-static-library-nonempty.json
@@ -3,7 +3,6 @@
     {
       "members": [],
       "namespace": {
-        "kind": "StaticLibrary",
         "name": "libfoo"
       },
       "target_triple": "arm64-apple-macosx",
@@ -17,14 +16,12 @@
           "linkage_table": [],
           "target_triple": "x86_64-apple-macosx",
           "tu_namespace": {
-            "kind": "CompilationUnit",
             "name": "a.cpp"
           },
           "type": "TUSummary"
         }
       ],
       "namespace": {
-        "kind": "StaticLibrary",
         "name": "libfoo"
       },
       "target_triple": "x86_64-apple-macosx",
@@ -32,7 +29,6 @@
     }
   ],
   "namespace": {
-    "kind": "MultiArchStaticLibrary",
     "name": "libfoo"
   },
   "type": "MultiArchStaticLibrary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-static-library-empty.json b/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-static-library-empty.json
index 3059d007a2e9e..b507063b8178a 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-static-library-empty.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-static-library-empty.json
@@ -1,7 +1,6 @@
 {
   "members": [],
   "namespace": {
-    "kind": "StaticLibrary",
     "name": "libempty"
   },
   "target_triple": "arm64-apple-macosx",
diff --git a/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-tu-empty.json b/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-tu-empty.json
index f89161ea705e7..4283c249de14f 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-tu-empty.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-tu-empty.json
@@ -4,7 +4,6 @@
   "linkage_table": [],
   "target_triple": "arm64-apple-macosx",
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "type": "TUSummary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/invalid-direct-callee-element.json b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/invalid-direct-callee-element.json
index b726ec997917f..3d97aab252ac0 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/invalid-direct-callee-element.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/invalid-direct-callee-element.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/invalid-direct-callee-id.json b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/invalid-direct-callee-id.json
index c4d8af0dbfcfc..eb015a1aaabae 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/invalid-direct-callee-id.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/invalid-direct-callee-id.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def-col.json b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def-col.json
index fb928fe397acc..846dc7fd53cc8 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def-col.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def-col.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def-file.json b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def-file.json
index e43509f1f8ca4..dcbfc5a2187b6 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def-file.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def-file.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def-line.json b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def-line.json
index dd14915d37aba..4bd0aa573ac6d 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def-line.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def-line.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def.json b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def.json
index c0da9cd05f807..99b8e48504295 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-direct-callees.json b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-direct-callees.json
index 45262d5813200..8ed38a57bf3ad 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-direct-callees.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-direct-callees.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-pretty-name.json b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-pretty-name.json
index b1e7de381a36a..11b96ce994a8d 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-pretty-name.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-pretty-name.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-virtual-callees.json b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-virtual-callees.json
index 02e313bdc67b0..45b4e69a0ac02 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-virtual-callees.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-virtual-callees.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-element-not-object.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-element-not-object.json
index dc1aecd86683e..3e8ca527b3b99 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-element-not-object.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-element-not-object.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -12,4 +11,4 @@
   ],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-entry-missing-data.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-entry-missing-data.json
index c7c70a5838efc..e223eaaadfc22 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-entry-missing-data.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-entry-missing-data.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -14,4 +13,4 @@
   ],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-entry-missing-summary-name.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-entry-missing-summary-name.json
index c4234534261db..69ea82f79392f 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-entry-missing-summary-name.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-entry-missing-summary-name.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -14,4 +13,4 @@
   ],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-not-array.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-not-array.json
index 68a5efddea138..42db27d3c8b57 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-not-array.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-not-array.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -10,4 +9,4 @@
   "data": {},
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/duplicate-entity-id-in-data-map.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/duplicate-entity-id-in-data-map.json
index 08bda0ffa6c73..75dadc757c676 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/duplicate-entity-id-in-data-map.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/duplicate-entity-id-in-data-map.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -13,11 +12,9 @@
         "suffix": "",
         "namespace": [
           {
-            "kind": "CompilationUnit",
             "name": "test.cpp"
           },
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ]
@@ -53,4 +50,4 @@
   ],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/duplicate-entity.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/duplicate-entity.json
index 0d5e7d5b1eeec..12f79e147694c 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/duplicate-entity.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/duplicate-entity.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -13,11 +12,9 @@
         "suffix": "",
         "namespace": [
           {
-            "kind": "CompilationUnit",
             "name": "test.cpp"
           },
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ]
@@ -30,11 +27,9 @@
         "suffix": "",
         "namespace": [
           {
-            "kind": "CompilationUnit",
             "name": "test.cpp"
           },
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ]
@@ -58,4 +53,4 @@
   "data": [],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/duplicate-summary-name.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/duplicate-summary-name.json
index 04efe47d41cee..dc14163d4d32a 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/duplicate-summary-name.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/duplicate-summary-name.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -19,4 +18,4 @@
   ],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-data-element-not-object.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-data-element-not-object.json
index 9c17365ea1916..edf21979a9f9b 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-data-element-not-object.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-data-element-not-object.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -17,4 +16,4 @@
   ],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-data-missing-entity-id.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-data-missing-entity-id.json
index 498a6c8359fa9..d99aa24e609e1 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-data-missing-entity-id.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-data-missing-entity-id.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -19,4 +18,4 @@
   ],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-data-missing-entity-summary.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-data-missing-entity-summary.json
index cc8f8a331a466..9e1efc073ec65 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-data-missing-entity-summary.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-data-missing-entity-summary.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -19,4 +18,4 @@
   ],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-id-not-uint64.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-id-not-uint64.json
index 302674eacc912..f29366e190f38 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-id-not-uint64.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-id-not-uint64.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -20,4 +19,4 @@
   ],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-name-missing-namespace.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-name-missing-namespace.json
index 174423ce72c33..1c1888a15d107 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-name-missing-namespace.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-name-missing-namespace.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -25,4 +24,4 @@
   "data": [],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-name-missing-suffix.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-name-missing-suffix.json
index 92457c7f75d44..b5a51cf425e85 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-name-missing-suffix.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-name-missing-suffix.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -12,7 +11,6 @@
         "usr": "c:@F at foo",
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ]
@@ -30,4 +28,4 @@
   "data": [],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-name-missing-usr.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-name-missing-usr.json
index a3af210d887b1..f462f41e2d45d 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-name-missing-usr.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-name-missing-usr.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -12,11 +11,9 @@
         "suffix": "",
         "namespace": [
           {
-            "kind": "CompilationUnit",
             "name": "test.cpp"
           },
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ]
@@ -34,4 +31,4 @@
   "data": [],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-element-not-object.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-element-not-object.json
index acaa0feb24d25..4f7063cfd4b5d 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-element-not-object.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-element-not-object.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -12,4 +11,4 @@
   "data": [],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-entry-id-not-uint64.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-entry-id-not-uint64.json
index cf31a7ba25106..40565f0044b1c 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-entry-id-not-uint64.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-entry-id-not-uint64.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -13,11 +12,9 @@
         "suffix": "",
         "namespace": [
           {
-            "kind": "CompilationUnit",
             "name": "test.cpp"
           },
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ]
@@ -28,4 +25,4 @@
   "data": [],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-entry-missing-id.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-entry-missing-id.json
index 193b036461f1c..001896c552f4b 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-entry-missing-id.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-entry-missing-id.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -12,11 +11,9 @@
         "suffix": "",
         "namespace": [
           {
-            "kind": "CompilationUnit",
             "name": "test.cpp"
           },
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ]
@@ -27,4 +24,4 @@
   "data": [],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-entry-missing-name.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-entry-missing-name.json
index 54bef9ba275a9..9ff4b325f7055 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-entry-missing-name.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-entry-missing-name.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -14,4 +13,4 @@
   "data": [],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-not-array.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-not-array.json
index 80ae213169a43..13a3e5902677b 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-not-array.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-not-array.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -10,4 +9,4 @@
   "data": [],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-duplicate-id.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-duplicate-id.json
index e03fa76057044..9d581a6f62cb8 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-duplicate-id.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-duplicate-id.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -13,11 +12,9 @@
         "suffix": "",
         "namespace": [
           {
-            "kind": "CompilationUnit",
             "name": "test.cpp"
           },
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ]
@@ -41,4 +38,4 @@
   "data": [],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-element-not-object.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-element-not-object.json
index 7345dae82c552..9225f7a9d81f0 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-element-not-object.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-element-not-object.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -12,4 +11,4 @@
   "data": [],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-id-not-uint64.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-id-not-uint64.json
index ae30fe240fb20..1653ee62bceba 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-id-not-uint64.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-id-not-uint64.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -17,4 +16,4 @@
   "data": [],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-linkage-invalid-type.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-linkage-invalid-type.json
index 7f53e39f1d942..fe70bed49fdf3 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-linkage-invalid-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-linkage-invalid-type.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -17,4 +16,4 @@
   "data": [],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-linkage-missing-type.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-linkage-missing-type.json
index d52f40c4fda2d..fa6132273da38 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-linkage-missing-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-linkage-missing-type.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -15,4 +14,4 @@
   "data": [],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-missing-id.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-missing-id.json
index 73738e0a42255..2bf8305c91d3b 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-missing-id.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-missing-id.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -16,4 +15,4 @@
   "data": [],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-missing-linkage.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-missing-linkage.json
index 32f3e0c84b863..2a4fd6d8ef01b 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-missing-linkage.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-missing-linkage.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -14,4 +13,4 @@
   "data": [],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-extra-id.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-extra-id.json
index af1436f97df13..11f4540b042bf 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-extra-id.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-extra-id.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -17,4 +16,4 @@
   "data": [],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-missing-id.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-missing-id.json
index e0e299d938ec7..e829ed86b56ef 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-missing-id.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-missing-id.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -13,11 +12,9 @@
         "suffix": "",
         "namespace": [
           {
-            "kind": "CompilationUnit",
             "name": "test.cpp"
           },
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ]
@@ -28,4 +25,4 @@
   "data": [],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-not-array.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-not-array.json
index 05d8503262109..34f3f374a5973 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-not-array.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-not-array.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -10,4 +9,4 @@
   "data": [],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/lu-namespace-element-invalid-kind.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/lu-namespace-element-invalid-kind.json
deleted file mode 100644
index 42bf456dbe99a..0000000000000
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/lu-namespace-element-invalid-kind.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-  "lu_namespace": [
-    {
-      "kind": "invalid_kind",
-      "name": "test.cpp"
-    }
-  ],
-  "id_table": [],
-  "linkage_table": [],
-  "data": [],
-  "target_triple": "arm64-apple-macosx",
-  "type": "LUSummary"
-}
\ No newline at end of file
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/lu-namespace-element-missing-kind.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/lu-namespace-element-missing-kind.json
deleted file mode 100644
index 875285cde50c1..0000000000000
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/lu-namespace-element-missing-kind.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
-  "lu_namespace": [
-    {
-      "name": "test.cpp"
-    }
-  ],
-  "id_table": [],
-  "linkage_table": [],
-  "data": [],
-  "target_triple": "arm64-apple-macosx",
-  "type": "LUSummary"
-}
\ No newline at end of file
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/lu-namespace-element-missing-name.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/lu-namespace-element-missing-name.json
index 9f0bf4c24032a..99c36081bfb09 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/lu-namespace-element-missing-name.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/lu-namespace-element-missing-name.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "kind": "CompilationUnit"
-    }
+    {}
   ],
   "id_table": [],
   "linkage_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/lu-namespace-not-array.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/lu-namespace-not-array.json
index 88d7643a6eb83..2d4e2729f6c74 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/lu-namespace-not-array.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/lu-namespace-not-array.json
@@ -1,6 +1,5 @@
 {
   "lu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [],
@@ -8,4 +7,4 @@
   "data": [],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/mismatched-type.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/mismatched-type.json
index fef18fcc1a874..3ae529b30ff51 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/mismatched-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/mismatched-type.json
@@ -4,7 +4,6 @@
   "linkage_table": [],
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-data.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-data.json
index bcf22838ce522..acd07d70265b5 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-data.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-data.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -9,4 +8,4 @@
   "linkage_table": [],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-id-table.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-id-table.json
index 764ce701287b5..9cc5d5942659f 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-id-table.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-id-table.json
@@ -1,11 +1,10 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
   "data": [],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-linkage-table.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-linkage-table.json
index cb85ce147e4a0..3b95f70602cc1 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-linkage-table.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-linkage-table.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -9,4 +8,4 @@
   "data": [],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-target-triple.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-target-triple.json
index 765a8b8b2f703..80f84b49b5169 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-target-triple.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-target-triple.json
@@ -4,7 +4,6 @@
   "linkage_table": [],
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-type.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-type.json
index 356001dbe68ae..5105938e12c48 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-type.json
@@ -4,7 +4,6 @@
   "linkage_table": [],
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/namespace-element-invalid-kind.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/namespace-element-invalid-kind.json
deleted file mode 100644
index 6c648ca818656..0000000000000
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/namespace-element-invalid-kind.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
-  "lu_namespace": [
-    {
-      "kind": "LinkUnit",
-      "name": "test.exe"
-    }
-  ],
-  "id_table": [
-    {
-      "id": 0,
-      "name": {
-        "usr": "c:@F at foo",
-        "suffix": "",
-        "namespace": [
-          {
-            "kind": "invalid_kind",
-            "name": "test.cpp"
-          }
-        ]
-      }
-    }
-  ],
-  "linkage_table": [
-    {
-      "id": 0,
-      "linkage": {
-        "type": "External"
-      }
-    }
-  ],
-  "data": [],
-  "target_triple": "arm64-apple-macosx",
-  "type": "LUSummary"
-}
\ No newline at end of file
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/namespace-element-missing-kind.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/namespace-element-missing-kind.json
deleted file mode 100644
index 004ff880ab480..0000000000000
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/namespace-element-missing-kind.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
-  "lu_namespace": [
-    {
-      "kind": "LinkUnit",
-      "name": "test.exe"
-    }
-  ],
-  "id_table": [
-    {
-      "id": 0,
-      "name": {
-        "usr": "c:@F at foo",
-        "suffix": "",
-        "namespace": [
-          {
-            "name": "test.cpp"
-          }
-        ]
-      }
-    }
-  ],
-  "linkage_table": [
-    {
-      "id": 0,
-      "linkage": {
-        "type": "Internal"
-      }
-    }
-  ],
-  "data": [],
-  "target_triple": "arm64-apple-macosx",
-  "type": "LUSummary"
-}
\ No newline at end of file
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/namespace-element-missing-name.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/namespace-element-missing-name.json
index b35b6bb00da4b..b67a53ccaea5c 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/namespace-element-missing-name.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/namespace-element-missing-name.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -12,9 +11,7 @@
         "usr": "c:@F at foo",
         "suffix": "",
         "namespace": [
-          {
-            "kind": "CompilationUnit"
-          }
+          {}
         ]
       }
     }
@@ -30,4 +27,4 @@
   "data": [],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/namespace-element-not-object.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/namespace-element-not-object.json
index 00f88a4651d90..6bbe44faf7272 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/namespace-element-not-object.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/namespace-element-not-object.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -28,4 +27,4 @@
   "data": [],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/not-normalized-target-triple.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/not-normalized-target-triple.json
index 6ecdeef56e55a..86266c30ce839 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/not-normalized-target-triple.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/not-normalized-target-triple.json
@@ -4,7 +4,6 @@
   "linkage_table": [],
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-element-not-object.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-element-not-object.json
index 7bc19afa5e943..dd1b55b749288 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-element-not-object.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-element-not-object.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -24,4 +23,4 @@
   ],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-invalid-first-field.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-invalid-first-field.json
index 72e7545626f90..ac1a20aac84b9 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-invalid-first-field.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-invalid-first-field.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -29,4 +28,4 @@
   ],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-invalid-pairs-field-type.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-invalid-pairs-field-type.json
index 801de7d969b2a..4edbb97f9b91e 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-invalid-pairs-field-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-invalid-pairs-field-type.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -22,4 +21,4 @@
   ],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-invalid-second-field.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-invalid-second-field.json
index 2b5b2fd87a763..75eb2d1f86e3d 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-invalid-second-field.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-invalid-second-field.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -29,4 +28,4 @@
   ],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-missing-first-field.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-missing-first-field.json
index 62897d2e5ce73..5fc11668546b9 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-missing-first-field.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-missing-first-field.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -28,4 +27,4 @@
   ],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-missing-pairs-field.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-missing-pairs-field.json
index d71c7fa96431d..c295f76878b5c 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-missing-pairs-field.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-missing-pairs-field.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -20,4 +19,4 @@
   ],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-missing-second-field.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-missing-second-field.json
index 23459d00e76d6..c71c7061bd06a 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-missing-second-field.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-missing-second-field.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -28,4 +27,4 @@
   ],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/read-entity-summary-no-format-info.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/read-entity-summary-no-format-info.json
index 63989f69371fd..fbf9ab842d805 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/read-entity-summary-no-format-info.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/read-entity-summary-no-format-info.json
@@ -1,7 +1,6 @@
 {
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "test.exe"
     }
   ],
@@ -20,4 +19,4 @@
   ],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
-}
\ No newline at end of file
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-empty-data-entry.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-empty-data-entry.json
index cf8124d999f7f..b2b802f6f0e4c 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-empty-data-entry.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-empty-data-entry.json
@@ -9,7 +9,6 @@
   "linkage_table": [],
   "lu_namespace": [
     {
-      "kind": "CompilationUnit",
       "name": "test.cpp"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-empty-namespace.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-empty-namespace.json
index d3c64b8d3eaf3..255709aea10ae 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-empty-namespace.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-empty-namespace.json
@@ -4,7 +4,6 @@
   "linkage_table": [],
   "lu_namespace": [
     {
-      "kind": "CompilationUnit",
       "name": "test.cpp"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-external.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-external.json
index 1024caba971c7..280f1d0ca57cc 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-external.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-external.json
@@ -6,7 +6,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "CompilationUnit",
             "name": "test.cpp"
           }
         ],
@@ -25,7 +24,6 @@
   ],
   "lu_namespace": [
     {
-      "kind": "CompilationUnit",
       "name": "test.cpp"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-internal.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-internal.json
index f4e9603d9bd0e..8069bf207ec91 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-internal.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-internal.json
@@ -6,7 +6,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "CompilationUnit",
             "name": "test.cpp"
           }
         ],
@@ -25,7 +24,6 @@
   ],
   "lu_namespace": [
     {
-      "kind": "CompilationUnit",
       "name": "test.cpp"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-multiple.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-multiple.json
index e2c333ffbc07a..f7b535131b1be 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-multiple.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-multiple.json
@@ -6,7 +6,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "CompilationUnit",
             "name": "test.cpp"
           }
         ],
@@ -19,7 +18,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "CompilationUnit",
             "name": "test.cpp"
           }
         ],
@@ -32,7 +30,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "CompilationUnit",
             "name": "test.cpp"
           }
         ],
@@ -63,7 +60,6 @@
   ],
   "lu_namespace": [
     {
-      "kind": "CompilationUnit",
       "name": "test.cpp"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-none.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-none.json
index 8330210158484..b7dccd08806d1 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-none.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-none.json
@@ -6,7 +6,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "CompilationUnit",
             "name": "test.cpp"
           }
         ],
@@ -25,7 +24,6 @@
   ],
   "lu_namespace": [
     {
-      "kind": "CompilationUnit",
       "name": "test.cpp"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-multiple-namespace-elements.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-multiple-namespace-elements.json
index 84d1dfc524a00..f78d45cc06d57 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-multiple-namespace-elements.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-multiple-namespace-elements.json
@@ -4,15 +4,12 @@
   "linkage_table": [],
   "lu_namespace": [
     {
-      "kind": "CompilationUnit",
       "name": "a.cpp"
     },
     {
-      "kind": "CompilationUnit",
       "name": "b.cpp"
     },
     {
-      "kind": "LinkUnit",
       "name": "libtest.so"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-single-namespace-element.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-single-namespace-element.json
index d3c64b8d3eaf3..255709aea10ae 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-single-namespace-element.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-single-namespace-element.json
@@ -4,7 +4,6 @@
   "linkage_table": [],
   "lu_namespace": [
     {
-      "kind": "CompilationUnit",
       "name": "test.cpp"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-two-summary-types.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-two-summary-types.json
index 3297419191ef8..b3857bbe3c49b 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-two-summary-types.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-two-summary-types.json
@@ -138,7 +138,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "CompilationUnit",
             "name": "test.cpp"
           }
         ],
@@ -151,7 +150,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "CompilationUnit",
             "name": "test.cpp"
           }
         ],
@@ -164,7 +162,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "CompilationUnit",
             "name": "test.cpp"
           }
         ],
@@ -177,7 +174,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "CompilationUnit",
             "name": "test.cpp"
           }
         ],
@@ -190,7 +186,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "CompilationUnit",
             "name": "test.cpp"
           }
         ],
@@ -233,7 +228,6 @@
   ],
   "lu_namespace": [
     {
-      "kind": "CompilationUnit",
       "name": "test.cpp"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/id-table.test b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/id-table.test
index 733cd61d844a2..b84adad916f04 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/id-table.test
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/id-table.test
@@ -18,31 +18,6 @@
 // NAMESPACE-ELEMENT-NOT-OBJECT-NEXT: reading NestedBuildNamespace from field 'namespace'
 // NAMESPACE-ELEMENT-NOT-OBJECT-NEXT: failed to read BuildNamespace from index '0': expected JSON object
 
-// RUN: not clang-ssaf-format --type lu %S/Inputs/namespace-element-missing-kind.json 2>&1 \
-// RUN:   | FileCheck %s --match-full-lines --check-prefix=NAMESPACE-ELEMENT-MISSING-KIND
-// RUN: not clang-ssaf-format --type lu --encoding %S/Inputs/namespace-element-missing-kind.json 2>&1 \
-// RUN:   | FileCheck %s --match-full-lines --check-prefix=NAMESPACE-ELEMENT-MISSING-KIND
-// NAMESPACE-ELEMENT-MISSING-KIND:      clang-ssaf-format: error: reading LUSummary from file '{{.*}}namespace-element-missing-kind.json'
-// NAMESPACE-ELEMENT-MISSING-KIND-NEXT: reading IdTable from field 'id_table'
-// NAMESPACE-ELEMENT-MISSING-KIND-NEXT: reading EntityIdTable entry from index '0'
-// NAMESPACE-ELEMENT-MISSING-KIND-NEXT: reading EntityName from field 'name'
-// NAMESPACE-ELEMENT-MISSING-KIND-NEXT: reading NestedBuildNamespace from field 'namespace'
-// NAMESPACE-ELEMENT-MISSING-KIND-NEXT: reading BuildNamespace from index '0'
-// NAMESPACE-ELEMENT-MISSING-KIND-NEXT: failed to read BuildNamespaceKind from field 'kind': expected JSON string
-
-// RUN: not clang-ssaf-format --type lu %S/Inputs/namespace-element-invalid-kind.json 2>&1 \
-// RUN:   | FileCheck %s --match-full-lines --check-prefix=NAMESPACE-ELEMENT-INVALID-KIND
-// RUN: not clang-ssaf-format --type lu --encoding %S/Inputs/namespace-element-invalid-kind.json 2>&1 \
-// RUN:   | FileCheck %s --match-full-lines --check-prefix=NAMESPACE-ELEMENT-INVALID-KIND
-// NAMESPACE-ELEMENT-INVALID-KIND:      clang-ssaf-format: error: reading LUSummary from file '{{.*}}namespace-element-invalid-kind.json'
-// NAMESPACE-ELEMENT-INVALID-KIND-NEXT: reading IdTable from field 'id_table'
-// NAMESPACE-ELEMENT-INVALID-KIND-NEXT: reading EntityIdTable entry from index '0'
-// NAMESPACE-ELEMENT-INVALID-KIND-NEXT: reading EntityName from field 'name'
-// NAMESPACE-ELEMENT-INVALID-KIND-NEXT: reading NestedBuildNamespace from field 'namespace'
-// NAMESPACE-ELEMENT-INVALID-KIND-NEXT: reading BuildNamespace from index '0'
-// NAMESPACE-ELEMENT-INVALID-KIND-NEXT: reading BuildNamespaceKind from field 'kind'
-// NAMESPACE-ELEMENT-INVALID-KIND-NEXT: invalid BuildNamespaceKind value 'invalid_kind' for field 'kind'
-
 // RUN: not clang-ssaf-format --type lu %S/Inputs/namespace-element-missing-name.json 2>&1 \
 // RUN:   | FileCheck %s --match-full-lines --check-prefix=NAMESPACE-ELEMENT-MISSING-NAME
 // RUN: not clang-ssaf-format --type lu --encoding %S/Inputs/namespace-element-missing-name.json 2>&1 \
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/permissions.test b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/permissions.test
index 0d2db01a471db..7d5dd42a6fb7b 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/permissions.test
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/permissions.test
@@ -20,7 +20,7 @@
 // No read permission
 // ============================================================================
 
-// RUN: echo '{"lu_namespace": [{"kind": "LinkUnit", "name": "test.exe"}], "id_table": [], "linkage_table": [], "data": []}' > %t/no-read-permission.json
+// RUN: echo '{"lu_namespace": [{"name": "test.exe"}], "id_table": [], "linkage_table": [], "data": []}' > %t/no-read-permission.json
 // RUN: chmod -r %t/no-read-permission.json
 // RUN: not clang-ssaf-format --type lu %t/no-read-permission.json 2>&1 \
 // RUN:   | FileCheck %s --match-full-lines --check-prefix=NO-READ-PERMISSION
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/top-level.test b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/top-level.test
index 933a9227446a2..262dd2c4304ed 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/top-level.test
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/top-level.test
@@ -23,25 +23,6 @@
 // LU-NAMESPACE-ELEMENT-NOT-OBJECT-NEXT: reading NestedBuildNamespace from field 'lu_namespace'
 // LU-NAMESPACE-ELEMENT-NOT-OBJECT-NEXT: failed to read BuildNamespace from index '0': expected JSON object
 
-// RUN: not clang-ssaf-format --type lu %S/Inputs/lu-namespace-element-missing-kind.json 2>&1 \
-// RUN:   | FileCheck %s --match-full-lines --check-prefix=LU-NAMESPACE-ELEMENT-MISSING-KIND
-// RUN: not clang-ssaf-format --type lu --encoding %S/Inputs/lu-namespace-element-missing-kind.json 2>&1 \
-// RUN:   | FileCheck %s --match-full-lines --check-prefix=LU-NAMESPACE-ELEMENT-MISSING-KIND
-// LU-NAMESPACE-ELEMENT-MISSING-KIND:      clang-ssaf-format: error: reading LUSummary from file '{{.*}}lu-namespace-element-missing-kind.json'
-// LU-NAMESPACE-ELEMENT-MISSING-KIND-NEXT: reading NestedBuildNamespace from field 'lu_namespace'
-// LU-NAMESPACE-ELEMENT-MISSING-KIND-NEXT: reading BuildNamespace from index '0'
-// LU-NAMESPACE-ELEMENT-MISSING-KIND-NEXT: failed to read BuildNamespaceKind from field 'kind': expected JSON string
-
-// RUN: not clang-ssaf-format --type lu %S/Inputs/lu-namespace-element-invalid-kind.json 2>&1 \
-// RUN:   | FileCheck %s --match-full-lines --check-prefix=LU-NAMESPACE-ELEMENT-INVALID-KIND
-// RUN: not clang-ssaf-format --type lu --encoding %S/Inputs/lu-namespace-element-invalid-kind.json 2>&1 \
-// RUN:   | FileCheck %s --match-full-lines --check-prefix=LU-NAMESPACE-ELEMENT-INVALID-KIND
-// LU-NAMESPACE-ELEMENT-INVALID-KIND:      clang-ssaf-format: error: reading LUSummary from file '{{.*}}lu-namespace-element-invalid-kind.json'
-// LU-NAMESPACE-ELEMENT-INVALID-KIND-NEXT: reading NestedBuildNamespace from field 'lu_namespace'
-// LU-NAMESPACE-ELEMENT-INVALID-KIND-NEXT: reading BuildNamespace from index '0'
-// LU-NAMESPACE-ELEMENT-INVALID-KIND-NEXT: reading BuildNamespaceKind from field 'kind'
-// LU-NAMESPACE-ELEMENT-INVALID-KIND-NEXT: invalid BuildNamespaceKind value 'invalid_kind' for field 'kind'
-
 // RUN: not clang-ssaf-format --type lu %S/Inputs/lu-namespace-element-missing-name.json 2>&1 \
 // RUN:   | FileCheck %s --match-full-lines --check-prefix=LU-NAMESPACE-ELEMENT-MISSING-NAME
 // RUN: not clang-ssaf-format --type lu --encoding %S/Inputs/lu-namespace-element-missing-name.json 2>&1 \
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/duplicate-target-triple.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/duplicate-target-triple.json
index f3142832581fb..a812e51be6514 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/duplicate-target-triple.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/duplicate-target-triple.json
@@ -6,7 +6,6 @@
       "linkage_table": [],
       "lu_namespace": [
         {
-          "kind": "LinkUnit",
           "name": "libfoo"
         }
       ],
@@ -19,7 +18,6 @@
       "linkage_table": [],
       "lu_namespace": [
         {
-          "kind": "LinkUnit",
           "name": "libfoo"
         }
       ],
@@ -29,7 +27,6 @@
   ],
   "namespace": [
     {
-      "kind": "LinkUnit",
       "name": "libfoo"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-empty-lu-namespace.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-empty-lu-namespace.json
index a8bdc5e79da9b..d08c405133715 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-empty-lu-namespace.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-empty-lu-namespace.json
@@ -11,7 +11,6 @@
   ],
   "namespace": [
     {
-      "kind": "LinkUnit",
       "name": "libfoo"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-inner-error.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-inner-error.json
index 5b6b7413b1738..895bb7bc9c697 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-inner-error.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-inner-error.json
@@ -10,7 +10,6 @@
   ],
   "namespace": [
     {
-      "kind": "LinkUnit",
       "name": "libfoo"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-mismatched-type.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-mismatched-type.json
index c48d5a5cc3eb4..f8c38de14c0cf 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-mismatched-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-mismatched-type.json
@@ -6,7 +6,6 @@
       "linkage_table": [],
       "lu_namespace": [
         {
-          "kind": "LinkUnit",
           "name": "libfoo"
         }
       ],
@@ -16,7 +15,6 @@
   ],
   "namespace": [
     {
-      "kind": "LinkUnit",
       "name": "libfoo"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-missing-type.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-missing-type.json
index 3630d1843e243..25cbaeaee9528 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-missing-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-missing-type.json
@@ -6,7 +6,6 @@
       "linkage_table": [],
       "lu_namespace": [
         {
-          "kind": "LinkUnit",
           "name": "libfoo"
         }
       ],
@@ -15,7 +14,6 @@
   ],
   "namespace": [
     {
-      "kind": "LinkUnit",
       "name": "libfoo"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-namespace-mismatch.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-namespace-mismatch.json
index ab779950af56d..8851e0c3633a0 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-namespace-mismatch.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-namespace-mismatch.json
@@ -6,7 +6,6 @@
       "linkage_table": [],
       "lu_namespace": [
         {
-          "kind": "LinkUnit",
           "name": "libbar"
         }
       ],
@@ -16,7 +15,6 @@
   ],
   "namespace": [
     {
-      "kind": "LinkUnit",
       "name": "libfoo"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-not-object.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-not-object.json
index 8269b374cb602..7f1c2d01aa332 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-not-object.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-not-object.json
@@ -4,7 +4,6 @@
   ],
   "namespace": [
     {
-      "kind": "LinkUnit",
       "name": "libfoo"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/members-not-array.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/members-not-array.json
index 7b84c5635327a..f17f5e7662d47 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/members-not-array.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/members-not-array.json
@@ -2,7 +2,6 @@
   "members": {},
   "namespace": [
     {
-      "kind": "LinkUnit",
       "name": "libfoo"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/mismatched-type.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/mismatched-type.json
index 3d7f01538bee1..1f275573e703a 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/mismatched-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/mismatched-type.json
@@ -2,7 +2,6 @@
   "members": [],
   "namespace": [
     {
-      "kind": "LinkUnit",
       "name": "libfoo"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/missing-members.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/missing-members.json
index 5191a4f092f2d..ab8e12ed3573e 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/missing-members.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/missing-members.json
@@ -1,7 +1,6 @@
 {
   "namespace": [
     {
-      "kind": "LinkUnit",
       "name": "libfoo"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/missing-type.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/missing-type.json
index 79794ae546e1e..52427a0ef8c44 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/missing-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/missing-type.json
@@ -2,7 +2,6 @@
   "members": [],
   "namespace": [
     {
-      "kind": "LinkUnit",
       "name": "libfoo"
     }
   ]
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-empty-members.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-empty-members.json
index 1cd693b2fc8ce..909e88382cf3e 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-empty-members.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-empty-members.json
@@ -2,7 +2,6 @@
   "members": [],
   "namespace": [
     {
-      "kind": "LinkUnit",
       "name": "libfoo"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-multiple-members.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-multiple-members.json
index d1de17900eb84..284dd84afedf5 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-multiple-members.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-multiple-members.json
@@ -6,7 +6,6 @@
       "linkage_table": [],
       "lu_namespace": [
         {
-          "kind": "LinkUnit",
           "name": "libfoo"
         }
       ],
@@ -19,7 +18,6 @@
       "linkage_table": [],
       "lu_namespace": [
         {
-          "kind": "LinkUnit",
           "name": "libfoo"
         }
       ],
@@ -29,7 +27,6 @@
   ],
   "namespace": [
     {
-      "kind": "LinkUnit",
       "name": "libfoo"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-nonempty-members.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-nonempty-members.json
index dc00a24f0eaf0..f8de5ef655606 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-nonempty-members.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-nonempty-members.json
@@ -8,7 +8,6 @@
           "name": {
             "namespace": [
               {
-                "kind": "LinkUnit",
                 "name": "libfoo"
               }
             ],
@@ -27,7 +26,6 @@
       ],
       "lu_namespace": [
         {
-          "kind": "LinkUnit",
           "name": "libfoo"
         }
       ],
@@ -42,7 +40,6 @@
           "name": {
             "namespace": [
               {
-                "kind": "LinkUnit",
                 "name": "libfoo"
               }
             ],
@@ -61,7 +58,6 @@
       ],
       "lu_namespace": [
         {
-          "kind": "LinkUnit",
           "name": "libfoo"
         }
       ],
@@ -71,7 +67,6 @@
   ],
   "namespace": [
     {
-      "kind": "LinkUnit",
       "name": "libfoo"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-single-member.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-single-member.json
index bf7e570e21bf5..ff01a19f060ec 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-single-member.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-single-member.json
@@ -6,7 +6,6 @@
       "linkage_table": [],
       "lu_namespace": [
         {
-          "kind": "LinkUnit",
           "name": "libfoo"
         }
       ],
@@ -16,7 +15,6 @@
   ],
   "namespace": [
     {
-      "kind": "LinkUnit",
       "name": "libfoo"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-three-members.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-three-members.json
index ce123fe904dda..923498eaac7b2 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-three-members.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-three-members.json
@@ -6,7 +6,6 @@
       "linkage_table": [],
       "lu_namespace": [
         {
-          "kind": "LinkUnit",
           "name": "libfoo"
         }
       ],
@@ -19,7 +18,6 @@
       "linkage_table": [],
       "lu_namespace": [
         {
-          "kind": "LinkUnit",
           "name": "libfoo"
         }
       ],
@@ -32,7 +30,6 @@
       "linkage_table": [],
       "lu_namespace": [
         {
-          "kind": "LinkUnit",
           "name": "libfoo"
         }
       ],
@@ -42,7 +39,6 @@
   ],
   "namespace": [
     {
-      "kind": "LinkUnit",
       "name": "libfoo"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/unsorted-members-input.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/unsorted-members-input.json
index 3c47d9167107e..b731211428a7a 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/unsorted-members-input.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/unsorted-members-input.json
@@ -6,7 +6,6 @@
       "linkage_table": [],
       "lu_namespace": [
         {
-          "kind": "LinkUnit",
           "name": "libfoo"
         }
       ],
@@ -19,7 +18,6 @@
       "linkage_table": [],
       "lu_namespace": [
         {
-          "kind": "LinkUnit",
           "name": "libfoo"
         }
       ],
@@ -29,7 +27,6 @@
   ],
   "namespace": [
     {
-      "kind": "LinkUnit",
       "name": "libfoo"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/unsorted-three-members-input.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/unsorted-three-members-input.json
index ff5f5f88e134d..716d03bef5763 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/unsorted-three-members-input.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/unsorted-three-members-input.json
@@ -6,7 +6,6 @@
       "linkage_table": [],
       "lu_namespace": [
         {
-          "kind": "LinkUnit",
           "name": "libfoo"
         }
       ],
@@ -19,7 +18,6 @@
       "linkage_table": [],
       "lu_namespace": [
         {
-          "kind": "LinkUnit",
           "name": "libfoo"
         }
       ],
@@ -32,7 +30,6 @@
       "linkage_table": [],
       "lu_namespace": [
         {
-          "kind": "LinkUnit",
           "name": "libfoo"
         }
       ],
@@ -42,7 +39,6 @@
   ],
   "namespace": [
     {
-      "kind": "LinkUnit",
       "name": "libfoo"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/duplicate-target-triple.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/duplicate-target-triple.json
index 6c07b51e9823c..7d6acb3b300af 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/duplicate-target-triple.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/duplicate-target-triple.json
@@ -3,7 +3,6 @@
     {
       "members": [],
       "namespace": {
-        "kind": "StaticLibrary",
         "name": "libfoo"
       },
       "target_triple": "arm64-apple-macosx",
@@ -12,7 +11,6 @@
     {
       "members": [],
       "namespace": {
-        "kind": "StaticLibrary",
         "name": "libfoo"
       },
       "target_triple": "arm64-apple-macosx",
@@ -20,7 +18,6 @@
     }
   ],
   "namespace": {
-    "kind": "MultiArchStaticLibrary",
     "name": "libfoo"
   },
   "type": "MultiArchStaticLibrary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-inner-error.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-inner-error.json
index e71e2a42cf8cb..6a83bf08fdcf9 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-inner-error.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-inner-error.json
@@ -7,7 +7,6 @@
     }
   ],
   "namespace": {
-    "kind": "MultiArchStaticLibrary",
     "name": "libfoo"
   },
   "type": "MultiArchStaticLibrary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-mismatched-type.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-mismatched-type.json
index 5e92521f02260..7f0f274b9cdf5 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-mismatched-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-mismatched-type.json
@@ -3,7 +3,6 @@
     {
       "members": [],
       "namespace": {
-        "kind": "StaticLibrary",
         "name": "libfoo"
       },
       "target_triple": "arm64-apple-macosx",
@@ -11,7 +10,6 @@
     }
   ],
   "namespace": {
-    "kind": "MultiArchStaticLibrary",
     "name": "libfoo"
   },
   "type": "MultiArchStaticLibrary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-missing-type.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-missing-type.json
index 6422b9ce326e5..7325f95d42e93 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-missing-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-missing-type.json
@@ -3,14 +3,12 @@
     {
       "members": [],
       "namespace": {
-        "kind": "StaticLibrary",
         "name": "libfoo"
       },
       "target_triple": "arm64-apple-macosx"
     }
   ],
   "namespace": {
-    "kind": "MultiArchStaticLibrary",
     "name": "libfoo"
   },
   "type": "MultiArchStaticLibrary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-namespace-mismatch.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-namespace-mismatch.json
index 8b7f6cacd5937..f70acc6069174 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-namespace-mismatch.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-namespace-mismatch.json
@@ -3,7 +3,6 @@
     {
       "members": [],
       "namespace": {
-        "kind": "StaticLibrary",
         "name": "libbar"
       },
       "target_triple": "arm64-apple-macosx",
@@ -11,7 +10,6 @@
     }
   ],
   "namespace": {
-    "kind": "MultiArchStaticLibrary",
     "name": "libfoo"
   },
   "type": "MultiArchStaticLibrary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-not-object.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-not-object.json
index ccaa32242d329..99cdb1ebbd4b5 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-not-object.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-not-object.json
@@ -3,7 +3,6 @@
     "not an object"
   ],
   "namespace": {
-    "kind": "MultiArchStaticLibrary",
     "name": "libfoo"
   },
   "type": "MultiArchStaticLibrary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/members-not-array.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/members-not-array.json
index cb68c661a1d3a..a86b6e5f52ff5 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/members-not-array.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/members-not-array.json
@@ -1,7 +1,6 @@
 {
   "members": {},
   "namespace": {
-    "kind": "MultiArchStaticLibrary",
     "name": "libfoo"
   },
   "type": "MultiArchStaticLibrary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/mismatched-type.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/mismatched-type.json
index 390eb2a4cb0a9..f8b18cf9dc4c1 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/mismatched-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/mismatched-type.json
@@ -3,7 +3,6 @@
     "arm64": {
       "members": [],
       "namespace": {
-        "kind": "StaticLibrary",
         "name": "libfoo"
       },
       "target_triple": "arm64-apple-macosx",
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/missing-members.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/missing-members.json
index d3e3ac408164e..ca1fcbda51e9e 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/missing-members.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/missing-members.json
@@ -1,6 +1,5 @@
 {
   "namespace": {
-    "kind": "MultiArchStaticLibrary",
     "name": "libfoo"
   },
   "type": "MultiArchStaticLibrary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/missing-type.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/missing-type.json
index ea946be0839aa..c6014bb4a3aad 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/missing-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/missing-type.json
@@ -3,7 +3,6 @@
     "arm64": {
       "members": [],
       "namespace": {
-        "kind": "StaticLibrary",
         "name": "libfoo"
       },
       "target_triple": "arm64-apple-macosx",
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/namespace-wrong-kind.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/namespace-wrong-kind.json
deleted file mode 100644
index e5495e2551700..0000000000000
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/namespace-wrong-kind.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-  "members": [],
-  "namespace": {
-    "kind": "StaticLibrary",
-    "name": "libfoo"
-  },
-  "type": "MultiArchStaticLibrary"
-}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-empty-members.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-empty-members.json
index 13a106614f1e0..7a00014cb39e6 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-empty-members.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-empty-members.json
@@ -1,7 +1,6 @@
 {
   "members": [],
   "namespace": {
-    "kind": "MultiArchStaticLibrary",
     "name": "libfoo"
   },
   "type": "MultiArchStaticLibrary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-multiple-members.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-multiple-members.json
index ab9f2744b8e78..27103c888f1df 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-multiple-members.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-multiple-members.json
@@ -3,7 +3,6 @@
     {
       "members": [],
       "namespace": {
-        "kind": "StaticLibrary",
         "name": "libfoo"
       },
       "target_triple": "arm64-apple-macosx",
@@ -12,7 +11,6 @@
     {
       "members": [],
       "namespace": {
-        "kind": "StaticLibrary",
         "name": "libfoo"
       },
       "target_triple": "x86_64-apple-macosx",
@@ -20,7 +18,6 @@
     }
   ],
   "namespace": {
-    "kind": "MultiArchStaticLibrary",
     "name": "libfoo"
   },
   "type": "MultiArchStaticLibrary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-nonempty-members.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-nonempty-members.json
index 5a76aef859774..907aaff7090c7 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-nonempty-members.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-nonempty-members.json
@@ -8,14 +8,12 @@
           "linkage_table": [],
           "target_triple": "arm64-apple-macosx",
           "tu_namespace": {
-            "kind": "CompilationUnit",
             "name": "a.cpp"
           },
           "type": "TUSummary"
         }
       ],
       "namespace": {
-        "kind": "StaticLibrary",
         "name": "libfoo"
       },
       "target_triple": "arm64-apple-macosx",
@@ -29,14 +27,12 @@
           "linkage_table": [],
           "target_triple": "x86_64-apple-macosx",
           "tu_namespace": {
-            "kind": "CompilationUnit",
             "name": "a.cpp"
           },
           "type": "TUSummary"
         }
       ],
       "namespace": {
-        "kind": "StaticLibrary",
         "name": "libfoo"
       },
       "target_triple": "x86_64-apple-macosx",
@@ -44,7 +40,6 @@
     }
   ],
   "namespace": {
-    "kind": "MultiArchStaticLibrary",
     "name": "libfoo"
   },
   "type": "MultiArchStaticLibrary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-single-member.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-single-member.json
index dfe68cef81677..fa83e9f72ca17 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-single-member.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-single-member.json
@@ -3,7 +3,6 @@
     {
       "members": [],
       "namespace": {
-        "kind": "StaticLibrary",
         "name": "libfoo"
       },
       "target_triple": "arm64-apple-macosx",
@@ -11,7 +10,6 @@
     }
   ],
   "namespace": {
-    "kind": "MultiArchStaticLibrary",
     "name": "libfoo"
   },
   "type": "MultiArchStaticLibrary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-three-members.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-three-members.json
index 2b85071edaecb..7c2ba45acffa8 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-three-members.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-three-members.json
@@ -3,7 +3,6 @@
     {
       "members": [],
       "namespace": {
-        "kind": "StaticLibrary",
         "name": "libfoo"
       },
       "target_triple": "arm64-apple-macosx",
@@ -12,7 +11,6 @@
     {
       "members": [],
       "namespace": {
-        "kind": "StaticLibrary",
         "name": "libfoo"
       },
       "target_triple": "arm64_32-apple-macosx",
@@ -21,7 +19,6 @@
     {
       "members": [],
       "namespace": {
-        "kind": "StaticLibrary",
         "name": "libfoo"
       },
       "target_triple": "x86_64-apple-macosx",
@@ -29,7 +26,6 @@
     }
   ],
   "namespace": {
-    "kind": "MultiArchStaticLibrary",
     "name": "libfoo"
   },
   "type": "MultiArchStaticLibrary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/unsorted-members-input.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/unsorted-members-input.json
index b7a23875432f2..fc24652222dab 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/unsorted-members-input.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/unsorted-members-input.json
@@ -3,7 +3,6 @@
     {
       "members": [],
       "namespace": {
-        "kind": "StaticLibrary",
         "name": "libfoo"
       },
       "target_triple": "x86_64-apple-macosx",
@@ -12,7 +11,6 @@
     {
       "members": [],
       "namespace": {
-        "kind": "StaticLibrary",
         "name": "libfoo"
       },
       "target_triple": "arm64-apple-macosx",
@@ -20,7 +18,6 @@
     }
   ],
   "namespace": {
-    "kind": "MultiArchStaticLibrary",
     "name": "libfoo"
   },
   "type": "MultiArchStaticLibrary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/unsorted-three-members-input.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/unsorted-three-members-input.json
index 74ee6fe49e82c..e861340b77487 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/unsorted-three-members-input.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/unsorted-three-members-input.json
@@ -3,7 +3,6 @@
     {
       "members": [],
       "namespace": {
-        "kind": "StaticLibrary",
         "name": "libfoo"
       },
       "target_triple": "x86_64-apple-macosx",
@@ -12,7 +11,6 @@
     {
       "members": [],
       "namespace": {
-        "kind": "StaticLibrary",
         "name": "libfoo"
       },
       "target_triple": "arm64-apple-macosx",
@@ -21,7 +19,6 @@
     {
       "members": [],
       "namespace": {
-        "kind": "StaticLibrary",
         "name": "libfoo"
       },
       "target_triple": "arm64_32-apple-macosx",
@@ -29,7 +26,6 @@
     }
   ],
   "namespace": {
-    "kind": "MultiArchStaticLibrary",
     "name": "libfoo"
   },
   "type": "MultiArchStaticLibrary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/top-level.test b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/top-level.test
index d233465f9fd62..95cf8c456f315 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/top-level.test
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/top-level.test
@@ -33,12 +33,6 @@
 // NAMESPACE-NOT-OBJECT:      clang-ssaf-format: error: reading MultiArchStaticLibrary from file '{{.*}}namespace-not-object.json'
 // NAMESPACE-NOT-OBJECT-NEXT: failed to read BuildNamespace from field 'namespace': expected JSON object
 
-// The namespace kind must be MultiArchStaticLibrary.
-// RUN: not clang-ssaf-format --type multi-arch-static-library %S/Inputs/namespace-wrong-kind.json 2>&1 \
-// RUN:   | FileCheck %s --match-full-lines --check-prefix=NAMESPACE-WRONG-KIND
-// NAMESPACE-WRONG-KIND:      clang-ssaf-format: error: reading MultiArchStaticLibrary from file '{{.*}}namespace-wrong-kind.json'
-// NAMESPACE-WRONG-KIND-NEXT: expected 'MultiArchStaticLibrary' for field 'namespace.kind' but got 'StaticLibrary'
-
 // ============================================================================
 // members field errors
 // ============================================================================
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/duplicate-member.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/duplicate-member.json
index e3ea75ba7024c..dbbac249a455c 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/duplicate-member.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/duplicate-member.json
@@ -2,7 +2,6 @@
   "type": "StaticLibrary",
   "target_triple": "arm64-apple-macosx",
   "namespace": {
-    "kind": "StaticLibrary",
     "name": "libfoo"
   },
   "members": [
@@ -10,7 +9,6 @@
       "type": "TUSummary",
       "target_triple": "arm64-apple-macosx",
       "tu_namespace": {
-        "kind": "CompilationUnit",
         "name": "a.cpp"
       },
       "id_table": [],
@@ -21,7 +19,6 @@
       "type": "TUSummary",
       "target_triple": "arm64-apple-macosx",
       "tu_namespace": {
-        "kind": "CompilationUnit",
         "name": "a.cpp"
       },
       "id_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-inner-error.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-inner-error.json
index 5134814e4166a..2131485dad88c 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-inner-error.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-inner-error.json
@@ -9,7 +9,6 @@
     }
   ],
   "namespace": {
-    "kind": "StaticLibrary",
     "name": "libfoo"
   },
   "target_triple": "arm64-apple-macosx",
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-mismatched-type.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-mismatched-type.json
index cf85ec21d0d4e..7572b3bec7cc7 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-mismatched-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-mismatched-type.json
@@ -2,7 +2,6 @@
   "type": "StaticLibrary",
   "target_triple": "arm64-apple-macosx",
   "namespace": {
-    "kind": "StaticLibrary",
     "name": "libfoo"
   },
   "members": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-missing-type.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-missing-type.json
index 3ba536ee869f6..65699548acbb8 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-missing-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-missing-type.json
@@ -3,7 +3,6 @@
     {
       "target_triple": "arm64-apple-macosx",
       "tu_namespace": {
-        "kind": "CompilationUnit",
         "name": "a.cpp"
       },
       "id_table": [],
@@ -12,7 +11,6 @@
     }
   ],
   "namespace": {
-    "kind": "StaticLibrary",
     "name": "libfoo"
   },
   "target_triple": "arm64-apple-macosx",
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-not-object.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-not-object.json
index d62af500c4b04..b7edf883d8ae7 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-not-object.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-not-object.json
@@ -2,7 +2,6 @@
   "type": "StaticLibrary",
   "target_triple": "arm64-apple-macosx",
   "namespace": {
-    "kind": "StaticLibrary",
     "name": "libfoo"
   },
   "members": ["not an object"]
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-triple-mismatch.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-triple-mismatch.json
index 39a8c23970d1d..51ba3d0208eaf 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-triple-mismatch.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-triple-mismatch.json
@@ -2,7 +2,6 @@
   "type": "StaticLibrary",
   "target_triple": "arm64-apple-macosx",
   "namespace": {
-    "kind": "StaticLibrary",
     "name": "libfoo"
   },
   "members": [
@@ -10,7 +9,6 @@
       "type": "TUSummary",
       "target_triple": "x86_64-apple-macosx",
       "tu_namespace": {
-        "kind": "CompilationUnit",
         "name": "a.cpp"
       },
       "id_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/members-not-array.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/members-not-array.json
index 1686e7ac517b4..b766cc29c667d 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/members-not-array.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/members-not-array.json
@@ -2,7 +2,6 @@
   "type": "StaticLibrary",
   "target_triple": "arm64-apple-macosx",
   "namespace": {
-    "kind": "StaticLibrary",
     "name": "libfoo"
   },
   "members": {}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/mismatched-type.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/mismatched-type.json
index 5c754996b18ce..736d1bc418813 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/mismatched-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/mismatched-type.json
@@ -2,7 +2,6 @@
   "type": "TUSummary",
   "target_triple": "arm64-apple-macosx",
   "namespace": {
-    "kind": "StaticLibrary",
     "name": "libfoo"
   },
   "members": []
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/missing-members.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/missing-members.json
index 6f5059edaac85..243b15827dd74 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/missing-members.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/missing-members.json
@@ -2,7 +2,6 @@
   "type": "StaticLibrary",
   "target_triple": "arm64-apple-macosx",
   "namespace": {
-    "kind": "StaticLibrary",
     "name": "libfoo"
   }
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/missing-target-triple.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/missing-target-triple.json
index 6ab76fc69aa0c..aa3d2fff0f438 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/missing-target-triple.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/missing-target-triple.json
@@ -1,7 +1,6 @@
 {
   "type": "StaticLibrary",
   "namespace": {
-    "kind": "StaticLibrary",
     "name": "libfoo"
   },
   "members": []
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/missing-type.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/missing-type.json
index 9e470063d7865..57bf90e759aa5 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/missing-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/missing-type.json
@@ -1,7 +1,6 @@
 {
   "target_triple": "arm64-apple-macosx",
   "namespace": {
-    "kind": "StaticLibrary",
     "name": "libfoo"
   },
   "members": []
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/namespace-invalid-kind.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/namespace-invalid-kind.json
deleted file mode 100644
index 5e96399f34387..0000000000000
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/namespace-invalid-kind.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-  "type": "StaticLibrary",
-  "target_triple": "arm64-apple-macosx",
-  "namespace": {
-    "kind": "invalid_kind",
-    "name": "libfoo"
-  },
-  "members": []
-}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/namespace-missing-kind.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/namespace-missing-kind.json
deleted file mode 100644
index 7aa0a00cdc4a2..0000000000000
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/namespace-missing-kind.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-  "type": "StaticLibrary",
-  "target_triple": "arm64-apple-macosx",
-  "namespace": {
-    "name": "libfoo"
-  },
-  "members": []
-}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/namespace-missing-name.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/namespace-missing-name.json
index 750e310763ee9..2b82cda3803b9 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/namespace-missing-name.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/namespace-missing-name.json
@@ -1,8 +1,6 @@
 {
   "type": "StaticLibrary",
   "target_triple": "arm64-apple-macosx",
-  "namespace": {
-    "kind": "StaticLibrary"
-  },
+  "namespace": {},
   "members": []
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/namespace-wrong-kind.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/namespace-wrong-kind.json
deleted file mode 100644
index 073cd4a505d2f..0000000000000
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/namespace-wrong-kind.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-  "type": "StaticLibrary",
-  "target_triple": "arm64-apple-macosx",
-  "namespace": {
-    "kind": "CompilationUnit",
-    "name": "libfoo"
-  },
-  "members": []
-}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/not-normalized-target-triple.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/not-normalized-target-triple.json
index f9b0c3351c0ee..3892e949ec1e1 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/not-normalized-target-triple.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/not-normalized-target-triple.json
@@ -2,7 +2,6 @@
   "type": "StaticLibrary",
   "target_triple": "arm64-macosx-apple",
   "namespace": {
-    "kind": "StaticLibrary",
     "name": "libfoo"
   },
   "members": []
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/rt-empty.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/rt-empty.json
index 3059d007a2e9e..b507063b8178a 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/rt-empty.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/rt-empty.json
@@ -1,7 +1,6 @@
 {
   "members": [],
   "namespace": {
-    "kind": "StaticLibrary",
     "name": "libempty"
   },
   "target_triple": "arm64-apple-macosx",
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/rt-multiple-members.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/rt-multiple-members.json
index 7e1636d2740c8..e0a77a51df2ce 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/rt-multiple-members.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/rt-multiple-members.json
@@ -6,7 +6,6 @@
       "linkage_table": [],
       "target_triple": "arm64-apple-macosx",
       "tu_namespace": {
-        "kind": "CompilationUnit",
         "name": "a.cpp"
       },
       "type": "TUSummary"
@@ -17,7 +16,6 @@
       "linkage_table": [],
       "target_triple": "arm64-apple-macosx",
       "tu_namespace": {
-        "kind": "CompilationUnit",
         "name": "b.cpp"
       },
       "type": "TUSummary"
@@ -28,14 +26,12 @@
       "linkage_table": [],
       "target_triple": "arm64-apple-macosx",
       "tu_namespace": {
-        "kind": "CompilationUnit",
         "name": "c.cpp"
       },
       "type": "TUSummary"
     }
   ],
   "namespace": {
-    "kind": "StaticLibrary",
     "name": "libmulti"
   },
   "target_triple": "arm64-apple-macosx",
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/rt-single-member.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/rt-single-member.json
index 7ad6021fbc447..b930f420a8908 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/rt-single-member.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/rt-single-member.json
@@ -6,14 +6,12 @@
       "linkage_table": [],
       "target_triple": "arm64-apple-macosx",
       "tu_namespace": {
-        "kind": "CompilationUnit",
         "name": "a.cpp"
       },
       "type": "TUSummary"
     }
   ],
   "namespace": {
-    "kind": "StaticLibrary",
     "name": "libfoo"
   },
   "target_triple": "arm64-apple-macosx",
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/unsorted-members-input.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/unsorted-members-input.json
index fb6820ca7a07d..14b5d2ace17ae 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/unsorted-members-input.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/unsorted-members-input.json
@@ -6,7 +6,6 @@
       "linkage_table": [],
       "target_triple": "arm64-apple-macosx",
       "tu_namespace": {
-        "kind": "CompilationUnit",
         "name": "c.cpp"
       },
       "type": "TUSummary"
@@ -17,7 +16,6 @@
       "linkage_table": [],
       "target_triple": "arm64-apple-macosx",
       "tu_namespace": {
-        "kind": "CompilationUnit",
         "name": "a.cpp"
       },
       "type": "TUSummary"
@@ -28,14 +26,12 @@
       "linkage_table": [],
       "target_triple": "arm64-apple-macosx",
       "tu_namespace": {
-        "kind": "CompilationUnit",
         "name": "b.cpp"
       },
       "type": "TUSummary"
     }
   ],
   "namespace": {
-    "kind": "StaticLibrary",
     "name": "libmulti"
   },
   "target_triple": "arm64-apple-macosx",
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/top-level.test b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/top-level.test
index a27496f2681e6..2c60a0861a6b6 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/top-level.test
+++ b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/top-level.test
@@ -41,27 +41,6 @@
 // MISSING-NAMESPACE:      clang-ssaf-format: error: reading StaticLibrary from file '{{.*}}missing-namespace.json'
 // MISSING-NAMESPACE-NEXT: failed to read BuildNamespace from field 'namespace': expected JSON object
 
-// RUN: not clang-ssaf-format --type static-library %S/Inputs/namespace-missing-kind.json 2>&1 \
-// RUN:   | FileCheck %s --match-full-lines --check-prefix=NAMESPACE-MISSING-KIND
-// NAMESPACE-MISSING-KIND:      clang-ssaf-format: error: reading StaticLibrary from file '{{.*}}namespace-missing-kind.json'
-// NAMESPACE-MISSING-KIND-NEXT: reading BuildNamespace from field 'namespace'
-// NAMESPACE-MISSING-KIND-NEXT: failed to read BuildNamespaceKind from field 'kind': expected JSON string
-
-// RUN: not clang-ssaf-format --type static-library %S/Inputs/namespace-invalid-kind.json 2>&1 \
-// RUN:   | FileCheck %s --match-full-lines --check-prefix=NAMESPACE-INVALID-KIND
-// NAMESPACE-INVALID-KIND:      clang-ssaf-format: error: reading StaticLibrary from file '{{.*}}namespace-invalid-kind.json'
-// NAMESPACE-INVALID-KIND-NEXT: reading BuildNamespace from field 'namespace'
-// NAMESPACE-INVALID-KIND-NEXT: reading BuildNamespaceKind from field 'kind'
-// NAMESPACE-INVALID-KIND-NEXT: invalid BuildNamespaceKind value 'invalid_kind' for field 'kind'
-
-// StaticLibrary's namespace field must specifically have kind=StaticLibrary.
-// Any other well-formed kind (CompilationUnit, LinkUnit) is reported as a
-// mismatch.
-// RUN: not clang-ssaf-format --type static-library %S/Inputs/namespace-wrong-kind.json 2>&1 \
-// RUN:   | FileCheck %s --match-full-lines --check-prefix=NAMESPACE-WRONG-KIND
-// NAMESPACE-WRONG-KIND:      clang-ssaf-format: error: reading StaticLibrary from file '{{.*}}namespace-wrong-kind.json'
-// NAMESPACE-WRONG-KIND-NEXT: expected 'StaticLibrary' for field 'namespace.kind' but got 'CompilationUnit'
-
 // RUN: not clang-ssaf-format --type static-library %S/Inputs/namespace-missing-name.json 2>&1 \
 // RUN:   | FileCheck %s --match-full-lines --check-prefix=NAMESPACE-MISSING-NAME
 // NAMESPACE-MISSING-NAME:      clang-ssaf-format: error: reading StaticLibrary from file '{{.*}}namespace-missing-name.json'
@@ -122,4 +101,4 @@
 // RUN: not clang-ssaf-format --type static-library %S/Inputs/duplicate-member.json 2>&1 \
 // RUN:   | FileCheck %s --match-full-lines --check-prefix=DUPLICATE-MEMBER
 // DUPLICATE-MEMBER:      clang-ssaf-format: error: reading StaticLibrary from file '{{.*}}duplicate-member.json'
-// DUPLICATE-MEMBER-NEXT: failed to insert StaticLibrary member at index '1': encountered duplicate 'BuildNamespace(CompilationUnit, a.cpp)'
+// DUPLICATE-MEMBER-NEXT: failed to insert StaticLibrary member at index '1': encountered duplicate 'BuildNamespace(a.cpp)'
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-element-not-object.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-element-not-object.json
index c7493f7e44b63..0ce52632d82e1 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-element-not-object.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-element-not-object.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-entry-missing-data.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-entry-missing-data.json
index e4f8167c42c68..38e8c04ee29f1 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-entry-missing-data.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-entry-missing-data.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-entry-missing-summary-name.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-entry-missing-summary-name.json
index e2b47108e352c..4a5d498762543 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-entry-missing-summary-name.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-entry-missing-summary-name.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-not-array.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-not-array.json
index d386cc4d01feb..f755bb98a759d 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-not-array.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-not-array.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/duplicate-entity-id-in-data-map.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/duplicate-entity-id-in-data-map.json
index a4d6723f0c595..7b4c3b399a5ad 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/duplicate-entity-id-in-data-map.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/duplicate-entity-id-in-data-map.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/duplicate-entity.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/duplicate-entity.json
index 16e47f09d2a00..bc0611bde6f65 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/duplicate-entity.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/duplicate-entity.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [
@@ -22,11 +21,11 @@
   "linkage_table": [
     {
       "id": 0,
-      "linkage": { "type": "Internal" }
+      "linkage": {"type": "Internal"}
     },
     {
       "id": 1,
-      "linkage": { "type": "External" }
+      "linkage": {"type": "External"}
     }
   ],
   "data": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/duplicate-summary-name.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/duplicate-summary-name.json
index c8051f1c65957..752578a9cb1c4 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/duplicate-summary-name.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/duplicate-summary-name.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-data-element-not-object.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-data-element-not-object.json
index 53ca9af49e1d2..6832e27c01d64 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-data-element-not-object.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-data-element-not-object.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-data-missing-entity-id.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-data-missing-entity-id.json
index 5510ddccda80e..10341a30363c0 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-data-missing-entity-id.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-data-missing-entity-id.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-data-missing-entity-summary.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-data-missing-entity-summary.json
index add0a42a0efa6..aab301cd67b65 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-data-missing-entity-summary.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-data-missing-entity-summary.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-id-not-uint64.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-id-not-uint64.json
index 4d3b958f56b2c..5ebddf9bea8a6 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-id-not-uint64.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-id-not-uint64.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-name-missing-suffix.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-name-missing-suffix.json
index a9b793c706697..9fd93ef2f624c 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-name-missing-suffix.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-name-missing-suffix.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [
@@ -14,7 +13,7 @@
   "linkage_table": [
     {
       "id": 0,
-      "linkage": { "type": "External" }
+      "linkage": {"type": "External"}
     }
   ],
   "data": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-name-missing-usr.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-name-missing-usr.json
index d32cf5c7ff188..7cdfd88f80530 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-name-missing-usr.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-name-missing-usr.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [
@@ -14,7 +13,7 @@
   "linkage_table": [
     {
       "id": 0,
-      "linkage": { "type": "Internal" }
+      "linkage": {"type": "Internal"}
     }
   ],
   "data": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-element-not-object.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-element-not-object.json
index 6a0f8b77c09e6..0ee127e912b4e 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-element-not-object.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-element-not-object.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [123],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-entry-id-not-uint64.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-entry-id-not-uint64.json
index b08b426f3c411..a388bc0bcb198 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-entry-id-not-uint64.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-entry-id-not-uint64.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-entry-missing-id.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-entry-missing-id.json
index b6cdea259939a..9fb7613559aae 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-entry-missing-id.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-entry-missing-id.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-entry-missing-name.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-entry-missing-name.json
index 12b52496f3c04..0f5b77c967045 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-entry-missing-name.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-entry-missing-name.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [
@@ -11,7 +10,7 @@
   "linkage_table": [
     {
       "id": 0,
-      "linkage": { "type": "None" }
+      "linkage": {"type": "None"}
     }
   ],
   "data": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-not-array.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-not-array.json
index 098595093e1e0..8df85bf5c2c0c 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-not-array.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-not-array.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": {},
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/invalid-kind.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/invalid-kind.json
deleted file mode 100644
index a13fa2fe6bf42..0000000000000
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/invalid-kind.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-  "tu_namespace": {
-    "kind": "invalid_kind",
-    "name": "test.cpp"
-  },
-  "id_table": [],
-  "linkage_table": [],
-  "data": [],
-  "target_triple": "arm64-apple-macosx",
-  "type": "TUSummary"
-}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-duplicate-id.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-duplicate-id.json
index 2e3cd065e82d9..e9d95a4b07617 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-duplicate-id.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-duplicate-id.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [
@@ -15,11 +14,11 @@
   "linkage_table": [
     {
       "id": 0,
-      "linkage": { "type": "External" }
+      "linkage": {"type": "External"}
     },
     {
       "id": 0,
-      "linkage": { "type": "Internal" }
+      "linkage": {"type": "Internal"}
     }
   ],
   "data": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-element-not-object.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-element-not-object.json
index b08e22e2bbd7e..a85050e639d36 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-element-not-object.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-element-not-object.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-id-not-uint64.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-id-not-uint64.json
index fde6f8b169cda..fb4b364e3efb5 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-id-not-uint64.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-id-not-uint64.json
@@ -1,13 +1,12 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [],
   "linkage_table": [
     {
       "id": "not_a_number",
-      "linkage": { "type": "External" }
+      "linkage": {"type": "External"}
     }
   ],
   "data": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-linkage-invalid-type.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-linkage-invalid-type.json
index c9cabba10173e..51bb9066d05c2 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-linkage-invalid-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-linkage-invalid-type.json
@@ -1,13 +1,12 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [],
   "linkage_table": [
     {
       "id": 0,
-      "linkage": { "type": "invalid_type" }
+      "linkage": {"type": "invalid_type"}
     }
   ],
   "data": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-linkage-missing-type.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-linkage-missing-type.json
index 8fdc7c7bb18f0..053c71eead77b 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-linkage-missing-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-linkage-missing-type.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-missing-id.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-missing-id.json
index 597db631bfd60..926d517187d9d 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-missing-id.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-missing-id.json
@@ -1,12 +1,11 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [],
   "linkage_table": [
     {
-      "linkage": { "type": "External" }
+      "linkage": {"type": "External"}
     }
   ],
   "data": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-missing-linkage.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-missing-linkage.json
index 05654ecff98cd..72a87764a9945 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-missing-linkage.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-missing-linkage.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-extra-id.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-extra-id.json
index e0d15d64a0d26..5ee0ef7945da4 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-extra-id.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-extra-id.json
@@ -1,13 +1,12 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [],
   "linkage_table": [
     {
       "id": 0,
-      "linkage": { "type": "External" }
+      "linkage": {"type": "External"}
     }
   ],
   "data": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-missing-id.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-missing-id.json
index 0ba968150772b..7290bce38f712 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-missing-id.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-missing-id.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-not-array.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-not-array.json
index 5823203d8a78a..c55b30305fda4 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-not-array.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-not-array.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/mismatched-type.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/mismatched-type.json
index ff8de5a3b8d18..67dd44780ebaf 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/mismatched-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/mismatched-type.json
@@ -4,7 +4,6 @@
   "linkage_table": [],
   "target_triple": "arm64-apple-macosx",
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "type": "LUSummary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-data.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-data.json
index acf745874f98c..17640787d0563 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-data.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-data.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-id-table.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-id-table.json
index 32cd4e5fd8374..2588bfeb56e58 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-id-table.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-id-table.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "data": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-kind.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-kind.json
deleted file mode 100644
index 5123eee3b4635..0000000000000
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-kind.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
-  "id_table": [],
-  "linkage_table": [],
-  "data": [],
-  "target_triple": "arm64-apple-macosx",
-  "type": "TUSummary"
-}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-linkage-table.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-linkage-table.json
index d9a5e0c2c417f..4c5662bb34d0a 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-linkage-table.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-linkage-table.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-name.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-name.json
index 2bc2b044beb83..46df20c658021 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-name.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-name.json
@@ -1,7 +1,5 @@
 {
-  "tu_namespace": {
-    "kind": "CompilationUnit"
-  },
+  "tu_namespace": {},
   "id_table": [],
   "linkage_table": [],
   "data": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-target-triple.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-target-triple.json
index 47f7230671601..a74ee92bb3002 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-target-triple.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-target-triple.json
@@ -3,7 +3,6 @@
   "id_table": [],
   "linkage_table": [],
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "type": "TUSummary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-type.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-type.json
index 3e7b173c4d486..200776105c0ab 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-type.json
@@ -4,7 +4,6 @@
   "linkage_table": [],
   "target_triple": "arm64-apple-macosx",
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   }
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/not-normalized-target-triple.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/not-normalized-target-triple.json
index aa98ebf6db8ee..9a48d5831bc69 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/not-normalized-target-triple.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/not-normalized-target-triple.json
@@ -4,7 +4,6 @@
   "linkage_table": [],
   "target_triple": "arm64-macosx-apple",
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "type": "TUSummary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-element-not-object.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-element-not-object.json
index 7859843bdadb2..0b29518f97cd5 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-element-not-object.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-element-not-object.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-invalid-first-field.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-invalid-first-field.json
index a5fdfb9159e59..9b17db36ed747 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-invalid-first-field.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-invalid-first-field.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-invalid-pairs-field-type.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-invalid-pairs-field-type.json
index 837478a480b03..3485487d768cc 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-invalid-pairs-field-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-invalid-pairs-field-type.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-invalid-second-field.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-invalid-second-field.json
index 2b90c19e7329b..c85f831bca7c5 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-invalid-second-field.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-invalid-second-field.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-missing-first-field.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-missing-first-field.json
index d9747413f533b..f53568bc68919 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-missing-first-field.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-missing-first-field.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-missing-pairs-field.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-missing-pairs-field.json
index 9032a351802bf..e694ecc2a55df 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-missing-pairs-field.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-missing-pairs-field.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-missing-second-field.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-missing-second-field.json
index 3c5df43fb79ba..3e4bb0da64c5e 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-missing-second-field.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-missing-second-field.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/read-entity-summary-no-format-info.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/read-entity-summary-no-format-info.json
index a84b3a0c8cf19..fae5ed99a8695 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/read-entity-summary-no-format-info.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/read-entity-summary-no-format-info.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "id_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-empty-data-entry.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-empty-data-entry.json
index 2ba2b6956602f..75bb74e71117a 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-empty-data-entry.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-empty-data-entry.json
@@ -9,7 +9,6 @@
   "linkage_table": [],
   "target_triple": "arm64-apple-macosx",
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "type": "TUSummary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-empty.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-empty.json
index f89161ea705e7..4283c249de14f 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-empty.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-empty.json
@@ -4,7 +4,6 @@
   "linkage_table": [],
   "target_triple": "arm64-apple-macosx",
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "type": "TUSummary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-link-unit.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-link-unit.json
index d61e83b130a07..5458aa1f60e41 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-link-unit.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-link-unit.json
@@ -4,7 +4,6 @@
   "linkage_table": [],
   "target_triple": "arm64-apple-macosx",
   "tu_namespace": {
-    "kind": "LinkUnit",
     "name": "libtest.so"
   },
   "type": "TUSummary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-external.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-external.json
index bb26bc0de603a..6260dafad4ed7 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-external.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-external.json
@@ -19,7 +19,6 @@
   ],
   "target_triple": "arm64-apple-macosx",
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "type": "TUSummary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-internal.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-internal.json
index f3aa427a9e239..e90fa8319d881 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-internal.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-internal.json
@@ -19,7 +19,6 @@
   ],
   "target_triple": "arm64-apple-macosx",
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "type": "TUSummary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-multiple.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-multiple.json
index c22c932ad2882..d725ff778c417 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-multiple.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-multiple.json
@@ -45,7 +45,6 @@
   ],
   "target_triple": "arm64-apple-macosx",
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "type": "TUSummary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-none.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-none.json
index 495890dc3cc44..fad1f78846cd4 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-none.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-none.json
@@ -19,7 +19,6 @@
   ],
   "target_triple": "arm64-apple-macosx",
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "type": "TUSummary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-two-summary-types.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-two-summary-types.json
index 080afccbdf482..c0a893e454c58 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-two-summary-types.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-two-summary-types.json
@@ -203,7 +203,6 @@
   ],
   "target_triple": "arm64-apple-macosx",
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "test.cpp"
   },
   "type": "TUSummary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/top-level.test b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/top-level.test
index a17ddbb6e64e3..989c9c03a3c6a 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/top-level.test
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/top-level.test
@@ -3,31 +3,10 @@
 
 // REQUIRES: plugins
 
-// ============================================================================
-// buildNamespaceKindFromJSON() errors
-// ============================================================================
-
-// RUN: not clang-ssaf-format --type tu %S/Inputs/invalid-kind.json 2>&1 \
-// RUN:   | FileCheck %s --match-full-lines --check-prefix=INVALID-KIND
-// RUN: not clang-ssaf-format --type tu --encoding %S/Inputs/invalid-kind.json 2>&1 \
-// RUN:   | FileCheck %s --match-full-lines --check-prefix=INVALID-KIND
-// INVALID-KIND:      clang-ssaf-format: error: reading TUSummary from file '{{.*}}invalid-kind.json'
-// INVALID-KIND-NEXT: reading BuildNamespace from field 'tu_namespace'
-// INVALID-KIND-NEXT: reading BuildNamespaceKind from field 'kind'
-// INVALID-KIND-NEXT: invalid BuildNamespaceKind value 'invalid_kind' for field 'kind'
-
 // ============================================================================
 // buildNamespaceFromJSON() errors
 // ============================================================================
 
-// RUN: not clang-ssaf-format --type tu %S/Inputs/missing-kind.json 2>&1 \
-// RUN:   | FileCheck %s --match-full-lines --check-prefix=MISSING-KIND
-// RUN: not clang-ssaf-format --type tu --encoding %S/Inputs/missing-kind.json 2>&1 \
-// RUN:   | FileCheck %s --match-full-lines --check-prefix=MISSING-KIND
-// MISSING-KIND:      clang-ssaf-format: error: reading TUSummary from file '{{.*}}missing-kind.json'
-// MISSING-KIND-NEXT: reading BuildNamespace from field 'tu_namespace'
-// MISSING-KIND-NEXT: failed to read BuildNamespaceKind from field 'kind': expected JSON string
-
 // RUN: not clang-ssaf-format --type tu %S/Inputs/missing-name.json 2>&1 \
 // RUN:   | FileCheck %s --match-full-lines --check-prefix=MISSING-NAME
 // RUN: not clang-ssaf-format --type tu --encoding %S/Inputs/missing-name.json 2>&1 \
diff --git a/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/pairs-result-bad-count.json b/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/pairs-result-bad-count.json
index 4cc1f4f3522ee..4f27038ec77e3 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/pairs-result-bad-count.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/pairs-result-bad-count.json
@@ -5,7 +5,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ],
@@ -18,7 +17,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/pairs-result-entry-not-object.json b/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/pairs-result-entry-not-object.json
index 3be3acba1aa77..7aef816304654 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/pairs-result-entry-not-object.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/pairs-result-entry-not-object.json
@@ -5,7 +5,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/pairs-result-missing-entity-id.json b/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/pairs-result-missing-entity-id.json
index 8eb3954a342e9..cb01905a81ea8 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/pairs-result-missing-entity-id.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/pairs-result-missing-entity-id.json
@@ -5,7 +5,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/rt-all-results.json b/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/rt-all-results.json
index 5b50a4da1dc98..849bd3d49c33d 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/rt-all-results.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/rt-all-results.json
@@ -5,7 +5,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ],
@@ -18,7 +17,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ],
@@ -31,7 +29,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/rt-multiple-results.json b/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/rt-multiple-results.json
index e07b8abf9e712..7bb8de6def3dd 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/rt-multiple-results.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/rt-multiple-results.json
@@ -5,7 +5,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "test.exe"
           }
         ],
diff --git a/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-1.json b/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-1.json
index 0fe78af8c28bb..32c573ee578e8 100644
--- a/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-1.json
+++ b/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-1.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "tu1.cpp"
   },
   "id_table": [
diff --git a/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-2.json b/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-2.json
index 48a7fbef570e6..f41426974a3d2 100644
--- a/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-2.json
+++ b/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-2.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "tu2.cpp"
   },
   "id_table": [
diff --git a/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-empty.json b/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-empty.json
index 2b4e9179934d5..8db2137f1de17 100644
--- a/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-empty.json
+++ b/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-empty.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "empty.cpp"
   },
   "id_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-invalid-entity-id-multikey.json b/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-invalid-entity-id-multikey.json
index a66be3036e31f..e92fc9c0e66be 100644
--- a/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-invalid-entity-id-multikey.json
+++ b/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-invalid-entity-id-multikey.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "invalid-entity-id-multikey.cpp"
   },
   "id_table": [
diff --git a/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-invalid-entity-id-ref.json b/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-invalid-entity-id-ref.json
index 535cc18dc10d5..4ef0df8a96b04 100644
--- a/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-invalid-entity-id-ref.json
+++ b/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-invalid-entity-id-ref.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "invalid-entity-id-ref.cpp"
   },
   "id_table": [
diff --git a/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-invalid-entity-id-value.json b/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-invalid-entity-id-value.json
index 1fd3d1aeb0ac9..1700792152922 100644
--- a/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-invalid-entity-id-value.json
+++ b/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-invalid-entity-id-value.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "invalid-entity-id-value.cpp"
   },
   "id_table": [
diff --git a/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-missing-fields.json b/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-missing-fields.json
index 6d6daedb644b4..7730a5dfdc7f7 100644
--- a/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-missing-fields.json
+++ b/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-missing-fields.json
@@ -1,6 +1,5 @@
 {
   "tu_namespace": {
-    "kind": "CompilationUnit",
     "name": "missing-fields.cpp"
   },
   "target_triple": "arm64-apple-macosx",
diff --git a/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-1+2.json b/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-1+2.json
index 663f5dd814534..9821347c45345 100644
--- a/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-1+2.json
+++ b/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-1+2.json
@@ -404,7 +404,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "lu-1+2"
           }
         ],
@@ -417,11 +416,9 @@
       "name": {
         "namespace": [
           {
-            "kind": "CompilationUnit",
             "name": "tu1.cpp"
           },
           {
-            "kind": "LinkUnit",
             "name": "lu-1+2"
           }
         ],
@@ -434,11 +431,9 @@
       "name": {
         "namespace": [
           {
-            "kind": "CompilationUnit",
             "name": "tu2.cpp"
           },
           {
-            "kind": "LinkUnit",
             "name": "lu-1+2"
           }
         ],
@@ -451,11 +446,9 @@
       "name": {
         "namespace": [
           {
-            "kind": "CompilationUnit",
             "name": "tu1.cpp"
           },
           {
-            "kind": "LinkUnit",
             "name": "lu-1+2"
           }
         ],
@@ -468,11 +461,9 @@
       "name": {
         "namespace": [
           {
-            "kind": "CompilationUnit",
             "name": "tu2.cpp"
           },
           {
-            "kind": "LinkUnit",
             "name": "lu-1+2"
           }
         ],
@@ -485,7 +476,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "lu-1+2"
           }
         ],
@@ -498,7 +488,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "lu-1+2"
           }
         ],
@@ -511,11 +500,9 @@
       "name": {
         "namespace": [
           {
-            "kind": "CompilationUnit",
             "name": "tu1.cpp"
           },
           {
-            "kind": "LinkUnit",
             "name": "lu-1+2"
           }
         ],
@@ -528,11 +515,9 @@
       "name": {
         "namespace": [
           {
-            "kind": "CompilationUnit",
             "name": "tu2.cpp"
           },
           {
-            "kind": "LinkUnit",
             "name": "lu-1+2"
           }
         ],
@@ -545,11 +530,9 @@
       "name": {
         "namespace": [
           {
-            "kind": "CompilationUnit",
             "name": "tu1.cpp"
           },
           {
-            "kind": "LinkUnit",
             "name": "lu-1+2"
           }
         ],
@@ -562,11 +545,9 @@
       "name": {
         "namespace": [
           {
-            "kind": "CompilationUnit",
             "name": "tu2.cpp"
           },
           {
-            "kind": "LinkUnit",
             "name": "lu-1+2"
           }
         ],
@@ -645,7 +626,6 @@
   ],
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "lu-1+2"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-1.json b/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-1.json
index 4fd99f978148b..36d16ed6e7d2a 100644
--- a/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-1.json
+++ b/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-1.json
@@ -227,7 +227,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "lu-1"
           }
         ],
@@ -240,11 +239,9 @@
       "name": {
         "namespace": [
           {
-            "kind": "CompilationUnit",
             "name": "tu1.cpp"
           },
           {
-            "kind": "LinkUnit",
             "name": "lu-1"
           }
         ],
@@ -257,11 +254,9 @@
       "name": {
         "namespace": [
           {
-            "kind": "CompilationUnit",
             "name": "tu1.cpp"
           },
           {
-            "kind": "LinkUnit",
             "name": "lu-1"
           }
         ],
@@ -274,7 +269,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "lu-1"
           }
         ],
@@ -287,11 +281,9 @@
       "name": {
         "namespace": [
           {
-            "kind": "CompilationUnit",
             "name": "tu1.cpp"
           },
           {
-            "kind": "LinkUnit",
             "name": "lu-1"
           }
         ],
@@ -304,11 +296,9 @@
       "name": {
         "namespace": [
           {
-            "kind": "CompilationUnit",
             "name": "tu1.cpp"
           },
           {
-            "kind": "LinkUnit",
             "name": "lu-1"
           }
         ],
@@ -357,7 +347,6 @@
   ],
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "lu-1"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-2.json b/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-2.json
index e7fd3f39da0c1..3dded71ee1bbd 100644
--- a/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-2.json
+++ b/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-2.json
@@ -233,7 +233,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "lu-2"
           }
         ],
@@ -246,11 +245,9 @@
       "name": {
         "namespace": [
           {
-            "kind": "CompilationUnit",
             "name": "tu2.cpp"
           },
           {
-            "kind": "LinkUnit",
             "name": "lu-2"
           }
         ],
@@ -263,11 +260,9 @@
       "name": {
         "namespace": [
           {
-            "kind": "CompilationUnit",
             "name": "tu2.cpp"
           },
           {
-            "kind": "LinkUnit",
             "name": "lu-2"
           }
         ],
@@ -280,7 +275,6 @@
       "name": {
         "namespace": [
           {
-            "kind": "LinkUnit",
             "name": "lu-2"
           }
         ],
@@ -293,11 +287,9 @@
       "name": {
         "namespace": [
           {
-            "kind": "CompilationUnit",
             "name": "tu2.cpp"
           },
           {
-            "kind": "LinkUnit",
             "name": "lu-2"
           }
         ],
@@ -310,11 +302,9 @@
       "name": {
         "namespace": [
           {
-            "kind": "CompilationUnit",
             "name": "tu2.cpp"
           },
           {
-            "kind": "LinkUnit",
             "name": "lu-2"
           }
         ],
@@ -363,7 +353,6 @@
   ],
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "lu-2"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-empty.json b/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-empty.json
index 30ba3ed8f0aed..16e5eb56d2221 100644
--- a/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-empty.json
+++ b/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-empty.json
@@ -4,7 +4,6 @@
   "linkage_table": [],
   "lu_namespace": [
     {
-      "kind": "LinkUnit",
       "name": "lu-empty"
     }
   ],
diff --git a/clang/test/Analysis/Scalable/ssaf-linker/linking-errors.test b/clang/test/Analysis/Scalable/ssaf-linker/linking-errors.test
index 5bda8128ac0e1..d762534a3f86f 100644
--- a/clang/test/Analysis/Scalable/ssaf-linker/linking-errors.test
+++ b/clang/test/Analysis/Scalable/ssaf-linker/linking-errors.test
@@ -7,7 +7,7 @@
 // RUN: not clang-ssaf-linker %S/Inputs/tu-empty.json %S/Inputs/tu-empty.json -o %t/lu.json 2>&1 \
 // RUN:   | FileCheck %s --match-full-lines --check-prefix=DUP-NS
 // DUP-NS:      clang-ssaf-linker: error: Linking summary '{{.*}}tu-empty.json'
-// DUP-NS-NEXT: failed to link TU summary: duplicate BuildNamespace(CompilationUnit, empty.cpp)
+// DUP-NS-NEXT: failed to link TU summary: duplicate BuildNamespace(empty.cpp)
 
 // Entity ID object in summary data blob with '@' key alongside extra keys is a fatal error.
 // RUN: not clang-ssaf-linker %S/Inputs/tu-invalid-entity-id-multikey.json -o %t/lu.json 2>&1 \
diff --git a/clang/tools/clang-ssaf-linker/SSAFLinker.cpp b/clang/tools/clang-ssaf-linker/SSAFLinker.cpp
index a8bf6c97a37b8..d64a88936056c 100644
--- a/clang/tools/clang-ssaf-linker/SSAFLinker.cpp
+++ b/clang/tools/clang-ssaf-linker/SSAFLinker.cpp
@@ -125,8 +125,7 @@ void link(const LinkerInput &LI, llvm::TimerGroup &TG) {
   // TODO: The linker currently uses a hardcoded target triple. Architecture
   // tracking in the linker will be handled properly in a separate PR.
   EntityLinker EL(llvm::Triple("arm64-apple-macosx"),
-                  NestedBuildNamespace(BuildNamespace(
-                      BuildNamespaceKind::LinkUnit, LI.LinkUnitName)));
+                  NestedBuildNamespace(BuildNamespace(LI.LinkUnitName)));
 
   llvm::Timer TRead("read", "Read Summaries", TG);
   llvm::Timer TLink("link", "Link Summaries", TG);
diff --git a/clang/unittests/ScalableStaticAnalysis/Analyses/CallGraph/CallGraphExtractorTest.cpp b/clang/unittests/ScalableStaticAnalysis/Analyses/CallGraph/CallGraphExtractorTest.cpp
index f8769f3a9ce4d..8b14f5c05be45 100644
--- a/clang/unittests/ScalableStaticAnalysis/Analyses/CallGraph/CallGraphExtractorTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysis/Analyses/CallGraph/CallGraphExtractorTest.cpp
@@ -125,9 +125,8 @@ static const SummaryName CallGraphName{CallGraphSummary::Name.str()};
 
 struct CallGraphExtractorTest : ssaf::TestFixture {
   SSAFOptions Opts;
-  TUSummary Summary{
-      llvm::Triple("arm64-apple-macosx"),
-      BuildNamespace(BuildNamespaceKind::CompilationUnit, "Mock.cpp")};
+  TUSummary Summary{llvm::Triple("arm64-apple-macosx"),
+                    BuildNamespace("Mock.cpp")};
   TUSummaryBuilder Builder = TUSummaryBuilder(Summary, Opts);
 
   /// Creates the AST and extractor, then extracts the summaries from the AST.
diff --git a/clang/unittests/ScalableStaticAnalysis/Analyses/PointerFlow/PointerFlowTest.cpp b/clang/unittests/ScalableStaticAnalysis/Analyses/PointerFlow/PointerFlowTest.cpp
index b6d2b8b1af3cf..89443cefc356e 100644
--- a/clang/unittests/ScalableStaticAnalysis/Analyses/PointerFlow/PointerFlowTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysis/Analyses/PointerFlow/PointerFlowTest.cpp
@@ -154,8 +154,7 @@ class PointerFlowTest : public TestFixture {
   std::unique_ptr<ASTUnit> AST;
 
   PointerFlowTest()
-      : TUSum(llvm::Triple("arm64-apple-macosx"),
-              BuildNamespace(BuildNamespaceKind::CompilationUnit, "Mock.cpp")),
+      : TUSum(llvm::Triple("arm64-apple-macosx"), BuildNamespace("Mock.cpp")),
         Builder(TUSum, Opts), Extractor(nullptr) {}
 
   template <typename ContributorDecl = NamedDecl,
diff --git a/clang/unittests/ScalableStaticAnalysis/Analyses/PointerFlow/PointerFlowWPATest.cpp b/clang/unittests/ScalableStaticAnalysis/Analyses/PointerFlow/PointerFlowWPATest.cpp
index 8c43ead9750ca..ed8d9470a5d19 100644
--- a/clang/unittests/ScalableStaticAnalysis/Analyses/PointerFlow/PointerFlowWPATest.cpp
+++ b/clang/unittests/ScalableStaticAnalysis/Analyses/PointerFlow/PointerFlowWPATest.cpp
@@ -37,15 +37,13 @@ class PointerFlowWPATest : public TestFixture {
       EntityLinkage(EntityLinkageType::External);
 
   std::unique_ptr<LUSummary> makeLUSummary() {
-    NestedBuildNamespace NS(
-        {BuildNamespace(BuildNamespaceKind::LinkUnit, "TestLU")});
+    NestedBuildNamespace NS({BuildNamespace("TestLU")});
     return std::make_unique<LUSummary>(llvm::Triple("arm64-apple-macosx"),
                                        std::move(NS));
   }
 
   EntityId addEntity(LUSummary &LU, llvm::StringRef USR) {
-    NestedBuildNamespace NS(
-        {BuildNamespace(BuildNamespaceKind::LinkUnit, "TestLU")});
+    NestedBuildNamespace NS({BuildNamespace("TestLU")});
     EntityName Name(USR.str(), "", NS);
     EntityId Id = getIdTable(LU).getId(Name);
     getLinkageTable(LU).insert({Id, ExternalLinkage});
diff --git a/clang/unittests/ScalableStaticAnalysis/Analyses/UnsafeBufferUsage/UnsafeBufferUsageTest.cpp b/clang/unittests/ScalableStaticAnalysis/Analyses/UnsafeBufferUsage/UnsafeBufferUsageTest.cpp
index c2f4cb97c0fae..180c5e54f43a2 100644
--- a/clang/unittests/ScalableStaticAnalysis/Analyses/UnsafeBufferUsage/UnsafeBufferUsageTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysis/Analyses/UnsafeBufferUsage/UnsafeBufferUsageTest.cpp
@@ -43,8 +43,7 @@ class UnsafeBufferUsageTest : public TestFixture {
   std::unique_ptr<ASTUnit> AST;
 
   UnsafeBufferUsageTest()
-      : TUSum(llvm::Triple("arm64-apple-macosx"),
-              BuildNamespace(BuildNamespaceKind::CompilationUnit, "Mock.cpp")),
+      : TUSum(llvm::Triple("arm64-apple-macosx"), BuildNamespace("Mock.cpp")),
         Builder(TUSum, Opts) {}
 
   bool setUpTest(StringRef Code) {
diff --git a/clang/unittests/ScalableStaticAnalysis/Analyses/UnsafeBufferUsage/UnsafeBufferUsageWPATest.cpp b/clang/unittests/ScalableStaticAnalysis/Analyses/UnsafeBufferUsage/UnsafeBufferUsageWPATest.cpp
index 448f838297e8f..201ddbde2571d 100644
--- a/clang/unittests/ScalableStaticAnalysis/Analyses/UnsafeBufferUsage/UnsafeBufferUsageWPATest.cpp
+++ b/clang/unittests/ScalableStaticAnalysis/Analyses/UnsafeBufferUsage/UnsafeBufferUsageWPATest.cpp
@@ -38,15 +38,13 @@ class UnsafeBufferUsageWPATest : public TestFixture {
       EntityLinkage(EntityLinkageType::External);
 
   std::unique_ptr<LUSummary> makeLUSummary() {
-    NestedBuildNamespace NS(
-        {BuildNamespace(BuildNamespaceKind::LinkUnit, "TestLU")});
+    NestedBuildNamespace NS({BuildNamespace("TestLU")});
     return std::make_unique<LUSummary>(llvm::Triple("arm64-apple-macosx"),
                                        std::move(NS));
   }
 
   EntityId addEntity(LUSummary &LU, llvm::StringRef USR) {
-    NestedBuildNamespace NS(
-        {BuildNamespace(BuildNamespaceKind::LinkUnit, "TestLU")});
+    NestedBuildNamespace NS({BuildNamespace("TestLU")});
     EntityName Name(USR.str(), "", NS);
     EntityId Id = getIdTable(LU).getId(Name);
     getLinkageTable(LU).insert({Id, ExternalLinkage});
diff --git a/clang/unittests/ScalableStaticAnalysis/BuildNamespaceTest.cpp b/clang/unittests/ScalableStaticAnalysis/BuildNamespaceTest.cpp
index 5089796a2b0b8..c57c64c8cce30 100644
--- a/clang/unittests/ScalableStaticAnalysis/BuildNamespaceTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysis/BuildNamespaceTest.cpp
@@ -16,21 +16,14 @@ namespace clang::ssaf {
 namespace {
 
 TEST(BuildNamespaceTest, Equality) {
-  auto BN1 = BuildNamespace::makeCompilationUnit("test.cpp");
-  auto BN2 = BuildNamespace::makeCompilationUnit("test.cpp");
-  auto BN3 = BuildNamespace::makeCompilationUnit("other.cpp");
+  BuildNamespace BN1("test.cpp");
+  BuildNamespace BN2("test.cpp");
+  BuildNamespace BN3("other.cpp");
 
   EXPECT_EQ(BN1, BN2);
   EXPECT_NE(BN1, BN3);
 }
 
-TEST(BuildNamespaceTest, DifferentKinds) {
-  BuildNamespace CU(BuildNamespaceKind::CompilationUnit, "test");
-  BuildNamespace LU(BuildNamespaceKind::LinkUnit, "test");
-
-  EXPECT_NE(CU, LU);
-}
-
 // NestedBuildNamespace Tests
 
 TEST(NestedBuildNamespaceTest, DefaultConstruction) {
@@ -39,29 +32,24 @@ TEST(NestedBuildNamespaceTest, DefaultConstruction) {
 }
 
 TEST(NestedBuildNamespaceTest, SingleNamespaceConstruction) {
-  auto BN = BuildNamespace::makeCompilationUnit("test.cpp");
+  BuildNamespace BN("test.cpp");
   NestedBuildNamespace NBN(BN);
 
   EXPECT_FALSE(NBN.empty());
 }
 
-TEST(NestedBuildNamespaceTest, MakeTU) {
-  auto NBN = NestedBuildNamespace::makeCompilationUnit("test.cpp");
-  EXPECT_FALSE(NBN.empty());
-}
-
 TEST(NestedBuildNamespaceTest, Equality) {
-  auto NBN1 = NestedBuildNamespace::makeCompilationUnit("test.cpp");
-  auto NBN2 = NestedBuildNamespace::makeCompilationUnit("test.cpp");
-  auto NBN3 = NestedBuildNamespace::makeCompilationUnit("other.cpp");
+  NestedBuildNamespace NBN1(BuildNamespace("test.cpp"));
+  NestedBuildNamespace NBN2(BuildNamespace("test.cpp"));
+  NestedBuildNamespace NBN3(BuildNamespace("other.cpp"));
 
   EXPECT_EQ(NBN1, NBN2);
   EXPECT_NE(NBN1, NBN3);
 }
 
 TEST(NestedBuildNamespaceTest, MakeQualified) {
-  auto NBN1 = NestedBuildNamespace::makeCompilationUnit("test.cpp");
-  BuildNamespace LinkNS(BuildNamespaceKind::LinkUnit, "app");
+  NestedBuildNamespace NBN1(BuildNamespace("test.cpp"));
+  BuildNamespace LinkNS("app");
   NestedBuildNamespace NBN2(LinkNS);
 
   auto Qualified = NBN1.makeQualified(NBN2);
@@ -72,67 +60,28 @@ TEST(NestedBuildNamespaceTest, MakeQualified) {
 
 TEST(NestedBuildNamespaceTest, EmptyQualified) {
   NestedBuildNamespace Empty;
-  auto NBN = NestedBuildNamespace::makeCompilationUnit("test.cpp");
+  NestedBuildNamespace NBN(BuildNamespace("test.cpp"));
 
   auto Qualified = Empty.makeQualified(NBN);
   EXPECT_EQ(Qualified, NBN);
 }
 
-TEST(BuildNamespaceKindTest, FormatProvider) {
-  EXPECT_EQ(llvm::formatv("{0}", BuildNamespaceKind::CompilationUnit).str(),
-            "CompilationUnit");
-  EXPECT_EQ(llvm::formatv("{0}", BuildNamespaceKind::LinkUnit).str(),
-            "LinkUnit");
-  EXPECT_EQ(llvm::formatv("{0}", BuildNamespaceKind::StaticLibrary).str(),
-            "StaticLibrary");
-}
-
-TEST(BuildNamespaceKindTest, StreamOutputCompilationUnit) {
-  std::string S;
-  llvm::raw_string_ostream(S) << BuildNamespaceKind::CompilationUnit;
-  EXPECT_EQ(S, "CompilationUnit");
-}
-
-TEST(BuildNamespaceKindTest, StreamOutputLinkUnit) {
-  std::string S;
-  llvm::raw_string_ostream(S) << BuildNamespaceKind::LinkUnit;
-  EXPECT_EQ(S, "LinkUnit");
-}
-
-TEST(BuildNamespaceKindTest, StreamOutputStaticLibrary) {
-  std::string S;
-  llvm::raw_string_ostream(S) << BuildNamespaceKind::StaticLibrary;
-  EXPECT_EQ(S, "StaticLibrary");
-}
-
 TEST(BuildNamespaceTest, FormatProvider) {
-  EXPECT_EQ(
-      llvm::formatv("{0}", BuildNamespace(BuildNamespaceKind::CompilationUnit,
-                                          "test.cpp"))
-          .str(),
-      "BuildNamespace(CompilationUnit, test.cpp)");
+  EXPECT_EQ(llvm::formatv("{0}", BuildNamespace("test.cpp")).str(),
+            "BuildNamespace(test.cpp)");
 }
 
 TEST(NestedBuildNamespaceTest, FormatProvider) {
-  NestedBuildNamespace NBN(
-      BuildNamespace(BuildNamespaceKind::CompilationUnit, "test.cpp"));
-  EXPECT_EQ(
-      llvm::formatv("{0}", NBN).str(),
-      "NestedBuildNamespace([BuildNamespace(CompilationUnit, test.cpp)])");
-}
-
-TEST(BuildNamespaceTest, StreamOutputCompilationUnit) {
-  BuildNamespace BN(BuildNamespaceKind::CompilationUnit, "test.cpp");
-  std::string S;
-  llvm::raw_string_ostream(S) << BN;
-  EXPECT_EQ(S, "BuildNamespace(CompilationUnit, test.cpp)");
+  NestedBuildNamespace NBN(BuildNamespace("test.cpp"));
+  EXPECT_EQ(llvm::formatv("{0}", NBN).str(),
+            "NestedBuildNamespace([BuildNamespace(test.cpp)])");
 }
 
-TEST(BuildNamespaceTest, StreamOutputLinkUnit) {
-  BuildNamespace BN(BuildNamespaceKind::LinkUnit, "app");
+TEST(BuildNamespaceTest, StreamOutput) {
+  BuildNamespace BN("test.cpp");
   std::string S;
   llvm::raw_string_ostream(S) << BN;
-  EXPECT_EQ(S, "BuildNamespace(LinkUnit, app)");
+  EXPECT_EQ(S, "BuildNamespace(test.cpp)");
 }
 
 TEST(NestedBuildNamespaceTest, StreamOutputEmpty) {
@@ -143,23 +92,19 @@ TEST(NestedBuildNamespaceTest, StreamOutputEmpty) {
 }
 
 TEST(NestedBuildNamespaceTest, StreamOutputSingle) {
-  NestedBuildNamespace NBN(
-      BuildNamespace(BuildNamespaceKind::CompilationUnit, "test.cpp"));
+  NestedBuildNamespace NBN(BuildNamespace("test.cpp"));
   std::string S;
   llvm::raw_string_ostream(S) << NBN;
-  EXPECT_EQ(
-      S, "NestedBuildNamespace([BuildNamespace(CompilationUnit, test.cpp)])");
+  EXPECT_EQ(S, "NestedBuildNamespace([BuildNamespace(test.cpp)])");
 }
 
 TEST(NestedBuildNamespaceTest, StreamOutputMultiple) {
-  NestedBuildNamespace NBN(
-      BuildNamespace(BuildNamespaceKind::CompilationUnit, "test.cpp"));
-  NBN = NBN.makeQualified(NestedBuildNamespace(
-      BuildNamespace(BuildNamespaceKind::LinkUnit, "app")));
+  NestedBuildNamespace NBN(BuildNamespace("test.cpp"));
+  NBN = NBN.makeQualified(NestedBuildNamespace(BuildNamespace("app")));
   std::string S;
   llvm::raw_string_ostream(S) << NBN;
-  EXPECT_EQ(S, "NestedBuildNamespace([BuildNamespace(CompilationUnit, "
-               "test.cpp), BuildNamespace(LinkUnit, app)])");
+  EXPECT_EQ(S, "NestedBuildNamespace([BuildNamespace(test.cpp), "
+               "BuildNamespace(app)])");
 }
 
 } // namespace
diff --git a/clang/unittests/ScalableStaticAnalysis/EntityIdTableTest.cpp b/clang/unittests/ScalableStaticAnalysis/EntityIdTableTest.cpp
index ead7e35f8421f..01f007bdaecd8 100644
--- a/clang/unittests/ScalableStaticAnalysis/EntityIdTableTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysis/EntityIdTableTest.cpp
@@ -84,11 +84,11 @@ TEST(EntityIdTableTest, MultipleEntities) {
 TEST(EntityIdTableTest, WithBuildNamespace) {
   EntityIdTable Table;
 
-  NestedBuildNamespace NS = NestedBuildNamespace::makeCompilationUnit("test.o");
+  NestedBuildNamespace NS(BuildNamespace("test.o"));
 
   EntityName Entity1("c:@F at foo", "", NS);
   EntityName Entity2("c:@F at foo", "",
-                     NestedBuildNamespace::makeCompilationUnit("other.o"));
+                     NestedBuildNamespace(BuildNamespace("other.o")));
 
   EntityId Id1 = Table.getId(Entity1);
   EntityId Id2 = Table.getId(Entity2);
diff --git a/clang/unittests/ScalableStaticAnalysis/EntityLinkerTest.cpp b/clang/unittests/ScalableStaticAnalysis/EntityLinkerTest.cpp
index cd579e16991ef..70c17d984ce47 100644
--- a/clang/unittests/ScalableStaticAnalysis/EntityLinkerTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysis/EntityLinkerTest.cpp
@@ -71,10 +71,10 @@ class EntityLinkerTest : public TestFixture {
   }
 
   std::unique_ptr<TUSummaryEncoding> createTUSummaryEncoding(
-      BuildNamespaceKind Kind, llvm::StringRef Name,
+      llvm::StringRef Name,
       llvm::Triple TargetTriple = llvm::Triple("arm64-apple-macosx")) {
     return std::make_unique<TUSummaryEncoding>(std::move(TargetTriple),
-                                               BuildNamespace(Kind, Name));
+                                               BuildNamespace(Name));
   }
 
   size_t addSummaryData(TUSummaryEncoding &TU, EntityId EId,
@@ -194,8 +194,7 @@ MATCHER_P(SummaryDataHasSize, ExpectedSize,
 // ============================================================================
 
 TEST_F(EntityLinkerTest, CreatesEmptyLinker) {
-  NestedBuildNamespace LUNamespace(
-      {BuildNamespace(BuildNamespaceKind::LinkUnit, "LU")});
+  NestedBuildNamespace LUNamespace({BuildNamespace("LU")});
 
   EntityLinker Linker(llvm::Triple("arm64-apple-macosx"), LUNamespace);
 
@@ -206,13 +205,11 @@ TEST_F(EntityLinkerTest, CreatesEmptyLinker) {
 }
 
 TEST_F(EntityLinkerTest, LinksEmptyTranslationUnit) {
-  NestedBuildNamespace LUNamespace(
-      {BuildNamespace(BuildNamespaceKind::LinkUnit, "LU")});
+  NestedBuildNamespace LUNamespace({BuildNamespace("LU")});
 
   EntityLinker Linker(llvm::Triple("arm64-apple-macosx"), LUNamespace);
 
-  auto TUEmpty =
-      createTUSummaryEncoding(BuildNamespaceKind::CompilationUnit, "TUEmpty");
+  auto TUEmpty = createTUSummaryEncoding("TUEmpty");
 
   EXPECT_THAT_ERROR(Linker.link(std::move(TUEmpty)), llvm::Succeeded());
 
@@ -223,12 +220,11 @@ TEST_F(EntityLinkerTest, LinksEmptyTranslationUnit) {
 }
 
 TEST_F(EntityLinkerTest, LinksOneTranslationUnit) {
-  NestedBuildNamespace LUNamespace(
-      {BuildNamespace(BuildNamespaceKind::LinkUnit, "LU")});
+  NestedBuildNamespace LUNamespace({BuildNamespace("LU")});
 
   EntityLinker Linker(llvm::Triple("arm64-apple-macosx"), LUNamespace);
 
-  auto TU = createTUSummaryEncoding(BuildNamespaceKind::CompilationUnit, "TU");
+  auto TU = createTUSummaryEncoding("TU");
 
   const auto TU_A_Id = addEntity(*TU, "A", NoneLinkage);
   const auto TU_A_S1_Data = addSummaryData(*TU, TU_A_Id, "S1");
@@ -323,13 +319,11 @@ TEST_F(EntityLinkerTest, LinksOneTranslationUnit) {
 }
 
 TEST_F(EntityLinkerTest, LinksTwoTranslationUnits) {
-  NestedBuildNamespace LUNamespace(
-      {BuildNamespace(BuildNamespaceKind::LinkUnit, "LU")});
+  NestedBuildNamespace LUNamespace({BuildNamespace("LU")});
 
   EntityLinker Linker(llvm::Triple("arm64-apple-macosx"), LUNamespace);
 
-  auto TU1 =
-      createTUSummaryEncoding(BuildNamespaceKind::CompilationUnit, "TU1");
+  auto TU1 = createTUSummaryEncoding("TU1");
 
   // None linkage entities in TU1
   const auto TU1_X_Id = addEntity(*TU1, "X", NoneLinkage);
@@ -368,8 +362,7 @@ TEST_F(EntityLinkerTest, LinksTwoTranslationUnits) {
 
   ASSERT_THAT_ERROR(Linker.link(std::move(TU1)), llvm::Succeeded());
 
-  auto TU2 =
-      createTUSummaryEncoding(BuildNamespaceKind::CompilationUnit, "TU2");
+  auto TU2 = createTUSummaryEncoding("TU2");
 
   // None linkage entities in TU2 - includes duplicates and uniques
   const auto TU2_X_Id = addEntity(*TU2, "X", NoneLinkage);
@@ -617,36 +610,33 @@ TEST_F(EntityLinkerTest, LinksTwoTranslationUnits) {
 }
 
 TEST_F(EntityLinkerTest, RejectsDuplicateTUSummary) {
-  NestedBuildNamespace LUNamespace(
-      {BuildNamespace(BuildNamespaceKind::LinkUnit, "LU")});
+  NestedBuildNamespace LUNamespace({BuildNamespace("LU")});
 
   EntityLinker Linker(llvm::Triple("arm64-apple-macosx"), LUNamespace);
 
-  auto TU1 = createTUSummaryEncoding(BuildNamespaceKind::CompilationUnit, "TU");
+  auto TU1 = createTUSummaryEncoding("TU");
 
   ASSERT_THAT_ERROR(Linker.link(std::move(TU1)), llvm::Succeeded());
 
-  auto TU2 = createTUSummaryEncoding(BuildNamespaceKind::CompilationUnit, "TU");
+  auto TU2 = createTUSummaryEncoding("TU");
 
-  ASSERT_THAT_ERROR(Linker.link(std::move(TU2)),
-                    llvm::FailedWithMessage(
-                        HasSubstr("failed to link TU summary: duplicate "
-                                  "BuildNamespace(CompilationUnit, TU)")));
+  ASSERT_THAT_ERROR(
+      Linker.link(std::move(TU2)),
+      llvm::FailedWithMessage(HasSubstr("failed to link TU summary: duplicate "
+                                        "BuildNamespace(TU)")));
 }
 
 // Reproduces a crash when linking internal-linkage entities
 // (e.g. "static inline" functions) that share the same USR across TUs.
 TEST_F(EntityLinkerTest, InternalLinkageWithEmptyNamespaceAcrossTUs) {
-  constexpr auto LinkUnit = BuildNamespaceKind::LinkUnit;
-  constexpr auto CompilationUnit = BuildNamespaceKind::CompilationUnit;
   EntityLinker Linker(llvm::Triple("arm64-apple-macosx"),
-                      NestedBuildNamespace{BuildNamespace(LinkUnit, "LU")});
+                      NestedBuildNamespace{BuildNamespace("LU")});
 
-  auto TU1 = createTUSummaryEncoding(CompilationUnit, "TU1");
+  auto TU1 = createTUSummaryEncoding("TU1");
   addEntity(*TU1, "some_static_inline", InternalLinkage);
   ASSERT_THAT_ERROR(Linker.link(std::move(TU1)), llvm::Succeeded());
 
-  auto TU2 = createTUSummaryEncoding(CompilationUnit, "TU2");
+  auto TU2 = createTUSummaryEncoding("TU2");
   addEntity(*TU2, "some_static_inline", InternalLinkage);
   ASSERT_THAT_ERROR(Linker.link(std::move(TU2)), llvm::Succeeded());
 
@@ -654,8 +644,8 @@ TEST_F(EntityLinkerTest, InternalLinkageWithEmptyNamespaceAcrossTUs) {
   const auto Output = std::move(Linker).takeOutput();
   const auto &IdTable = getIdTable(Output);
 
-  NestedBuildNamespace TU1NS{{{CompilationUnit, "TU1"}, {LinkUnit, "LU"}}};
-  NestedBuildNamespace TU2NS{{{CompilationUnit, "TU2"}, {LinkUnit, "LU"}}};
+  NestedBuildNamespace TU1NS{{BuildNamespace("TU1"), BuildNamespace("LU")}};
+  NestedBuildNamespace TU2NS{{BuildNamespace("TU2"), BuildNamespace("LU")}};
   EntityName ExpectedTU1Name("some_static_inline", "", TU1NS);
   EntityName ExpectedTU2Name("some_static_inline", "", TU2NS);
 
diff --git a/clang/unittests/ScalableStaticAnalysis/EntityNameTest.cpp b/clang/unittests/ScalableStaticAnalysis/EntityNameTest.cpp
index 698b17efb6384..791bf19f592fc 100644
--- a/clang/unittests/ScalableStaticAnalysis/EntityNameTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysis/EntityNameTest.cpp
@@ -17,8 +17,8 @@ namespace clang::ssaf {
 namespace {
 
 TEST(EntityNameTest, Equality) {
-  auto NBN1 = NestedBuildNamespace::makeCompilationUnit("test.cpp");
-  auto NBN2 = NestedBuildNamespace::makeCompilationUnit("test.cpp");
+  NestedBuildNamespace NBN1(BuildNamespace("test.cpp"));
+  NestedBuildNamespace NBN2(BuildNamespace("test.cpp"));
 
   EntityName EN1("c:@F at foo", "", NBN1);
   EntityName EN2("c:@F at foo", "", NBN2);
@@ -29,7 +29,7 @@ TEST(EntityNameTest, Equality) {
 }
 
 TEST(EntityNameTest, EqualityWithDifferentSuffix) {
-  auto NBN = NestedBuildNamespace::makeCompilationUnit("test.cpp");
+  NestedBuildNamespace NBN(BuildNamespace("test.cpp"));
 
   EntityName EN1("c:@F at foo", "1", NBN);
   EntityName EN2("c:@F at foo", "2", NBN);
@@ -38,8 +38,8 @@ TEST(EntityNameTest, EqualityWithDifferentSuffix) {
 }
 
 TEST(EntityNameTest, EqualityWithDifferentNamespace) {
-  auto NBN1 = NestedBuildNamespace::makeCompilationUnit("test1.cpp");
-  auto NBN2 = NestedBuildNamespace::makeCompilationUnit("test2.cpp");
+  NestedBuildNamespace NBN1(BuildNamespace("test1.cpp"));
+  NestedBuildNamespace NBN2(BuildNamespace("test2.cpp"));
 
   EntityName EN1("c:@F at foo", "", NBN1);
   EntityName EN2("c:@F at foo", "", NBN2);
@@ -48,11 +48,10 @@ TEST(EntityNameTest, EqualityWithDifferentNamespace) {
 }
 
 TEST(EntityNameTest, MakeQualified) {
-  auto NBN1 = NestedBuildNamespace::makeCompilationUnit("test.cpp");
+  NestedBuildNamespace NBN1(BuildNamespace("test.cpp"));
   EntityName EN("c:@F at foo", "", NBN1);
 
-  BuildNamespace LinkNS(BuildNamespaceKind::LinkUnit, "app");
-  NestedBuildNamespace NBN2(LinkNS);
+  NestedBuildNamespace NBN2(BuildNamespace("app"));
 
   auto Qualified = EN.makeQualified(NBN2);
 
@@ -60,35 +59,29 @@ TEST(EntityNameTest, MakeQualified) {
 }
 
 TEST(EntityNameTest, FormatProvider) {
-  NestedBuildNamespace NBN(
-      BuildNamespace(BuildNamespaceKind::CompilationUnit, "test.cpp"));
+  NestedBuildNamespace NBN(BuildNamespace("test.cpp"));
   EntityName EN("c:@F at foo", "", NBN);
-  EXPECT_EQ(
-      llvm::formatv("{0}", EN).str(),
-      "EntityName(c:@F at foo, , "
-      "NestedBuildNamespace([BuildNamespace(CompilationUnit, test.cpp)]))");
+  EXPECT_EQ(llvm::formatv("{0}", EN).str(),
+            "EntityName(c:@F at foo, , "
+            "NestedBuildNamespace([BuildNamespace(test.cpp)]))");
 }
 
 TEST(EntityNameTest, StreamOutputNoSuffix) {
-  NestedBuildNamespace NBN(
-      BuildNamespace(BuildNamespaceKind::CompilationUnit, "test.cpp"));
+  NestedBuildNamespace NBN(BuildNamespace("test.cpp"));
   EntityName EN("c:@F at foo", "", NBN);
   std::string S;
   llvm::raw_string_ostream(S) << EN;
-  EXPECT_EQ(
-      S, "EntityName(c:@F at foo, , "
-         "NestedBuildNamespace([BuildNamespace(CompilationUnit, test.cpp)]))");
+  EXPECT_EQ(S, "EntityName(c:@F at foo, , "
+               "NestedBuildNamespace([BuildNamespace(test.cpp)]))");
 }
 
 TEST(EntityNameTest, StreamOutputWithSuffix) {
-  NestedBuildNamespace NBN(
-      BuildNamespace(BuildNamespaceKind::CompilationUnit, "test.cpp"));
+  NestedBuildNamespace NBN(BuildNamespace("test.cpp"));
   EntityName EN("c:@F at foo", "1", NBN);
   std::string S;
   llvm::raw_string_ostream(S) << EN;
-  EXPECT_EQ(
-      S, "EntityName(c:@F at foo, 1, "
-         "NestedBuildNamespace([BuildNamespace(CompilationUnit, test.cpp)]))");
+  EXPECT_EQ(S, "EntityName(c:@F at foo, 1, "
+               "NestedBuildNamespace([BuildNamespace(test.cpp)]))");
 }
 
 } // namespace
diff --git a/clang/unittests/ScalableStaticAnalysis/LUSummaryTest.cpp b/clang/unittests/ScalableStaticAnalysis/LUSummaryTest.cpp
index b67859e09c66d..4d9b684c66000 100644
--- a/clang/unittests/ScalableStaticAnalysis/LUSummaryTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysis/LUSummaryTest.cpp
@@ -14,7 +14,7 @@ namespace clang::ssaf {
 namespace {
 
 TEST(LUSummaryTest, GetNamespace) {
-  BuildNamespace LU(BuildNamespaceKind::LinkUnit, "app");
+  BuildNamespace LU("app");
   NestedBuildNamespace NS(LU);
   LUSummary Summary(llvm::Triple("arm64-apple-macosx"), NS);
 
diff --git a/clang/unittests/ScalableStaticAnalysis/ModelStringConversionsTest.cpp b/clang/unittests/ScalableStaticAnalysis/ModelStringConversionsTest.cpp
index b0c741d83feaf..3f45ef962e2f1 100644
--- a/clang/unittests/ScalableStaticAnalysis/ModelStringConversionsTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysis/ModelStringConversionsTest.cpp
@@ -13,60 +13,6 @@ using namespace clang::ssaf;
 
 namespace {
 
-//===----------------------------------------------------------------------===//
-// BuildNamespaceKind
-//===----------------------------------------------------------------------===//
-
-TEST(BuildNamespaceKindStringTest, ToStringCompilationUnit) {
-  EXPECT_EQ(buildNamespaceKindToString(BuildNamespaceKind::CompilationUnit),
-            "CompilationUnit");
-}
-
-TEST(BuildNamespaceKindStringTest, ToStringLinkUnit) {
-  EXPECT_EQ(buildNamespaceKindToString(BuildNamespaceKind::LinkUnit),
-            "LinkUnit");
-}
-
-TEST(BuildNamespaceKindStringTest, ToStringStaticLibrary) {
-  EXPECT_EQ(buildNamespaceKindToString(BuildNamespaceKind::StaticLibrary),
-            "StaticLibrary");
-}
-
-TEST(BuildNamespaceKindStringTest, FromStringCompilationUnit) {
-  EXPECT_EQ(buildNamespaceKindFromString("CompilationUnit"),
-            BuildNamespaceKind::CompilationUnit);
-}
-
-TEST(BuildNamespaceKindStringTest, FromStringLinkUnit) {
-  EXPECT_EQ(buildNamespaceKindFromString("LinkUnit"),
-            BuildNamespaceKind::LinkUnit);
-}
-
-TEST(BuildNamespaceKindStringTest, FromStringStaticLibrary) {
-  EXPECT_EQ(buildNamespaceKindFromString("StaticLibrary"),
-            BuildNamespaceKind::StaticLibrary);
-}
-
-TEST(BuildNamespaceKindStringTest, FromStringUnknown) {
-  EXPECT_EQ(buildNamespaceKindFromString("compilation_unit"), std::nullopt);
-  EXPECT_EQ(buildNamespaceKindFromString("link_unit"), std::nullopt);
-  EXPECT_EQ(buildNamespaceKindFromString("static_library"), std::nullopt);
-  EXPECT_EQ(buildNamespaceKindFromString(""), std::nullopt);
-  EXPECT_EQ(buildNamespaceKindFromString("unknown"), std::nullopt);
-}
-
-TEST(BuildNamespaceKindStringTest, RoundTrip) {
-  EXPECT_EQ(buildNamespaceKindFromString(buildNamespaceKindToString(
-                BuildNamespaceKind::CompilationUnit)),
-            BuildNamespaceKind::CompilationUnit);
-  EXPECT_EQ(buildNamespaceKindFromString(
-                buildNamespaceKindToString(BuildNamespaceKind::LinkUnit)),
-            BuildNamespaceKind::LinkUnit);
-  EXPECT_EQ(buildNamespaceKindFromString(
-                buildNamespaceKindToString(BuildNamespaceKind::StaticLibrary)),
-            BuildNamespaceKind::StaticLibrary);
-}
-
 //===----------------------------------------------------------------------===//
 // EntityLinkageType
 //===----------------------------------------------------------------------===//
diff --git a/clang/unittests/ScalableStaticAnalysis/Registries/MockSerializationFormat.cpp b/clang/unittests/ScalableStaticAnalysis/Registries/MockSerializationFormat.cpp
index 236e81a16b56e..83f5c22605317 100644
--- a/clang/unittests/ScalableStaticAnalysis/Registries/MockSerializationFormat.cpp
+++ b/clang/unittests/ScalableStaticAnalysis/Registries/MockSerializationFormat.cpp
@@ -55,7 +55,7 @@ void MockSerializationFormat::forEachRegisteredAnalysis(
 
 llvm::Expected<TUSummary>
 MockSerializationFormat::readTUSummary(llvm::StringRef Path) {
-  BuildNamespace NS(BuildNamespaceKind::CompilationUnit, "Mock.cpp");
+  BuildNamespace NS("Mock.cpp");
   TUSummary Summary(llvm::Triple("arm64-apple-macosx"), NS);
 
   auto ManifestFile = llvm::MemoryBuffer::getFile(Path + "/analyses.txt");
diff --git a/clang/unittests/ScalableStaticAnalysis/Registries/SummaryExtractorRegistryTest.cpp b/clang/unittests/ScalableStaticAnalysis/Registries/SummaryExtractorRegistryTest.cpp
index db7c7ad835bb6..5aabaf1d2a4d3 100644
--- a/clang/unittests/ScalableStaticAnalysis/Registries/SummaryExtractorRegistryTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysis/Registries/SummaryExtractorRegistryTest.cpp
@@ -22,9 +22,8 @@ using namespace ssaf;
 
 [[nodiscard]]
 static TUSummary makeFakeSummary() {
-  return TUSummary(
-      llvm::Triple("arm64-apple-macosx"),
-      BuildNamespace(BuildNamespaceKind::CompilationUnit, "Mock.cpp"));
+  return TUSummary(llvm::Triple("arm64-apple-macosx"),
+                   BuildNamespace("Mock.cpp"));
 }
 
 namespace {
diff --git a/clang/unittests/ScalableStaticAnalysis/Serialization/JSONFormatTest/LUSummaryTest.cpp b/clang/unittests/ScalableStaticAnalysis/Serialization/JSONFormatTest/LUSummaryTest.cpp
index 3a9ed5aebfd7e..1e33b1098cc41 100644
--- a/clang/unittests/ScalableStaticAnalysis/Serialization/JSONFormatTest/LUSummaryTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysis/Serialization/JSONFormatTest/LUSummaryTest.cpp
@@ -40,7 +40,7 @@ SummaryOps LUSummaryOps{
       return Result ? llvm::Error::success() : Result.takeError();
     },
     [](llvm::StringRef FilePath) -> llvm::Error {
-      BuildNamespace BN(BuildNamespaceKind::CompilationUnit, "test.cpp");
+      BuildNamespace BN("test.cpp");
       NestedBuildNamespace NBN(std::move(BN));
       LUSummary S(llvm::Triple("arm64-apple-macosx"), std::move(NBN));
       return JSONFormat().writeLUSummary(S, FilePath);
@@ -61,7 +61,7 @@ SummaryOps LUSummaryEncodingOps{
       return Result ? llvm::Error::success() : Result.takeError();
     },
     [](llvm::StringRef FilePath) -> llvm::Error {
-      BuildNamespace BN(BuildNamespaceKind::CompilationUnit, "test.cpp");
+      BuildNamespace BN("test.cpp");
       NestedBuildNamespace NBN(std::move(BN));
       LUSummaryEncoding E(llvm::Triple("arm64-apple-macosx"), std::move(NBN));
       return JSONFormat().writeLUSummaryEncoding(E, FilePath);
@@ -302,12 +302,11 @@ TEST_F(JSONFormatLUSummaryTest, ReadEntitySummaryMismatchedSummaryName) {
 // ============================================================================
 
 TEST_F(JSONFormatLUSummaryTest, WriteEntitySummaryMissingData) {
-  NestedBuildNamespace NBN(
-      BuildNamespace(BuildNamespaceKind::LinkUnit, "test.exe"));
+  NestedBuildNamespace NBN(BuildNamespace("test.exe"));
   LUSummary Summary(llvm::Triple("arm64-apple-macosx"), std::move(NBN));
 
   NestedBuildNamespace Namespace =
-      NestedBuildNamespace::makeCompilationUnit("test.cpp");
+      NestedBuildNamespace(BuildNamespace("test.cpp"));
   EntityId EI = getIdTable(Summary).getId(
       EntityName{"c:@F at foo", "", std::move(Namespace)});
 
@@ -321,12 +320,11 @@ TEST_F(JSONFormatLUSummaryTest, WriteEntitySummaryMissingData) {
 }
 
 TEST_F(JSONFormatLUSummaryTest, WriteEntitySummaryMismatchedSummaryName) {
-  NestedBuildNamespace NBN(
-      BuildNamespace(BuildNamespaceKind::LinkUnit, "test.exe"));
+  NestedBuildNamespace NBN(BuildNamespace("test.exe"));
   LUSummary Summary(llvm::Triple("arm64-apple-macosx"), std::move(NBN));
 
   NestedBuildNamespace Namespace =
-      NestedBuildNamespace::makeCompilationUnit("test.cpp");
+      NestedBuildNamespace(BuildNamespace("test.cpp"));
   EntityId EI = getIdTable(Summary).getId(
       EntityName{"c:@F at foo", "", std::move(Namespace)});
 
@@ -419,12 +417,11 @@ TEST_P(LUSummaryTest, WriteStreamOpenFailure) {
 // ============================================================================
 
 TEST_F(JSONFormatLUSummaryTest, WriteEntitySummaryNoFormatInfo) {
-  NestedBuildNamespace NBN(
-      BuildNamespace(BuildNamespaceKind::LinkUnit, "test.exe"));
+  NestedBuildNamespace NBN(BuildNamespace("test.exe"));
   LUSummary Summary(llvm::Triple("arm64-apple-macosx"), std::move(NBN));
 
   NestedBuildNamespace Namespace =
-      NestedBuildNamespace::makeCompilationUnit("test.cpp");
+      NestedBuildNamespace(BuildNamespace("test.cpp"));
   EntityId EI = getIdTable(Summary).getId(
       EntityName{"c:@F at foo", "", std::move(Namespace)});
 
diff --git a/clang/unittests/ScalableStaticAnalysis/Serialization/JSONFormatTest/TUSummaryTest.cpp b/clang/unittests/ScalableStaticAnalysis/Serialization/JSONFormatTest/TUSummaryTest.cpp
index 1c2a890f2ddc9..0d4ad859899fd 100644
--- a/clang/unittests/ScalableStaticAnalysis/Serialization/JSONFormatTest/TUSummaryTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysis/Serialization/JSONFormatTest/TUSummaryTest.cpp
@@ -39,7 +39,7 @@ SummaryOps TUSummaryOps{
       return Result ? llvm::Error::success() : Result.takeError();
     },
     [](llvm::StringRef FilePath) -> llvm::Error {
-      BuildNamespace BN(BuildNamespaceKind::CompilationUnit, "test.cpp");
+      BuildNamespace BN("test.cpp");
       TUSummary S(llvm::Triple("arm64-apple-macosx"), std::move(BN));
       return JSONFormat().writeTUSummary(S, FilePath);
     },
@@ -59,7 +59,7 @@ SummaryOps TUSummaryEncodingOps{
       return Result ? llvm::Error::success() : Result.takeError();
     },
     [](llvm::StringRef FilePath) -> llvm::Error {
-      BuildNamespace BN(BuildNamespaceKind::CompilationUnit, "test.cpp");
+      BuildNamespace BN("test.cpp");
       TUSummaryEncoding E(llvm::Triple("arm64-apple-macosx"), std::move(BN));
       return JSONFormat().writeTUSummaryEncoding(E, FilePath);
     },
@@ -295,12 +295,11 @@ TEST_F(JSONFormatTUSummaryTest, ReadEntitySummaryMismatchedSummaryName) {
 // ============================================================================
 
 TEST_F(JSONFormatTUSummaryTest, WriteEntitySummaryMissingData) {
-  TUSummary Summary(
-      llvm::Triple("arm64-apple-macosx"),
-      BuildNamespace(BuildNamespaceKind::CompilationUnit, "test.cpp"));
+  TUSummary Summary(llvm::Triple("arm64-apple-macosx"),
+                    BuildNamespace("test.cpp"));
 
   NestedBuildNamespace Namespace =
-      NestedBuildNamespace::makeCompilationUnit("test.cpp");
+      NestedBuildNamespace(BuildNamespace("test.cpp"));
   EntityId EI = getIdTable(Summary).getId(
       EntityName{"c:@F at foo", "", std::move(Namespace)});
 
@@ -314,12 +313,11 @@ TEST_F(JSONFormatTUSummaryTest, WriteEntitySummaryMissingData) {
 }
 
 TEST_F(JSONFormatTUSummaryTest, WriteEntitySummaryMismatchedSummaryName) {
-  TUSummary Summary(
-      llvm::Triple("arm64-apple-macosx"),
-      BuildNamespace(BuildNamespaceKind::CompilationUnit, "test.cpp"));
+  TUSummary Summary(llvm::Triple("arm64-apple-macosx"),
+                    BuildNamespace("test.cpp"));
 
   NestedBuildNamespace Namespace =
-      NestedBuildNamespace::makeCompilationUnit("test.cpp");
+      NestedBuildNamespace(BuildNamespace("test.cpp"));
   EntityId EI = getIdTable(Summary).getId(
       EntityName{"c:@F at foo", "", std::move(Namespace)});
 
@@ -412,12 +410,11 @@ TEST_P(TUSummaryTest, WriteStreamOpenFailure) {
 // ============================================================================
 
 TEST_F(JSONFormatTUSummaryTest, WriteEntitySummaryNoFormatInfo) {
-  TUSummary Summary(
-      llvm::Triple("arm64-apple-macosx"),
-      BuildNamespace(BuildNamespaceKind::CompilationUnit, "test.cpp"));
+  TUSummary Summary(llvm::Triple("arm64-apple-macosx"),
+                    BuildNamespace("test.cpp"));
 
   NestedBuildNamespace Namespace =
-      NestedBuildNamespace::makeCompilationUnit("test.cpp");
+      NestedBuildNamespace(BuildNamespace("test.cpp"));
   EntityId EI = getIdTable(Summary).getId(
       EntityName{"c:@F at foo", "", std::move(Namespace)});
 
diff --git a/clang/unittests/ScalableStaticAnalysis/SummaryData/SummaryDataTest.cpp b/clang/unittests/ScalableStaticAnalysis/SummaryData/SummaryDataTest.cpp
index e8137f3bac308..9329d07d4e9ce 100644
--- a/clang/unittests/ScalableStaticAnalysis/SummaryData/SummaryDataTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysis/SummaryData/SummaryDataTest.cpp
@@ -182,15 +182,13 @@ class LUSummaryConsumerTest : public TestFixture {
   }
 
   std::unique_ptr<LUSummary> makeLUSummary() {
-    NestedBuildNamespace NS(
-        {BuildNamespace(BuildNamespaceKind::LinkUnit, "TestLU")});
+    NestedBuildNamespace NS({BuildNamespace("TestLU")});
     return std::make_unique<LUSummary>(llvm::Triple("arm64-apple-macosx"),
                                        std::move(NS));
   }
 
   EntityId addEntity(LUSummary &LU, llvm::StringRef USR) {
-    NestedBuildNamespace NS(
-        {BuildNamespace(BuildNamespaceKind::LinkUnit, "TestLU")});
+    NestedBuildNamespace NS({BuildNamespace("TestLU")});
     EntityName Name(USR.str(), "", NS);
     EntityId Id = getIdTable(LU).getId(Name);
     getLinkageTable(LU).insert({Id, ExternalLinkage});
diff --git a/clang/unittests/ScalableStaticAnalysis/TUSummaryBuilderTest.cpp b/clang/unittests/ScalableStaticAnalysis/TUSummaryBuilderTest.cpp
index c6a7a7b531be3..94665e3b74ee9 100644
--- a/clang/unittests/ScalableStaticAnalysis/TUSummaryBuilderTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysis/TUSummaryBuilderTest.cpp
@@ -91,9 +91,8 @@ void PrintTo(const MockSummaryData3 &S, std::ostream *OS) {
 
 struct TUSummaryBuilderTest : ssaf::TestFixture {
   SSAFOptions Opts;
-  TUSummary Summary{
-      llvm::Triple("arm64-apple-macosx"),
-      BuildNamespace(BuildNamespaceKind::CompilationUnit, "Mock.cpp")};
+  TUSummary Summary{llvm::Triple("arm64-apple-macosx"),
+                    BuildNamespace("Mock.cpp")};
   TUSummaryBuilder Builder{Summary, Opts};
   TUSummaryExtractor Extractor{Builder};
 
diff --git a/clang/unittests/ScalableStaticAnalysis/WholeProgramAnalysis/AnalysisDriverTest.cpp b/clang/unittests/ScalableStaticAnalysis/WholeProgramAnalysis/AnalysisDriverTest.cpp
index 95077675fb2ec..e84d6d6119505 100644
--- a/clang/unittests/ScalableStaticAnalysis/WholeProgramAnalysis/AnalysisDriverTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysis/WholeProgramAnalysis/AnalysisDriverTest.cpp
@@ -302,15 +302,13 @@ class AnalysisDriverTest : public TestFixture {
   }
 
   std::unique_ptr<LUSummary> makeLUSummary() {
-    NestedBuildNamespace NS(
-        {BuildNamespace(BuildNamespaceKind::LinkUnit, "TestLU")});
+    NestedBuildNamespace NS({BuildNamespace("TestLU")});
     return std::make_unique<LUSummary>(llvm::Triple("arm64-apple-macosx"),
                                        std::move(NS));
   }
 
   EntityId addEntity(LUSummary &LU, llvm::StringRef USR) {
-    NestedBuildNamespace NS(
-        {BuildNamespace(BuildNamespaceKind::LinkUnit, "TestLU")});
+    NestedBuildNamespace NS({BuildNamespace("TestLU")});
     EntityName Name(USR.str(), "", NS);
     EntityId Id = getIdTable(LU).getId(Name);
     getLinkageTable(LU).insert({Id, ExternalLinkage});
diff --git a/clang/unittests/ScalableStaticAnalysis/WholeProgramAnalysis/UnsafeBufferReachableAnalysisTest.cpp b/clang/unittests/ScalableStaticAnalysis/WholeProgramAnalysis/UnsafeBufferReachableAnalysisTest.cpp
index cf5420b35e7dc..f6228dcb098de 100644
--- a/clang/unittests/ScalableStaticAnalysis/WholeProgramAnalysis/UnsafeBufferReachableAnalysisTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysis/WholeProgramAnalysis/UnsafeBufferReachableAnalysisTest.cpp
@@ -44,15 +44,13 @@ class UnsafeBufferReachableAnalysisTest : public TestFixture {
       EntityLinkage(EntityLinkageType::External);
 
   std::unique_ptr<LUSummary> makeLUSummary() {
-    NestedBuildNamespace NS(
-        {BuildNamespace(BuildNamespaceKind::LinkUnit, "TestLU")});
+    NestedBuildNamespace NS({BuildNamespace("TestLU")});
     return std::make_unique<LUSummary>(llvm::Triple("arm64-apple-macosx"),
                                        std::move(NS));
   }
 
   EntityId addEntity(LUSummary &LU, llvm::StringRef USR) {
-    NestedBuildNamespace NS(
-        {BuildNamespace(BuildNamespaceKind::LinkUnit, "TestLU")});
+    NestedBuildNamespace NS({BuildNamespace("TestLU")});
     EntityName Name(USR.str(), "", NS);
     EntityId Id = getIdTable(LU).getId(Name);
     getLinkageTable(LU).insert({Id, ExternalLinkage});

>From 7922802dea4dfc8dc7eb12b5b8d86623bce46869 Mon Sep 17 00:00:00 2001
From: Aviral Goel <goel.aviral at gmail.com>
Date: Wed, 8 Jul 2026 11:50:51 -0700
Subject: [PATCH 2/2] Merge BuildNamespace and NestedBuildNamespace

---
 .../Core/EntityLinker/EntityLinker.h          |   4 +-
 .../Core/EntityLinker/LUSummary.h             |   6 +-
 .../Core/EntityLinker/LUSummaryEncoding.h     |   4 +-
 .../EntityLinker/MultiArchSharedLibrary.h     |   4 +-
 .../Core/Model/BuildNamespace.h               |  80 ++++--------
 .../Core/Model/EntityName.h                   |   6 +-
 .../Core/Model/PrivateFieldNames.def          |   3 +-
 .../Core/Serialization/JSONFormat.h           |   8 +-
 .../Core/Support/FormatProviders.h            |   7 --
 .../Core/EntityLinker/EntityLinker.cpp        |  19 ++-
 .../Core/Model/BuildNamespace.cpp             |  29 +----
 .../Core/Model/EntityName.cpp                 |   4 +-
 .../JSONFormat/JSONFormatImpl.cpp             |  76 +++---------
 .../Serialization/JSONFormat/LUSummary.cpp    |   8 +-
 .../JSONFormat/LUSummaryEncoding.cpp          |   8 +-
 .../JSONFormat/MultiArchSharedLibrary.cpp     |   9 +-
 .../JSONFormat/MultiArchStaticLibrary.cpp     |  18 +--
 .../JSONFormat/StaticLibrary.cpp              |   8 +-
 .../Serialization/JSONFormat/TUSummary.cpp    |   8 +-
 .../JSONFormat/TUSummaryEncoding.cpp          |   8 +-
 .../Inputs/tu-summary-bad-array.json          |   6 +-
 .../Inputs/tu-summary-bad-summary.json        |   6 +-
 .../PointerFlow/Inputs/tu-summary-no-key.json |   6 +-
 .../PointerFlow/Inputs/tu-summary.json        |   6 +-
 .../Inputs/wpa-result-bad-edges.json          |   4 +-
 .../Inputs/wpa-result-odd-count.json          |   4 +-
 .../PointerFlow/Inputs/wpa-result.json        |  12 +-
 .../Inputs/tu-summary-bad-element.json        |   6 +-
 .../Inputs/tu-summary-bad-ptr-level.json      |   6 +-
 .../Inputs/tu-summary-no-key.json             |   6 +-
 .../UnsafeBufferUsage/Inputs/tu-summary.json  |   6 +-
 .../Inputs/wpa-result-bad-epls.json           |   4 +-
 .../Inputs/wpa-result-odd-count.json          |   4 +-
 .../UnsafeBufferUsage/Inputs/wpa-result.json  |  12 +-
 .../ssaf-analyzer/Inputs/lu-tags-only.json    |   8 +-
 .../Scalable/ssaf-analyzer/Inputs/lu.json     |  16 +--
 .../Scalable/ssaf-analyzer/Outputs/all.json   |  12 +-
 .../Scalable/ssaf-analyzer/Outputs/both.json  |  12 +-
 .../Scalable/ssaf-analyzer/Outputs/pairs.json |  12 +-
 .../Scalable/ssaf-analyzer/Outputs/tags.json  |  12 +-
 .../Artifact/Inputs/rt-lu-empty.json          |   4 +-
 .../rt-multi-arch-shared-library-empty.json   |   4 +-
 ...rt-multi-arch-shared-library-nonempty.json |  20 +--
 .../rt-multi-arch-static-library-empty.json   |  12 +-
 ...rt-multi-arch-static-library-nonempty.json |  24 ++--
 .../Inputs/rt-static-library-empty.json       |   6 +-
 .../Artifact/Inputs/rt-tu-empty.json          |   6 +-
 .../invalid-direct-callee-element.json        |   6 +-
 .../CallGraph/invalid-direct-callee-id.json   |   6 +-
 .../Inputs/CallGraph/missing-def-col.json     |   6 +-
 .../Inputs/CallGraph/missing-def-file.json    |   6 +-
 .../Inputs/CallGraph/missing-def-line.json    |   6 +-
 .../Inputs/CallGraph/missing-def.json         |   6 +-
 .../CallGraph/missing-direct-callees.json     |   6 +-
 .../Inputs/CallGraph/missing-pretty-name.json |   6 +-
 .../CallGraph/missing-virtual-callees.json    |   6 +-
 .../Inputs/data-element-not-object.json       |   4 +-
 .../Inputs/data-entry-missing-data.json       |   4 +-
 .../data-entry-missing-summary-name.json      |   4 +-
 .../LUSummary/Inputs/data-not-array.json      |   4 +-
 .../duplicate-entity-id-in-data-map.json      |  12 +-
 .../LUSummary/Inputs/duplicate-entity.json    |  20 +--
 .../Inputs/duplicate-summary-name.json        |   4 +-
 .../entity-data-element-not-object.json       |   4 +-
 .../Inputs/entity-data-missing-entity-id.json |   4 +-
 .../entity-data-missing-entity-summary.json   |   4 +-
 .../Inputs/entity-id-not-uint64.json          |   4 +-
 .../Inputs/entity-name-missing-namespace.json |   4 +-
 .../Inputs/entity-name-missing-suffix.json    |   8 +-
 .../Inputs/entity-name-missing-usr.json       |  12 +-
 .../Inputs/id-table-element-not-object.json   |   4 +-
 .../Inputs/id-table-entry-id-not-uint64.json  |  12 +-
 .../Inputs/id-table-entry-missing-id.json     |  12 +-
 .../Inputs/id-table-entry-missing-name.json   |   4 +-
 .../LUSummary/Inputs/id-table-not-array.json  |   4 +-
 .../Inputs/linkage-table-duplicate-id.json    |  12 +-
 .../linkage-table-element-not-object.json     |   4 +-
 .../linkage-table-entry-id-not-uint64.json    |   4 +-
 ...kage-table-entry-linkage-invalid-type.json |   4 +-
 ...kage-table-entry-linkage-missing-type.json |   4 +-
 .../linkage-table-entry-missing-id.json       |   4 +-
 .../linkage-table-entry-missing-linkage.json  |   4 +-
 .../Inputs/linkage-table-extra-id.json        |   4 +-
 .../Inputs/linkage-table-missing-id.json      |  12 +-
 .../Inputs/linkage-table-not-array.json       |   4 +-
 .../lu-namespace-element-not-object.json      |  10 --
 ...n => lu-namespace-element-not-string.json} |   2 +-
 .../Inputs/lu-namespace-not-array.json        |   4 +-
 .../LUSummary/Inputs/mismatched-type.json     |   4 +-
 .../LUSummary/Inputs/missing-data.json        |   4 +-
 .../LUSummary/Inputs/missing-id-table.json    |   4 +-
 .../Inputs/missing-linkage-table.json         |   4 +-
 .../Inputs/missing-target-triple.json         |   4 +-
 .../LUSummary/Inputs/missing-type.json        |   4 +-
 .../Inputs/namespace-element-not-object.json  |  30 -----
 ...json => namespace-element-not-string.json} |   8 +-
 .../Inputs/not-normalized-target-triple.json  |   4 +-
 .../Inputs/pairs-element-not-object.json      |   4 +-
 .../Inputs/pairs-invalid-first-field.json     |   4 +-
 .../pairs-invalid-pairs-field-type.json       |   4 +-
 .../Inputs/pairs-invalid-second-field.json    |   4 +-
 .../Inputs/pairs-missing-first-field.json     |   4 +-
 .../Inputs/pairs-missing-pairs-field.json     |   4 +-
 .../Inputs/pairs-missing-second-field.json    |   4 +-
 .../read-entity-summary-no-format-info.json   |   4 +-
 .../LUSummary/Inputs/rt-empty-data-entry.json |   4 +-
 .../LUSummary/Inputs/rt-empty-namespace.json  |   4 +-
 .../LUSummary/Inputs/rt-linkage-external.json |   8 +-
 .../LUSummary/Inputs/rt-linkage-internal.json |   8 +-
 .../LUSummary/Inputs/rt-linkage-multiple.json |  16 +--
 .../LUSummary/Inputs/rt-linkage-none.json     |   8 +-
 .../rt-multiple-namespace-elements.json       |  12 +-
 .../Inputs/rt-single-namespace-element.json   |   4 +-
 .../Inputs/rt-two-summary-types.json          |  24 +---
 .../ssaf-format/LUSummary/id-table.test       |  36 ++----
 .../ssaf-format/LUSummary/top-level.test      |  31 ++---
 .../Inputs/duplicate-target-triple.json       |  12 +-
 .../Inputs/member-empty-lu-namespace.json     |   4 +-
 .../Inputs/member-inner-error.json            |   4 +-
 .../Inputs/member-mismatched-type.json        |   8 +-
 .../Inputs/member-missing-type.json           |   8 +-
 .../Inputs/member-namespace-mismatch.json     |   8 +-
 .../Inputs/member-not-object.json             |   4 +-
 .../Inputs/members-not-array.json             |   4 +-
 .../Inputs/mismatched-type.json               |   4 +-
 .../Inputs/missing-members.json               |   4 +-
 .../Inputs/missing-type.json                  |   4 +-
 .../Inputs/rt-empty-members.json              |   4 +-
 .../Inputs/rt-multiple-members.json           |  12 +-
 .../Inputs/rt-nonempty-members.json           |  20 +--
 .../Inputs/rt-single-member.json              |   8 +-
 .../Inputs/rt-three-members.json              |  16 +--
 .../Inputs/unsorted-members-input.json        |  12 +-
 .../Inputs/unsorted-three-members-input.json  |  16 +--
 .../MultiArchSharedLibrary/top-level.test     |   6 +-
 .../Inputs/duplicate-target-triple.json       |  18 +--
 .../Inputs/member-inner-error.json            |   6 +-
 .../Inputs/member-mismatched-type.json        |  12 +-
 .../Inputs/member-missing-type.json           |  12 +-
 .../Inputs/member-namespace-mismatch.json     |  12 +-
 .../Inputs/member-not-object.json             |   6 +-
 .../Inputs/members-not-array.json             |   6 +-
 .../Inputs/mismatched-type.json               |   6 +-
 .../Inputs/missing-members.json               |   6 +-
 .../Inputs/missing-type.json                  |   6 +-
 ...t-object.json => namespace-not-array.json} |   0
 .../Inputs/rt-empty-members.json              |   6 +-
 .../Inputs/rt-multiple-members.json           |  18 +--
 .../Inputs/rt-nonempty-members.json           |  30 ++---
 .../Inputs/rt-single-member.json              |  12 +-
 .../Inputs/rt-three-members.json              |  24 ++--
 .../Inputs/unsorted-members-input.json        |  18 +--
 .../Inputs/unsorted-three-members-input.json  |  24 ++--
 .../MultiArchStaticLibrary/top-level.test     |  16 +--
 .../Inputs/duplicate-member.json              |  18 +--
 .../Inputs/member-inner-error.json            |   6 +-
 .../Inputs/member-mismatched-type.json        |   6 +-
 .../Inputs/member-missing-type.json           |  12 +-
 .../Inputs/member-not-object.json             |   6 +-
 .../Inputs/member-triple-mismatch.json        |  12 +-
 .../Inputs/members-not-array.json             |   6 +-
 .../StaticLibrary/Inputs/mismatched-type.json |   6 +-
 .../StaticLibrary/Inputs/missing-members.json |   6 +-
 .../Inputs/missing-target-triple.json         |   6 +-
 .../StaticLibrary/Inputs/missing-type.json    |   6 +-
 .../Inputs/namespace-missing-name.json        |   6 -
 .../Inputs/not-normalized-target-triple.json  |   6 +-
 .../StaticLibrary/Inputs/rt-empty.json        |   6 +-
 .../Inputs/rt-multiple-members.json           |  24 ++--
 .../Inputs/rt-single-member.json              |  12 +-
 .../Inputs/unsorted-members-input.json        |  24 ++--
 .../ssaf-format/StaticLibrary/top-level.test  |  12 +-
 .../Inputs/data-element-not-object.json       |   6 +-
 .../Inputs/data-entry-missing-data.json       |   6 +-
 .../data-entry-missing-summary-name.json      |   6 +-
 .../TUSummary/Inputs/data-not-array.json      |   6 +-
 .../duplicate-entity-id-in-data-map.json      |   6 +-
 .../TUSummary/Inputs/duplicate-entity.json    |   6 +-
 .../Inputs/duplicate-summary-name.json        |   6 +-
 .../entity-data-element-not-object.json       |   6 +-
 .../Inputs/entity-data-missing-entity-id.json |   6 +-
 .../entity-data-missing-entity-summary.json   |   6 +-
 .../Inputs/entity-id-not-uint64.json          |   6 +-
 .../Inputs/entity-name-missing-suffix.json    |   6 +-
 .../Inputs/entity-name-missing-usr.json       |   6 +-
 .../Inputs/id-table-element-not-object.json   |   6 +-
 .../Inputs/id-table-entry-id-not-uint64.json  |   6 +-
 .../Inputs/id-table-entry-missing-id.json     |   6 +-
 .../Inputs/id-table-entry-missing-name.json   |   6 +-
 .../TUSummary/Inputs/id-table-not-array.json  |   6 +-
 .../Inputs/linkage-table-duplicate-id.json    |   6 +-
 .../linkage-table-element-not-object.json     |   6 +-
 .../linkage-table-entry-id-not-uint64.json    |   6 +-
 ...kage-table-entry-linkage-invalid-type.json |   6 +-
 ...kage-table-entry-linkage-missing-type.json |   6 +-
 .../linkage-table-entry-missing-id.json       |   6 +-
 .../linkage-table-entry-missing-linkage.json  |   6 +-
 .../Inputs/linkage-table-extra-id.json        |   6 +-
 .../Inputs/linkage-table-missing-id.json      |   6 +-
 .../Inputs/linkage-table-not-array.json       |   6 +-
 .../TUSummary/Inputs/mismatched-type.json     |   6 +-
 .../TUSummary/Inputs/missing-data.json        |   6 +-
 .../TUSummary/Inputs/missing-id-table.json    |   6 +-
 .../Inputs/missing-linkage-table.json         |   6 +-
 .../TUSummary/Inputs/missing-name.json        |   8 --
 .../Inputs/missing-target-triple.json         |   6 +-
 .../TUSummary/Inputs/missing-type.json        |   6 +-
 .../Inputs/not-normalized-target-triple.json  |   6 +-
 .../Inputs/pairs-element-not-object.json      |   6 +-
 .../Inputs/pairs-invalid-first-field.json     |   6 +-
 .../pairs-invalid-pairs-field-type.json       |   6 +-
 .../Inputs/pairs-invalid-second-field.json    |   6 +-
 .../Inputs/pairs-missing-first-field.json     |   6 +-
 .../Inputs/pairs-missing-pairs-field.json     |   6 +-
 .../Inputs/pairs-missing-second-field.json    |   6 +-
 .../read-entity-summary-no-format-info.json   |   6 +-
 .../TUSummary/Inputs/rt-empty-data-entry.json |   6 +-
 .../TUSummary/Inputs/rt-empty.json            |   6 +-
 .../TUSummary/Inputs/rt-link-unit.json        |   6 +-
 .../TUSummary/Inputs/rt-linkage-external.json |   6 +-
 .../TUSummary/Inputs/rt-linkage-internal.json |   6 +-
 .../TUSummary/Inputs/rt-linkage-multiple.json |   6 +-
 .../TUSummary/Inputs/rt-linkage-none.json     |   6 +-
 .../Inputs/rt-two-summary-types.json          |   6 +-
 .../ssaf-format/TUSummary/top-level.test      |  14 +--
 .../Inputs/pairs-result-bad-count.json        |   8 +-
 .../Inputs/pairs-result-entry-not-object.json |   4 +-
 .../pairs-result-missing-entity-id.json       |   4 +-
 .../WPASuite/Inputs/rt-all-results.json       |  12 +-
 .../WPASuite/Inputs/rt-multiple-results.json  |   4 +-
 .../Scalable/ssaf-linker/Inputs/tu-1.json     |   6 +-
 .../Scalable/ssaf-linker/Inputs/tu-2.json     |   6 +-
 .../Scalable/ssaf-linker/Inputs/tu-empty.json |   6 +-
 .../Inputs/tu-invalid-entity-id-multikey.json |   6 +-
 .../Inputs/tu-invalid-entity-id-ref.json      |   6 +-
 .../Inputs/tu-invalid-entity-id-value.json    |   6 +-
 .../ssaf-linker/Inputs/tu-missing-fields.json |   6 +-
 .../Scalable/ssaf-linker/Outputs/lu-1+2.json  |  80 +++---------
 .../Scalable/ssaf-linker/Outputs/lu-1.json    |  44 ++-----
 .../Scalable/ssaf-linker/Outputs/lu-2.json    |  44 ++-----
 .../ssaf-linker/Outputs/lu-empty.json         |   4 +-
 .../Scalable/ssaf-linker/linking-errors.test  |   2 +-
 clang/tools/clang-ssaf-linker/SSAFLinker.cpp  |   2 +-
 .../PointerFlow/PointerFlowWPATest.cpp        |   4 +-
 .../UnsafeBufferUsageWPATest.cpp              |   4 +-
 .../BuildNamespaceTest.cpp                    | 114 ++++++++----------
 .../EntityIdTableTest.cpp                     |   5 +-
 .../EntityLinkerTest.cpp                      |  33 +++--
 .../ScalableStaticAnalysis/EntityNameTest.cpp |  29 +++--
 .../TUSummaryExtractorFrontendActionTest.cpp  |   2 +-
 .../ScalableStaticAnalysis/LUSummaryTest.cpp  |   2 +-
 .../JSONFormatTest/LUSummaryTest.cpp          |  34 ++----
 .../JSONFormatTest/TUSummaryTest.cpp          |  24 +---
 .../SummaryData/SummaryDataTest.cpp           |   4 +-
 .../ScalableStaticAnalysis/TestFixture.cpp    |   4 -
 .../ScalableStaticAnalysis/TestFixture.h      |   1 -
 .../AnalysisDriverTest.cpp                    |   4 +-
 .../UnsafeBufferReachableAnalysisTest.cpp     |   4 +-
 258 files changed, 914 insertions(+), 1568 deletions(-)
 delete mode 100644 clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/lu-namespace-element-not-object.json
 rename clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/{lu-namespace-element-missing-name.json => lu-namespace-element-not-string.json} (95%)
 delete mode 100644 clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/namespace-element-not-object.json
 rename clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/{namespace-element-missing-name.json => namespace-element-not-string.json} (81%)
 rename clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/{namespace-not-object.json => namespace-not-array.json} (100%)
 delete mode 100644 clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/namespace-missing-name.json
 delete mode 100644 clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-name.json

diff --git a/clang/include/clang/ScalableStaticAnalysis/Core/EntityLinker/EntityLinker.h b/clang/include/clang/ScalableStaticAnalysis/Core/EntityLinker/EntityLinker.h
index f07def1a9b344..8add44e765715 100644
--- a/clang/include/clang/ScalableStaticAnalysis/Core/EntityLinker/EntityLinker.h
+++ b/clang/include/clang/ScalableStaticAnalysis/Core/EntityLinker/EntityLinker.h
@@ -36,7 +36,7 @@ class EntityLinker {
   /// \param TargetTriple The target triple of the link unit. Every linked TU
   ///        must report the same triple.
   /// \param LUNamespace The namespace identifying this link unit.
-  EntityLinker(llvm::Triple TargetTriple, NestedBuildNamespace LUNamespace)
+  EntityLinker(llvm::Triple TargetTriple, BuildNamespace LUNamespace)
       : Output(std::move(TargetTriple), std::move(LUNamespace)) {}
 
   /// Links a TU summary into a LU summary.
@@ -64,7 +64,7 @@ class EntityLinker {
   /// \returns The resolved LU EntityId.
   EntityId resolveEntity(const EntityName &OldName,
                          const EntityLinkage &Linkage,
-                         const NestedBuildNamespace &TUNamespace);
+                         const BuildNamespace &TUNamespace);
 
   /// Resolves each TU EntityId to its corresponding LU EntityId.
   ///
diff --git a/clang/include/clang/ScalableStaticAnalysis/Core/EntityLinker/LUSummary.h b/clang/include/clang/ScalableStaticAnalysis/Core/EntityLinker/LUSummary.h
index 97142b0dd948a..1c25831a46612 100644
--- a/clang/include/clang/ScalableStaticAnalysis/Core/EntityLinker/LUSummary.h
+++ b/clang/include/clang/ScalableStaticAnalysis/Core/EntityLinker/LUSummary.h
@@ -40,7 +40,7 @@ class LUSummary {
   /// Target triple of the link unit.
   llvm::Triple TargetTriple;
 
-  NestedBuildNamespace LUNamespace;
+  BuildNamespace LUNamespace;
 
   EntityIdTable IdTable;
 
@@ -50,11 +50,11 @@ class LUSummary {
       Data;
 
 public:
-  LUSummary(llvm::Triple TargetTriple, NestedBuildNamespace LUNamespace)
+  LUSummary(llvm::Triple TargetTriple, BuildNamespace LUNamespace)
       : TargetTriple(std::move(TargetTriple)),
         LUNamespace(std::move(LUNamespace)) {}
 
-  const NestedBuildNamespace &getNamespace() const { return LUNamespace; }
+  const BuildNamespace &getNamespace() const { return LUNamespace; }
 };
 
 } // namespace clang::ssaf
diff --git a/clang/include/clang/ScalableStaticAnalysis/Core/EntityLinker/LUSummaryEncoding.h b/clang/include/clang/ScalableStaticAnalysis/Core/EntityLinker/LUSummaryEncoding.h
index 308196d38a84a..9f0cbe9fe1451 100644
--- a/clang/include/clang/ScalableStaticAnalysis/Core/EntityLinker/LUSummaryEncoding.h
+++ b/clang/include/clang/ScalableStaticAnalysis/Core/EntityLinker/LUSummaryEncoding.h
@@ -41,7 +41,7 @@ class LUSummaryEncoding {
   llvm::Triple TargetTriple;
 
   // The namespace identifying this link unit.
-  NestedBuildNamespace LUNamespace;
+  BuildNamespace LUNamespace;
 
   // Maps entity names to their unique identifiers within this link unit.
   EntityIdTable IdTable;
@@ -55,7 +55,7 @@ class LUSummaryEncoding {
       Data;
 
 public:
-  LUSummaryEncoding(llvm::Triple TargetTriple, NestedBuildNamespace LUNamespace)
+  LUSummaryEncoding(llvm::Triple TargetTriple, BuildNamespace LUNamespace)
       : TargetTriple(std::move(TargetTriple)),
         LUNamespace(std::move(LUNamespace)) {}
 };
diff --git a/clang/include/clang/ScalableStaticAnalysis/Core/EntityLinker/MultiArchSharedLibrary.h b/clang/include/clang/ScalableStaticAnalysis/Core/EntityLinker/MultiArchSharedLibrary.h
index 8c3f4345ee5f8..82b0e12bcd2fc 100644
--- a/clang/include/clang/ScalableStaticAnalysis/Core/EntityLinker/MultiArchSharedLibrary.h
+++ b/clang/include/clang/ScalableStaticAnalysis/Core/EntityLinker/MultiArchSharedLibrary.h
@@ -58,14 +58,14 @@ class MultiArchSharedLibrary {
   // library. It matches the LUNamespace of every member exactly (same
   // path, same kinds, same names): the shared library's identity is the
   // same across all its architecture slices.
-  NestedBuildNamespace Namespace;
+  BuildNamespace Namespace;
 
   // LUSummaryEncoding objects ordered by TargetTriple enum components.
   // Two members with the same TargetTriple are not permitted.
   std::set<std::unique_ptr<LUSummaryEncoding>, MemberByTargetTriple> Members;
 
 public:
-  explicit MultiArchSharedLibrary(NestedBuildNamespace Namespace)
+  explicit MultiArchSharedLibrary(BuildNamespace Namespace)
       : Namespace(std::move(Namespace)) {}
 };
 
diff --git a/clang/include/clang/ScalableStaticAnalysis/Core/Model/BuildNamespace.h b/clang/include/clang/ScalableStaticAnalysis/Core/Model/BuildNamespace.h
index a11b979c4a550..bc0a78a21a055 100644
--- a/clang/include/clang/ScalableStaticAnalysis/Core/Model/BuildNamespace.h
+++ b/clang/include/clang/ScalableStaticAnalysis/Core/Model/BuildNamespace.h
@@ -6,8 +6,8 @@
 //
 //===----------------------------------------------------------------------===//
 //
-// This file defines BuildNamespace and NestedBuildNamespace classes that
-// represent build namespaces in the Scalable Static Analysis Framework.
+// This file defines the BuildNamespace class that represents a build namespace
+// in the Scalable Static Analysis Framework.
 //
 // Build namespaces provide an abstraction for grouping program entities (such
 // as those in a shared library or compilation unit) to enable analysis of
@@ -21,86 +21,54 @@
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/Support/raw_ostream.h"
-#include <optional>
 #include <string>
 #include <vector>
 
 namespace clang::ssaf {
 
-/// Represents a single namespace in the build process.
+/// Represents a hierarchical build namespace.
 ///
-/// A BuildNamespace groups program entities, such as those belonging to a
-/// compilation unit or link unit (e.g., a shared library). Each namespace is
-/// identified by a unique name.
+/// A BuildNamespace is an ordered sequence of name strings that qualifies
+/// program entities through multiple steps of the build process. For example,
+/// an entity may be qualified first by a compilation-unit name and then by a
+/// link-unit name.
 ///
-/// BuildNamespaces can be composed into NestedBuildNamespace to represent
-/// hierarchical namespace structures that model how software is constructed
-/// from its components.
+/// A default-constructed BuildNamespace has zero levels and denotes "no
+/// qualification". A single-level BuildNamespace can be constructed from a
+/// StringRef.
 class BuildNamespace {
-  std::string Name;
+  std::vector<std::string> Names;
 
 public:
-  explicit BuildNamespace(llvm::StringRef Name) : Name(Name.str()) {}
+  BuildNamespace() = default;
 
-  bool operator==(const BuildNamespace &Other) const;
-  bool operator!=(const BuildNamespace &Other) const;
-  bool operator<(const BuildNamespace &Other) const;
-
-  friend class EntityLinker;
-  friend class SerializationFormat;
-  friend class TestFixture;
-  friend llvm::raw_ostream &operator<<(llvm::raw_ostream &OS,
-                                       const BuildNamespace &BN);
-};
-
-/// Represents a hierarchical sequence of build namespaces.
-///
-/// A NestedBuildNamespace captures namespace qualification for program entities
-/// by maintaining an ordered sequence of BuildNamespace steps. This models how
-/// entities are organized through multiple steps of the build process, such as
-/// first being part of a compilation unit, then incorporated into a link unit.
-///
-/// For example, an entity might be qualified by a compilation unit namespace
-/// followed by a shared library namespace.
-class NestedBuildNamespace {
-  std::vector<BuildNamespace> Namespaces;
-
-public:
-  NestedBuildNamespace() = default;
-
-  explicit NestedBuildNamespace(const std::vector<BuildNamespace> &Namespaces)
-      : Namespaces(Namespaces) {}
+  explicit BuildNamespace(llvm::StringRef Name) : Names{Name.str()} {}
 
-  explicit NestedBuildNamespace(const BuildNamespace &N) {
-    Namespaces.push_back(N);
-  }
+  explicit BuildNamespace(std::vector<std::string> Names)
+      : Names(std::move(Names)) {}
 
-  /// Creates a new NestedBuildNamespace by appending additional namespace.
-  ///
-  /// \param Namespace The namespace to append.
-  NestedBuildNamespace makeQualified(NestedBuildNamespace Namespace) const {
+  /// Returns a new BuildNamespace with \p Namespace appended.
+  BuildNamespace makeQualified(BuildNamespace Namespace) const {
     auto Copy = *this;
-    Copy.Namespaces.reserve(Copy.Namespaces.size() +
-                            Namespace.Namespaces.size());
-    llvm::append_range(Copy.Namespaces, Namespace.Namespaces);
+    Copy.Names.reserve(Copy.Names.size() + Namespace.Names.size());
+    llvm::append_range(Copy.Names, Namespace.Names);
     return Copy;
   }
 
   bool empty() const;
 
-  bool operator==(const NestedBuildNamespace &Other) const;
-  bool operator!=(const NestedBuildNamespace &Other) const;
-  bool operator<(const NestedBuildNamespace &Other) const;
+  bool operator==(const BuildNamespace &Other) const;
+  bool operator!=(const BuildNamespace &Other) const;
+  bool operator<(const BuildNamespace &Other) const;
 
+  friend class EntityLinker;
   friend class SerializationFormat;
   friend class TestFixture;
   friend llvm::raw_ostream &operator<<(llvm::raw_ostream &OS,
-                                       const NestedBuildNamespace &NBN);
+                                       const BuildNamespace &BN);
 };
 
 llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, const BuildNamespace &BN);
-llvm::raw_ostream &operator<<(llvm::raw_ostream &OS,
-                              const NestedBuildNamespace &NBN);
 
 } // namespace clang::ssaf
 
diff --git a/clang/include/clang/ScalableStaticAnalysis/Core/Model/EntityName.h b/clang/include/clang/ScalableStaticAnalysis/Core/Model/EntityName.h
index ecc402e05d4b8..95780ce2174cb 100644
--- a/clang/include/clang/ScalableStaticAnalysis/Core/Model/EntityName.h
+++ b/clang/include/clang/ScalableStaticAnalysis/Core/Model/EntityName.h
@@ -34,7 +34,7 @@ class EntityName {
 
   std::string USR;
   llvm::SmallString<16> Suffix;
-  NestedBuildNamespace Namespace;
+  BuildNamespace Namespace;
 
   auto asTuple() const { return std::tie(USR, Suffix, Namespace); }
 
@@ -43,7 +43,7 @@ class EntityName {
   /// Use getEntityName and other functions in ASTEntityMapping.h to get
   /// entity names.
   EntityName(llvm::StringRef USR, llvm::StringRef Suffix,
-             NestedBuildNamespace Namespace);
+             BuildNamespace Namespace);
 
   bool operator==(const EntityName &Other) const;
   bool operator!=(const EntityName &Other) const;
@@ -52,7 +52,7 @@ class EntityName {
   /// Creates a new EntityName with additional build namespace qualification.
   ///
   /// \param Namespace The namespace steps to append to this entity's namespace.
-  EntityName makeQualified(NestedBuildNamespace Namespace) const;
+  EntityName makeQualified(BuildNamespace Namespace) const;
 };
 
 llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, const EntityName &EN);
diff --git a/clang/include/clang/ScalableStaticAnalysis/Core/Model/PrivateFieldNames.def b/clang/include/clang/ScalableStaticAnalysis/Core/Model/PrivateFieldNames.def
index e77d699814d0e..da712b588717e 100644
--- a/clang/include/clang/ScalableStaticAnalysis/Core/Model/PrivateFieldNames.def
+++ b/clang/include/clang/ScalableStaticAnalysis/Core/Model/PrivateFieldNames.def
@@ -17,7 +17,7 @@
 #define FIELD(CLASS, FIELD_NAME)
 #endif
 
-FIELD(BuildNamespace, Name)
+FIELD(BuildNamespace, Names)
 FIELD(EntityId, Index)
 FIELD(EntityIdTable, Entities)
 FIELD(EntityLinkage, Linkage)
@@ -38,7 +38,6 @@ FIELD(MultiArchStaticLibrary, Members)
 FIELD(MultiArchStaticLibrary, Namespace)
 FIELD(MultiArchSharedLibrary, Members)
 FIELD(MultiArchSharedLibrary, Namespace)
-FIELD(NestedBuildNamespace, Namespaces)
 FIELD(StaticLibrary, Members)
 FIELD(StaticLibrary, Namespace)
 FIELD(StaticLibrary, TargetTriple)
diff --git a/clang/include/clang/ScalableStaticAnalysis/Core/Serialization/JSONFormat.h b/clang/include/clang/ScalableStaticAnalysis/Core/Serialization/JSONFormat.h
index aa4d3d6e3a3cd..cc6262e154a09 100644
--- a/clang/include/clang/ScalableStaticAnalysis/Core/Serialization/JSONFormat.h
+++ b/clang/include/clang/ScalableStaticAnalysis/Core/Serialization/JSONFormat.h
@@ -181,12 +181,8 @@ class JSONFormat final : public SerializationFormat {
   static Object entityIdToJSONObject(EntityId EI);
 
   llvm::Expected<BuildNamespace>
-  buildNamespaceFromJSON(const Object &BuildNamespaceObject) const;
-  Object buildNamespaceToJSON(const BuildNamespace &BN) const;
-
-  llvm::Expected<NestedBuildNamespace>
-  nestedBuildNamespaceFromJSON(const Array &NestedBuildNamespaceArray) const;
-  Array nestedBuildNamespaceToJSON(const NestedBuildNamespace &NBN) const;
+  buildNamespaceFromJSON(const Array &BuildNamespaceArray) const;
+  Array buildNamespaceToJSON(const BuildNamespace &BN) const;
 
   llvm::Expected<EntityName>
   tuEntityNameFromJSON(const Object &EntityNameObject) const;
diff --git a/clang/include/clang/ScalableStaticAnalysis/Core/Support/FormatProviders.h b/clang/include/clang/ScalableStaticAnalysis/Core/Support/FormatProviders.h
index b3b9e597dbc74..73f22cdf4748f 100644
--- a/clang/include/clang/ScalableStaticAnalysis/Core/Support/FormatProviders.h
+++ b/clang/include/clang/ScalableStaticAnalysis/Core/Support/FormatProviders.h
@@ -53,13 +53,6 @@ template <> struct format_provider<clang::ssaf::BuildNamespace> {
   }
 };
 
-template <> struct format_provider<clang::ssaf::NestedBuildNamespace> {
-  static void format(const clang::ssaf::NestedBuildNamespace &Val,
-                     raw_ostream &OS, StringRef Style) {
-    OS << Val;
-  }
-};
-
 template <> struct format_provider<clang::ssaf::EntityName> {
   static void format(const clang::ssaf::EntityName &Val, raw_ostream &OS,
                      StringRef Style) {
diff --git a/clang/lib/ScalableStaticAnalysis/Core/EntityLinker/EntityLinker.cpp b/clang/lib/ScalableStaticAnalysis/Core/EntityLinker/EntityLinker.cpp
index 462978932a53d..f533b5006e42c 100644
--- a/clang/lib/ScalableStaticAnalysis/Core/EntityLinker/EntityLinker.cpp
+++ b/clang/lib/ScalableStaticAnalysis/Core/EntityLinker/EntityLinker.cpp
@@ -46,11 +46,10 @@ static constexpr const char *DuplicateTUNamespace =
 
 } // namespace ErrorMessages
 
-static NestedBuildNamespace
-resolveNamespace(const NestedBuildNamespace &LUNamespace,
-                 const NestedBuildNamespace &TUNamespace,
-                 const NestedBuildNamespace &EntityNamespace,
-                 EntityLinkageType Linkage) {
+static BuildNamespace resolveNamespace(const BuildNamespace &LUNamespace,
+                                       const BuildNamespace &TUNamespace,
+                                       const BuildNamespace &EntityNamespace,
+                                       EntityLinkageType Linkage) {
   switch (Linkage) {
   case EntityLinkageType::None:
   case EntityLinkageType::Internal:
@@ -59,7 +58,7 @@ resolveNamespace(const NestedBuildNamespace &LUNamespace,
     return EntityNamespace.makeQualified(TUNamespace)
         .makeQualified(LUNamespace);
   case EntityLinkageType::External:
-    return NestedBuildNamespace(LUNamespace);
+    return BuildNamespace(LUNamespace);
   }
 
   llvm_unreachable("Unhandled EntityLinkageType variant");
@@ -67,8 +66,8 @@ resolveNamespace(const NestedBuildNamespace &LUNamespace,
 
 EntityId EntityLinker::resolveEntity(const EntityName &OldName,
                                      const EntityLinkage &Linkage,
-                                     const NestedBuildNamespace &TUNamespace) {
-  NestedBuildNamespace NewNamespace = resolveNamespace(
+                                     const BuildNamespace &TUNamespace) {
+  BuildNamespace NewNamespace = resolveNamespace(
       Output.LUNamespace, TUNamespace, OldName.Namespace, Linkage.getLinkage());
 
   EntityName NewName(OldName.USR, OldName.Suffix, NewNamespace);
@@ -108,8 +107,8 @@ EntityLinker::resolve(const TUSummaryEncoding &Summary) {
 
     const EntityLinkage &Linkage = Iter->second;
 
-    EntityId NewId = resolveEntity(OldName, Linkage,
-                                   NestedBuildNamespace(Summary.TUNamespace));
+    EntityId NewId =
+        resolveEntity(OldName, Linkage, BuildNamespace(Summary.TUNamespace));
 
     auto [_, Inserted] = EntityResolutionTable.insert({OldId, NewId});
     if (!Inserted) {
diff --git a/clang/lib/ScalableStaticAnalysis/Core/Model/BuildNamespace.cpp b/clang/lib/ScalableStaticAnalysis/Core/Model/BuildNamespace.cpp
index 953af8b12534b..31aab1b613884 100644
--- a/clang/lib/ScalableStaticAnalysis/Core/Model/BuildNamespace.cpp
+++ b/clang/lib/ScalableStaticAnalysis/Core/Model/BuildNamespace.cpp
@@ -11,8 +11,10 @@
 
 namespace clang::ssaf {
 
+bool BuildNamespace::empty() const { return Names.empty(); }
+
 bool BuildNamespace::operator==(const BuildNamespace &Other) const {
-  return Name == Other.Name;
+  return Names == Other.Names;
 }
 
 bool BuildNamespace::operator!=(const BuildNamespace &Other) const {
@@ -20,31 +22,12 @@ bool BuildNamespace::operator!=(const BuildNamespace &Other) const {
 }
 
 bool BuildNamespace::operator<(const BuildNamespace &Other) const {
-  return Name < Other.Name;
-}
-
-bool NestedBuildNamespace::empty() const { return Namespaces.empty(); }
-
-bool NestedBuildNamespace::operator==(const NestedBuildNamespace &Other) const {
-  return Namespaces == Other.Namespaces;
-}
-
-bool NestedBuildNamespace::operator!=(const NestedBuildNamespace &Other) const {
-  return !(*this == Other);
-}
-
-bool NestedBuildNamespace::operator<(const NestedBuildNamespace &Other) const {
-  return Namespaces < Other.Namespaces;
+  return Names < Other.Names;
 }
 
 llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, const BuildNamespace &BN) {
-  return OS << "BuildNamespace(" << BN.Name << ")";
-}
-
-llvm::raw_ostream &operator<<(llvm::raw_ostream &OS,
-                              const NestedBuildNamespace &NBN) {
-  OS << "NestedBuildNamespace([";
-  llvm::interleaveComma(NBN.Namespaces, OS);
+  OS << "BuildNamespace([";
+  llvm::interleaveComma(BN.Names, OS);
   OS << "])";
   return OS;
 }
diff --git a/clang/lib/ScalableStaticAnalysis/Core/Model/EntityName.cpp b/clang/lib/ScalableStaticAnalysis/Core/Model/EntityName.cpp
index c9e09df84143b..537fd6351f397 100644
--- a/clang/lib/ScalableStaticAnalysis/Core/Model/EntityName.cpp
+++ b/clang/lib/ScalableStaticAnalysis/Core/Model/EntityName.cpp
@@ -11,7 +11,7 @@
 namespace clang::ssaf {
 
 EntityName::EntityName(llvm::StringRef USR, llvm::StringRef Suffix,
-                       NestedBuildNamespace Namespace)
+                       BuildNamespace Namespace)
     : USR(USR.str()), Suffix(Suffix), Namespace(std::move(Namespace)) {}
 
 bool EntityName::operator==(const EntityName &Other) const {
@@ -26,7 +26,7 @@ bool EntityName::operator<(const EntityName &Other) const {
   return asTuple() < Other.asTuple();
 }
 
-EntityName EntityName::makeQualified(NestedBuildNamespace Namespace) const {
+EntityName EntityName::makeQualified(BuildNamespace Namespace) const {
   auto Copy = *this;
   Copy.Namespace = Copy.Namespace.makeQualified(Namespace);
 
diff --git a/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/JSONFormatImpl.cpp b/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/JSONFormatImpl.cpp
index 95226bef38b97..3daca581fc05c 100644
--- a/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/JSONFormatImpl.cpp
+++ b/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/JSONFormatImpl.cpp
@@ -240,68 +240,31 @@ Object JSONFormat::entityIdToJSONObject(EntityId EI) {
 //----------------------------------------------------------------------------
 
 llvm::Expected<BuildNamespace>
-JSONFormat::buildNamespaceFromJSON(const Object &BuildNamespaceObject) const {
-  auto OptNameStr = BuildNamespaceObject.getString("name");
-  if (!OptNameStr) {
-    return ErrorBuilder::create(std::errc::invalid_argument,
-                                ErrorMessages::FailedToReadObjectAtField,
-                                "BuildNamespaceName", "name", "string")
-        .build();
-  }
-
-  return {BuildNamespace(*OptNameStr)};
-}
+JSONFormat::buildNamespaceFromJSON(const Array &BuildNamespaceArray) const {
+  std::vector<std::string> Names;
+  Names.reserve(BuildNamespaceArray.size());
 
-Object JSONFormat::buildNamespaceToJSON(const BuildNamespace &BN) const {
-  Object Result;
-  Result["name"] = getName(BN);
-  return Result;
-}
-
-//----------------------------------------------------------------------------
-// NestedBuildNamespace
-//----------------------------------------------------------------------------
-
-llvm::Expected<NestedBuildNamespace> JSONFormat::nestedBuildNamespaceFromJSON(
-    const Array &NestedBuildNamespaceArray) const {
-  std::vector<BuildNamespace> Namespaces;
-
-  size_t NamespaceCount = NestedBuildNamespaceArray.size();
-  Namespaces.reserve(NamespaceCount);
-
-  for (const auto &[Index, BuildNamespaceValue] :
-       llvm::enumerate(NestedBuildNamespaceArray)) {
-    const Object *BuildNamespaceObject = BuildNamespaceValue.getAsObject();
-    if (!BuildNamespaceObject) {
+  for (const auto &[Index, NameValue] : llvm::enumerate(BuildNamespaceArray)) {
+    auto OptNameStr = NameValue.getAsString();
+    if (!OptNameStr) {
       return ErrorBuilder::create(std::errc::invalid_argument,
                                   ErrorMessages::FailedToReadObjectAtIndex,
-                                  "BuildNamespace", Index, "object")
-          .build();
-    }
-
-    auto ExpectedBuildNamespace = buildNamespaceFromJSON(*BuildNamespaceObject);
-    if (!ExpectedBuildNamespace) {
-      return ErrorBuilder::wrap(ExpectedBuildNamespace.takeError())
-          .context(ErrorMessages::ReadingFromIndex, "BuildNamespace", Index)
+                                  "BuildNamespace name", Index, "string")
           .build();
     }
-
-    Namespaces.push_back(std::move(*ExpectedBuildNamespace));
+    Names.emplace_back(*OptNameStr);
   }
 
-  return NestedBuildNamespace(std::move(Namespaces));
+  return BuildNamespace(std::move(Names));
 }
 
-Array JSONFormat::nestedBuildNamespaceToJSON(
-    const NestedBuildNamespace &NBN) const {
+Array JSONFormat::buildNamespaceToJSON(const BuildNamespace &BN) const {
   Array Result;
-  const auto &Namespaces = getNamespaces(NBN);
-  Result.reserve(Namespaces.size());
-
-  for (const auto &BN : Namespaces) {
-    Result.push_back(buildNamespaceToJSON(BN));
+  const auto &Names = getNames(BN);
+  Result.reserve(Names.size());
+  for (const auto &Name : Names) {
+    Result.push_back(Name);
   }
-
   return Result;
 }
 
@@ -339,7 +302,7 @@ JSONFormat::tuEntityNameFromJSON(const Object &EntityNameObject) const {
     return ExpectedCore.takeError();
 
   auto [USR, Suffix] = *ExpectedCore;
-  return EntityName{USR, Suffix, NestedBuildNamespace()};
+  return EntityName{USR, Suffix, BuildNamespace()};
 }
 
 Object JSONFormat::tuEntityNameToJSON(const EntityName &EN) const {
@@ -361,15 +324,14 @@ JSONFormat::luEntityNameFromJSON(const Object &EntityNameObject) const {
   if (!OptNamespaceArray) {
     return ErrorBuilder::create(std::errc::invalid_argument,
                                 ErrorMessages::FailedToReadObjectAtField,
-                                "NestedBuildNamespace", "namespace", "array")
+                                "BuildNamespace", "namespace", "array")
         .build();
   }
 
-  auto ExpectedNamespace = nestedBuildNamespaceFromJSON(*OptNamespaceArray);
+  auto ExpectedNamespace = buildNamespaceFromJSON(*OptNamespaceArray);
   if (!ExpectedNamespace) {
     return ErrorBuilder::wrap(ExpectedNamespace.takeError())
-        .context(ErrorMessages::ReadingFromField, "NestedBuildNamespace",
-                 "namespace")
+        .context(ErrorMessages::ReadingFromField, "BuildNamespace", "namespace")
         .build();
   }
 
@@ -380,7 +342,7 @@ Object JSONFormat::luEntityNameToJSON(const EntityName &EN) const {
   Object Result;
   Result["usr"] = getUSR(EN);
   Result["suffix"] = getSuffix(EN);
-  Result["namespace"] = nestedBuildNamespaceToJSON(getNamespace(EN));
+  Result["namespace"] = buildNamespaceToJSON(getNamespace(EN));
   return Result;
 }
 
diff --git a/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/LUSummary.cpp b/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/LUSummary.cpp
index 89405bc1ed774..d9a1d6907414f 100644
--- a/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/LUSummary.cpp
+++ b/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/LUSummary.cpp
@@ -75,14 +75,14 @@ JSONFormat::readLUSummaryFromObject(const Object &RootObject) {
   if (!LUNamespaceArray) {
     return ErrorBuilder::create(std::errc::invalid_argument,
                                 ErrorMessages::FailedToReadObjectAtField,
-                                "NestedBuildNamespace", "lu_namespace", "array")
+                                "BuildNamespace", "lu_namespace", "array")
         .build();
   }
 
-  auto ExpectedLUNamespace = nestedBuildNamespaceFromJSON(*LUNamespaceArray);
+  auto ExpectedLUNamespace = buildNamespaceFromJSON(*LUNamespaceArray);
   if (!ExpectedLUNamespace) {
     return ErrorBuilder::wrap(ExpectedLUNamespace.takeError())
-        .context(ErrorMessages::ReadingFromField, "NestedBuildNamespace",
+        .context(ErrorMessages::ReadingFromField, "BuildNamespace",
                  "lu_namespace")
         .build();
   }
@@ -169,7 +169,7 @@ llvm::Error JSONFormat::writeLUSummary(const LUSummary &S,
   RootObject["target_triple"] =
       llvm::Triple::normalize(getTargetTriple(S).str());
 
-  RootObject["lu_namespace"] = nestedBuildNamespaceToJSON(getLUNamespace(S));
+  RootObject["lu_namespace"] = buildNamespaceToJSON(getLUNamespace(S));
 
   RootObject["id_table"] = luEntityIdTableToJSON(getIdTable(S));
 
diff --git a/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/LUSummaryEncoding.cpp b/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/LUSummaryEncoding.cpp
index 8961ce95e059b..856f3d284f2e9 100644
--- a/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/LUSummaryEncoding.cpp
+++ b/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/LUSummaryEncoding.cpp
@@ -76,14 +76,14 @@ JSONFormat::readLUSummaryEncodingFromObject(const Object &RootObject) {
   if (!LUNamespaceArray) {
     return ErrorBuilder::create(std::errc::invalid_argument,
                                 ErrorMessages::FailedToReadObjectAtField,
-                                "NestedBuildNamespace", "lu_namespace", "array")
+                                "BuildNamespace", "lu_namespace", "array")
         .build();
   }
 
-  auto ExpectedLUNamespace = nestedBuildNamespaceFromJSON(*LUNamespaceArray);
+  auto ExpectedLUNamespace = buildNamespaceFromJSON(*LUNamespaceArray);
   if (!ExpectedLUNamespace) {
     return ErrorBuilder::wrap(ExpectedLUNamespace.takeError())
-        .context(ErrorMessages::ReadingFromField, "NestedBuildNamespace",
+        .context(ErrorMessages::ReadingFromField, "BuildNamespace",
                  "lu_namespace")
         .build();
   }
@@ -183,7 +183,7 @@ Object JSONFormat::luSummaryEncodingToJSON(
       llvm::Triple::normalize(getTargetTriple(SummaryEncoding).str());
 
   RootObject["lu_namespace"] =
-      nestedBuildNamespaceToJSON(getLUNamespace(SummaryEncoding));
+      buildNamespaceToJSON(getLUNamespace(SummaryEncoding));
 
   RootObject["id_table"] = luEntityIdTableToJSON(getIdTable(SummaryEncoding));
 
diff --git a/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/MultiArchSharedLibrary.cpp b/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/MultiArchSharedLibrary.cpp
index d23eef1ff9fe9..a9a5301738703 100644
--- a/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/MultiArchSharedLibrary.cpp
+++ b/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/MultiArchSharedLibrary.cpp
@@ -59,15 +59,14 @@ JSONFormat::readMultiArchSharedLibraryFromObject(const Object &RootObject) {
   if (!NamespaceArray) {
     return ErrorBuilder::create(std::errc::invalid_argument,
                                 ErrorMessages::FailedToReadObjectAtField,
-                                "NestedBuildNamespace", "namespace", "array")
+                                "BuildNamespace", "namespace", "array")
         .build();
   }
 
-  auto ExpectedNamespace = nestedBuildNamespaceFromJSON(*NamespaceArray);
+  auto ExpectedNamespace = buildNamespaceFromJSON(*NamespaceArray);
   if (!ExpectedNamespace) {
     return ErrorBuilder::wrap(ExpectedNamespace.takeError())
-        .context(ErrorMessages::ReadingFromField, "NestedBuildNamespace",
-                 "namespace")
+        .context(ErrorMessages::ReadingFromField, "BuildNamespace", "namespace")
         .build();
   }
 
@@ -142,7 +141,7 @@ JSONFormat::writeMultiArchSharedLibrary(const MultiArchSharedLibrary &M,
 
   RootObject[JSONTypeKey] = JSONTypeValueMultiArchSharedLibrary;
 
-  RootObject["namespace"] = nestedBuildNamespaceToJSON(getNamespace(M));
+  RootObject["namespace"] = buildNamespaceToJSON(getNamespace(M));
 
   Array MembersArray;
   MembersArray.reserve(getMembers(M).size());
diff --git a/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/MultiArchStaticLibrary.cpp b/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/MultiArchStaticLibrary.cpp
index cfa84dbdcf883..68732ea84448d 100644
--- a/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/MultiArchStaticLibrary.cpp
+++ b/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/MultiArchStaticLibrary.cpp
@@ -55,15 +55,15 @@ JSONFormat::readMultiArchStaticLibrary(llvm::StringRef Path) {
 
 llvm::Expected<MultiArchStaticLibrary>
 JSONFormat::readMultiArchStaticLibraryFromObject(const Object &RootObject) {
-  const Object *NamespaceObject = RootObject.getObject("namespace");
-  if (!NamespaceObject) {
+  const Array *NamespaceArray = RootObject.getArray("namespace");
+  if (!NamespaceArray) {
     return ErrorBuilder::create(std::errc::invalid_argument,
                                 ErrorMessages::FailedToReadObjectAtField,
-                                "BuildNamespace", "namespace", "object")
+                                "BuildNamespace", "namespace", "array")
         .build();
   }
 
-  auto ExpectedNamespace = buildNamespaceFromJSON(*NamespaceObject);
+  auto ExpectedNamespace = buildNamespaceFromJSON(*NamespaceArray);
   if (!ExpectedNamespace) {
     return ErrorBuilder::wrap(ExpectedNamespace.takeError())
         .context(ErrorMessages::ReadingFromField, "BuildNamespace", "namespace")
@@ -81,7 +81,7 @@ JSONFormat::readMultiArchStaticLibraryFromObject(const Object &RootObject) {
 
   MultiArchStaticLibrary M(std::move(*ExpectedNamespace));
   auto &Members = getMembers(M);
-  const auto &ExpectedName = getName(getNamespace(M));
+  const auto &WrapperNamespace = getNamespace(M);
 
   for (const auto &[Index, MemberValue] : llvm::enumerate(*MembersArray)) {
     const Object *MemberObject = MemberValue.getAsObject();
@@ -109,11 +109,11 @@ JSONFormat::readMultiArchStaticLibraryFromObject(const Object &RootObject) {
           .build();
     }
 
-    const auto &MemberName = getName(getNamespace(*ExpectedMember));
-    if (MemberName != ExpectedName) {
+    const auto &MemberNamespace = getNamespace(*ExpectedMember);
+    if (MemberNamespace != WrapperNamespace) {
       return ErrorBuilder::create(std::errc::invalid_argument,
-                                  ErrorMessages::MismatchedSummaryType,
-                                  ExpectedName, "namespace.name", MemberName)
+                                  ErrorMessages::MismatchedNestedNamespace,
+                                  "namespace")
           .context(ErrorMessages::ReadingFromIndex,
                    "MultiArchStaticLibrary member", Index)
           .build();
diff --git a/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/StaticLibrary.cpp b/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/StaticLibrary.cpp
index 7786c58fa7c04..6433581dd9b97 100644
--- a/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/StaticLibrary.cpp
+++ b/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/StaticLibrary.cpp
@@ -71,15 +71,15 @@ JSONFormat::readStaticLibraryFromObject(const Object &RootObject) {
 
   llvm::Triple T(*OptTargetTriple);
 
-  const Object *NamespaceObject = RootObject.getObject("namespace");
-  if (!NamespaceObject) {
+  const Array *NamespaceArray = RootObject.getArray("namespace");
+  if (!NamespaceArray) {
     return ErrorBuilder::create(std::errc::invalid_argument,
                                 ErrorMessages::FailedToReadObjectAtField,
-                                "BuildNamespace", "namespace", "object")
+                                "BuildNamespace", "namespace", "array")
         .build();
   }
 
-  auto ExpectedNamespace = buildNamespaceFromJSON(*NamespaceObject);
+  auto ExpectedNamespace = buildNamespaceFromJSON(*NamespaceArray);
   if (!ExpectedNamespace) {
     return ErrorBuilder::wrap(ExpectedNamespace.takeError())
         .context(ErrorMessages::ReadingFromField, "BuildNamespace", "namespace")
diff --git a/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/TUSummary.cpp b/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/TUSummary.cpp
index a77a5952ddb91..741c8b0c9043e 100644
--- a/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/TUSummary.cpp
+++ b/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/TUSummary.cpp
@@ -71,15 +71,15 @@ JSONFormat::readTUSummaryFromObject(const Object &RootObject) {
 
   llvm::Triple T(*OptTargetTriple);
 
-  const Object *TUNamespaceObject = RootObject.getObject("tu_namespace");
-  if (!TUNamespaceObject) {
+  const Array *TUNamespaceArray = RootObject.getArray("tu_namespace");
+  if (!TUNamespaceArray) {
     return ErrorBuilder::create(std::errc::invalid_argument,
                                 ErrorMessages::FailedToReadObjectAtField,
-                                "BuildNamespace", "tu_namespace", "object")
+                                "BuildNamespace", "tu_namespace", "array")
         .build();
   }
 
-  auto ExpectedTUNamespace = buildNamespaceFromJSON(*TUNamespaceObject);
+  auto ExpectedTUNamespace = buildNamespaceFromJSON(*TUNamespaceArray);
   if (!ExpectedTUNamespace) {
     return ErrorBuilder::wrap(ExpectedTUNamespace.takeError())
         .context(ErrorMessages::ReadingFromField, "BuildNamespace",
diff --git a/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/TUSummaryEncoding.cpp b/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/TUSummaryEncoding.cpp
index 3ee4f059bd458..c9ad6149608ec 100644
--- a/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/TUSummaryEncoding.cpp
+++ b/clang/lib/ScalableStaticAnalysis/Core/Serialization/JSONFormat/TUSummaryEncoding.cpp
@@ -72,15 +72,15 @@ JSONFormat::readTUSummaryEncodingFromObject(const Object &RootObject) {
 
   llvm::Triple T(*OptTargetTriple);
 
-  const Object *TUNamespaceObject = RootObject.getObject("tu_namespace");
-  if (!TUNamespaceObject) {
+  const Array *TUNamespaceArray = RootObject.getArray("tu_namespace");
+  if (!TUNamespaceArray) {
     return ErrorBuilder::create(std::errc::invalid_argument,
                                 ErrorMessages::FailedToReadObjectAtField,
-                                "BuildNamespace", "tu_namespace", "object")
+                                "BuildNamespace", "tu_namespace", "array")
         .build();
   }
 
-  auto ExpectedTUNamespace = buildNamespaceFromJSON(*TUNamespaceObject);
+  auto ExpectedTUNamespace = buildNamespaceFromJSON(*TUNamespaceArray);
   if (!ExpectedTUNamespace) {
     return ErrorBuilder::wrap(ExpectedTUNamespace.takeError())
         .context(ErrorMessages::ReadingFromField, "BuildNamespace",
diff --git a/clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary-bad-array.json b/clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary-bad-array.json
index adbc21b787283..c0faa8cd8d18a 100644
--- a/clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary-bad-array.json
+++ b/clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary-bad-array.json
@@ -81,9 +81,9 @@
       }
     }
   ],
-  "tu_namespace": {
-    "name": "Mock.cpp"
-  },
+  "tu_namespace": [
+    "Mock.cpp"
+  ],
   "target_triple": "arm64-apple-macosx",
   "type": "TUSummary"
 }
diff --git a/clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary-bad-summary.json b/clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary-bad-summary.json
index 1e1823ae8ba92..37c81a34e524f 100644
--- a/clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary-bad-summary.json
+++ b/clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary-bad-summary.json
@@ -58,9 +58,9 @@
       }
     }
   ],
-  "tu_namespace": {
-    "name": "Mock.cpp"
-  },
+  "tu_namespace": [
+    "Mock.cpp"
+  ],
   "target_triple": "arm64-apple-macosx",
   "type": "TUSummary"
 }
diff --git a/clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary-no-key.json b/clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary-no-key.json
index 506fd25759af4..d653d335545b3 100644
--- a/clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary-no-key.json
+++ b/clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary-no-key.json
@@ -87,9 +87,9 @@
       }
     }
   ],
-  "tu_namespace": {
-    "name": "Mock.cpp"
-  },
+  "tu_namespace": [
+    "Mock.cpp"
+  ],
   "target_triple": "arm64-apple-macosx",
   "type": "TUSummary"
 }
diff --git a/clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary.json b/clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary.json
index e9179fd5843f3..5b688bf200e42 100644
--- a/clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary.json
+++ b/clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary.json
@@ -85,8 +85,8 @@
     }
   ],
   "target_triple": "arm64-apple-macosx",
-  "tu_namespace": {
-    "name": "Mock.cpp"
-  },
+  "tu_namespace": [
+    "Mock.cpp"
+  ],
   "type": "TUSummary"
 }
diff --git a/clang/test/Analysis/Scalable/PointerFlow/Inputs/wpa-result-bad-edges.json b/clang/test/Analysis/Scalable/PointerFlow/Inputs/wpa-result-bad-edges.json
index 381a2bb7d490a..c6ea425d24800 100644
--- a/clang/test/Analysis/Scalable/PointerFlow/Inputs/wpa-result-bad-edges.json
+++ b/clang/test/Analysis/Scalable/PointerFlow/Inputs/wpa-result-bad-edges.json
@@ -4,9 +4,7 @@
       "id": 0,
       "name": {
         "namespace": [
-          {
-            "name": "test.exe"
-          }
+          "test.exe"
         ],
         "suffix": "",
         "usr": "c:@F at foo#"
diff --git a/clang/test/Analysis/Scalable/PointerFlow/Inputs/wpa-result-odd-count.json b/clang/test/Analysis/Scalable/PointerFlow/Inputs/wpa-result-odd-count.json
index f16c948422626..8879a1d4eac56 100644
--- a/clang/test/Analysis/Scalable/PointerFlow/Inputs/wpa-result-odd-count.json
+++ b/clang/test/Analysis/Scalable/PointerFlow/Inputs/wpa-result-odd-count.json
@@ -4,9 +4,7 @@
       "id": 0,
       "name": {
         "namespace": [
-          {
-            "name": "test.exe"
-          }
+          "test.exe"
         ],
         "suffix": "",
         "usr": "c:@F at foo#"
diff --git a/clang/test/Analysis/Scalable/PointerFlow/Inputs/wpa-result.json b/clang/test/Analysis/Scalable/PointerFlow/Inputs/wpa-result.json
index 575184b82b58c..b54ee52829f1b 100644
--- a/clang/test/Analysis/Scalable/PointerFlow/Inputs/wpa-result.json
+++ b/clang/test/Analysis/Scalable/PointerFlow/Inputs/wpa-result.json
@@ -4,9 +4,7 @@
       "id": 0,
       "name": {
         "namespace": [
-          {
-            "name": "test.exe"
-          }
+          "test.exe"
         ],
         "suffix": "",
         "usr": "c:@F at foo#"
@@ -16,9 +14,7 @@
       "id": 1,
       "name": {
         "namespace": [
-          {
-            "name": "test.exe"
-          }
+          "test.exe"
         ],
         "suffix": "1",
         "usr": "c:@F at foo#"
@@ -28,9 +24,7 @@
       "id": 2,
       "name": {
         "namespace": [
-          {
-            "name": "test.exe"
-          }
+          "test.exe"
         ],
         "suffix": "2",
         "usr": "c:@F at foo#"
diff --git a/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary-bad-element.json b/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary-bad-element.json
index 77ffc18c5970a..a482890796d18 100644
--- a/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary-bad-element.json
+++ b/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary-bad-element.json
@@ -44,9 +44,9 @@
       }
     }
   ],
-  "tu_namespace": {
-    "name": "Mock.cpp"
-  },
+  "tu_namespace": [
+    "Mock.cpp"
+  ],
   "target_triple": "arm64-apple-macosx",
   "type": "TUSummary"
 }
diff --git a/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary-bad-ptr-level.json b/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary-bad-ptr-level.json
index 0841e08bb5797..42ae40641d455 100644
--- a/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary-bad-ptr-level.json
+++ b/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary-bad-ptr-level.json
@@ -49,9 +49,9 @@
       }
     }
   ],
-  "tu_namespace": {
-    "name": "Mock.cpp"
-  },
+  "tu_namespace": [
+    "Mock.cpp"
+  ],
   "target_triple": "arm64-apple-macosx",
   "type": "TUSummary"
 }
diff --git a/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary-no-key.json b/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary-no-key.json
index 24f34c806b3ee..e2e9976b501a5 100644
--- a/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary-no-key.json
+++ b/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary-no-key.json
@@ -49,9 +49,9 @@
       }
     }
   ],
-  "tu_namespace": {
-    "name": "Mock.cpp"
-  },
+  "tu_namespace": [
+    "Mock.cpp"
+  ],
   "target_triple": "arm64-apple-macosx",
   "type": "TUSummary"
 }
diff --git a/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary.json b/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary.json
index 2e41a2a733625..2c5a1abea9acb 100644
--- a/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary.json
+++ b/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary.json
@@ -99,8 +99,8 @@
     }
   ],
   "target_triple": "arm64-apple-macosx",
-  "tu_namespace": {
-    "name": "Mock.cpp"
-  },
+  "tu_namespace": [
+    "Mock.cpp"
+  ],
   "type": "TUSummary"
 }
diff --git a/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/wpa-result-bad-epls.json b/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/wpa-result-bad-epls.json
index 651c52d8f5bc1..9639b717a51a6 100644
--- a/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/wpa-result-bad-epls.json
+++ b/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/wpa-result-bad-epls.json
@@ -4,9 +4,7 @@
       "id": 0,
       "name": {
         "namespace": [
-          {
-            "name": "test.exe"
-          }
+          "test.exe"
         ],
         "suffix": "",
         "usr": "c:@F at foo#"
diff --git a/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/wpa-result-odd-count.json b/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/wpa-result-odd-count.json
index a03dbedb832ba..e0a3c56afe3d0 100644
--- a/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/wpa-result-odd-count.json
+++ b/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/wpa-result-odd-count.json
@@ -4,9 +4,7 @@
       "id": 0,
       "name": {
         "namespace": [
-          {
-            "name": "test.exe"
-          }
+          "test.exe"
         ],
         "suffix": "",
         "usr": "c:@F at foo#"
diff --git a/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/wpa-result.json b/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/wpa-result.json
index 2bf9609968edc..892cdd5aeb891 100644
--- a/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/wpa-result.json
+++ b/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/wpa-result.json
@@ -4,9 +4,7 @@
       "id": 0,
       "name": {
         "namespace": [
-          {
-            "name": "test.exe"
-          }
+          "test.exe"
         ],
         "suffix": "",
         "usr": "c:@F at foo#"
@@ -16,9 +14,7 @@
       "id": 1,
       "name": {
         "namespace": [
-          {
-            "name": "test.exe"
-          }
+          "test.exe"
         ],
         "suffix": "1",
         "usr": "c:@F at foo#"
@@ -28,9 +24,7 @@
       "id": 2,
       "name": {
         "namespace": [
-          {
-            "name": "test.exe"
-          }
+          "test.exe"
         ],
         "suffix": "2",
         "usr": "c:@F at foo#"
diff --git a/clang/test/Analysis/Scalable/ssaf-analyzer/Inputs/lu-tags-only.json b/clang/test/Analysis/Scalable/ssaf-analyzer/Inputs/lu-tags-only.json
index 01552f15b6465..3575111adac29 100644
--- a/clang/test/Analysis/Scalable/ssaf-analyzer/Inputs/lu-tags-only.json
+++ b/clang/test/Analysis/Scalable/ssaf-analyzer/Inputs/lu-tags-only.json
@@ -17,9 +17,7 @@
       "id": 0,
       "name": {
         "namespace": [
-          {
-            "name": "test.exe"
-          }
+          "test.exe"
         ],
         "suffix": "",
         "usr": "c:@F at foo#"
@@ -35,9 +33,7 @@
     }
   ],
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
diff --git a/clang/test/Analysis/Scalable/ssaf-analyzer/Inputs/lu.json b/clang/test/Analysis/Scalable/ssaf-analyzer/Inputs/lu.json
index 536901024bf67..d2e96cb3ab052 100644
--- a/clang/test/Analysis/Scalable/ssaf-analyzer/Inputs/lu.json
+++ b/clang/test/Analysis/Scalable/ssaf-analyzer/Inputs/lu.json
@@ -61,9 +61,7 @@
       "id": 0,
       "name": {
         "namespace": [
-          {
-            "name": "test.exe"
-          }
+          "test.exe"
         ],
         "suffix": "",
         "usr": "c:@F at foo#"
@@ -73,9 +71,7 @@
       "id": 1,
       "name": {
         "namespace": [
-          {
-            "name": "test.exe"
-          }
+          "test.exe"
         ],
         "suffix": "",
         "usr": "c:@F at bar#"
@@ -85,9 +81,7 @@
       "id": 2,
       "name": {
         "namespace": [
-          {
-            "name": "test.exe"
-          }
+          "test.exe"
         ],
         "suffix": "",
         "usr": "c:@F at baz#"
@@ -115,9 +109,7 @@
     }
   ],
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
diff --git a/clang/test/Analysis/Scalable/ssaf-analyzer/Outputs/all.json b/clang/test/Analysis/Scalable/ssaf-analyzer/Outputs/all.json
index cf9898105b195..d68774fba2f39 100644
--- a/clang/test/Analysis/Scalable/ssaf-analyzer/Outputs/all.json
+++ b/clang/test/Analysis/Scalable/ssaf-analyzer/Outputs/all.json
@@ -4,9 +4,7 @@
       "id": 1,
       "name": {
         "namespace": [
-          {
-            "name": "test.exe"
-          }
+          "test.exe"
         ],
         "suffix": "",
         "usr": "c:@F at bar#"
@@ -16,9 +14,7 @@
       "id": 2,
       "name": {
         "namespace": [
-          {
-            "name": "test.exe"
-          }
+          "test.exe"
         ],
         "suffix": "",
         "usr": "c:@F at baz#"
@@ -28,9 +24,7 @@
       "id": 0,
       "name": {
         "namespace": [
-          {
-            "name": "test.exe"
-          }
+          "test.exe"
         ],
         "suffix": "",
         "usr": "c:@F at foo#"
diff --git a/clang/test/Analysis/Scalable/ssaf-analyzer/Outputs/both.json b/clang/test/Analysis/Scalable/ssaf-analyzer/Outputs/both.json
index f5d85c5a3e272..94de72291d82e 100644
--- a/clang/test/Analysis/Scalable/ssaf-analyzer/Outputs/both.json
+++ b/clang/test/Analysis/Scalable/ssaf-analyzer/Outputs/both.json
@@ -4,9 +4,7 @@
       "id": 1,
       "name": {
         "namespace": [
-          {
-            "name": "test.exe"
-          }
+          "test.exe"
         ],
         "suffix": "",
         "usr": "c:@F at bar#"
@@ -16,9 +14,7 @@
       "id": 2,
       "name": {
         "namespace": [
-          {
-            "name": "test.exe"
-          }
+          "test.exe"
         ],
         "suffix": "",
         "usr": "c:@F at baz#"
@@ -28,9 +24,7 @@
       "id": 0,
       "name": {
         "namespace": [
-          {
-            "name": "test.exe"
-          }
+          "test.exe"
         ],
         "suffix": "",
         "usr": "c:@F at foo#"
diff --git a/clang/test/Analysis/Scalable/ssaf-analyzer/Outputs/pairs.json b/clang/test/Analysis/Scalable/ssaf-analyzer/Outputs/pairs.json
index 016892129cd11..987d5e4c42597 100644
--- a/clang/test/Analysis/Scalable/ssaf-analyzer/Outputs/pairs.json
+++ b/clang/test/Analysis/Scalable/ssaf-analyzer/Outputs/pairs.json
@@ -4,9 +4,7 @@
       "id": 1,
       "name": {
         "namespace": [
-          {
-            "name": "test.exe"
-          }
+          "test.exe"
         ],
         "suffix": "",
         "usr": "c:@F at bar#"
@@ -16,9 +14,7 @@
       "id": 2,
       "name": {
         "namespace": [
-          {
-            "name": "test.exe"
-          }
+          "test.exe"
         ],
         "suffix": "",
         "usr": "c:@F at baz#"
@@ -28,9 +24,7 @@
       "id": 0,
       "name": {
         "namespace": [
-          {
-            "name": "test.exe"
-          }
+          "test.exe"
         ],
         "suffix": "",
         "usr": "c:@F at foo#"
diff --git a/clang/test/Analysis/Scalable/ssaf-analyzer/Outputs/tags.json b/clang/test/Analysis/Scalable/ssaf-analyzer/Outputs/tags.json
index b436bc72c85b3..9fe26172bfcde 100644
--- a/clang/test/Analysis/Scalable/ssaf-analyzer/Outputs/tags.json
+++ b/clang/test/Analysis/Scalable/ssaf-analyzer/Outputs/tags.json
@@ -4,9 +4,7 @@
       "id": 1,
       "name": {
         "namespace": [
-          {
-            "name": "test.exe"
-          }
+          "test.exe"
         ],
         "suffix": "",
         "usr": "c:@F at bar#"
@@ -16,9 +14,7 @@
       "id": 2,
       "name": {
         "namespace": [
-          {
-            "name": "test.exe"
-          }
+          "test.exe"
         ],
         "suffix": "",
         "usr": "c:@F at baz#"
@@ -28,9 +24,7 @@
       "id": 0,
       "name": {
         "namespace": [
-          {
-            "name": "test.exe"
-          }
+          "test.exe"
         ],
         "suffix": "",
         "usr": "c:@F at foo#"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-lu-empty.json b/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-lu-empty.json
index 255709aea10ae..de6582ff35a1a 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-lu-empty.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-lu-empty.json
@@ -3,9 +3,7 @@
   "id_table": [],
   "linkage_table": [],
   "lu_namespace": [
-    {
-      "name": "test.cpp"
-    }
+    "test.cpp"
   ],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-multi-arch-shared-library-empty.json b/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-multi-arch-shared-library-empty.json
index 909e88382cf3e..cd86a6284287f 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-multi-arch-shared-library-empty.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-multi-arch-shared-library-empty.json
@@ -1,9 +1,7 @@
 {
   "members": [],
   "namespace": [
-    {
-      "name": "libfoo"
-    }
+    "libfoo"
   ],
   "type": "MultiArchSharedLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-multi-arch-shared-library-nonempty.json b/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-multi-arch-shared-library-nonempty.json
index f8de5ef655606..d39297b5d94f1 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-multi-arch-shared-library-nonempty.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-multi-arch-shared-library-nonempty.json
@@ -7,9 +7,7 @@
           "id": 0,
           "name": {
             "namespace": [
-              {
-                "name": "libfoo"
-              }
+              "libfoo"
             ],
             "suffix": "",
             "usr": "c:@F at foo"
@@ -25,9 +23,7 @@
         }
       ],
       "lu_namespace": [
-        {
-          "name": "libfoo"
-        }
+        "libfoo"
       ],
       "target_triple": "arm64-apple-macosx",
       "type": "LUSummary"
@@ -39,9 +35,7 @@
           "id": 0,
           "name": {
             "namespace": [
-              {
-                "name": "libfoo"
-              }
+              "libfoo"
             ],
             "suffix": "",
             "usr": "c:@F at foo"
@@ -57,18 +51,14 @@
         }
       ],
       "lu_namespace": [
-        {
-          "name": "libfoo"
-        }
+        "libfoo"
       ],
       "target_triple": "x86_64-apple-macosx",
       "type": "LUSummary"
     }
   ],
   "namespace": [
-    {
-      "name": "libfoo"
-    }
+    "libfoo"
   ],
   "type": "MultiArchSharedLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-multi-arch-static-library-empty.json b/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-multi-arch-static-library-empty.json
index fa83e9f72ca17..2fe8b7d0b6f17 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-multi-arch-static-library-empty.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-multi-arch-static-library-empty.json
@@ -2,15 +2,15 @@
   "members": [
     {
       "members": [],
-      "namespace": {
-        "name": "libfoo"
-      },
+      "namespace": [
+        "libfoo"
+      ],
       "target_triple": "arm64-apple-macosx",
       "type": "StaticLibrary"
     }
   ],
-  "namespace": {
-    "name": "libfoo"
-  },
+  "namespace": [
+    "libfoo"
+  ],
   "type": "MultiArchStaticLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-multi-arch-static-library-nonempty.json b/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-multi-arch-static-library-nonempty.json
index 6386e9b664b68..c02c049832fce 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-multi-arch-static-library-nonempty.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-multi-arch-static-library-nonempty.json
@@ -2,9 +2,9 @@
   "members": [
     {
       "members": [],
-      "namespace": {
-        "name": "libfoo"
-      },
+      "namespace": [
+        "libfoo"
+      ],
       "target_triple": "arm64-apple-macosx",
       "type": "StaticLibrary"
     },
@@ -15,21 +15,21 @@
           "id_table": [],
           "linkage_table": [],
           "target_triple": "x86_64-apple-macosx",
-          "tu_namespace": {
-            "name": "a.cpp"
-          },
+          "tu_namespace": [
+            "a.cpp"
+          ],
           "type": "TUSummary"
         }
       ],
-      "namespace": {
-        "name": "libfoo"
-      },
+      "namespace": [
+        "libfoo"
+      ],
       "target_triple": "x86_64-apple-macosx",
       "type": "StaticLibrary"
     }
   ],
-  "namespace": {
-    "name": "libfoo"
-  },
+  "namespace": [
+    "libfoo"
+  ],
   "type": "MultiArchStaticLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-static-library-empty.json b/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-static-library-empty.json
index b507063b8178a..e085084ffd262 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-static-library-empty.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-static-library-empty.json
@@ -1,8 +1,8 @@
 {
   "members": [],
-  "namespace": {
-    "name": "libempty"
-  },
+  "namespace": [
+    "libempty"
+  ],
   "target_triple": "arm64-apple-macosx",
   "type": "StaticLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-tu-empty.json b/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-tu-empty.json
index 4283c249de14f..1100abfd90e6c 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-tu-empty.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/Artifact/Inputs/rt-tu-empty.json
@@ -3,8 +3,8 @@
   "id_table": [],
   "linkage_table": [],
   "target_triple": "arm64-apple-macosx",
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "type": "TUSummary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/invalid-direct-callee-element.json b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/invalid-direct-callee-element.json
index 3d97aab252ac0..55719e5f6529d 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/invalid-direct-callee-element.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/invalid-direct-callee-element.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [
     {
       "id": 0,
diff --git a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/invalid-direct-callee-id.json b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/invalid-direct-callee-id.json
index eb015a1aaabae..34295e95c778d 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/invalid-direct-callee-id.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/invalid-direct-callee-id.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [
     {
       "id": 0,
diff --git a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def-col.json b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def-col.json
index 846dc7fd53cc8..bd4b02e797162 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def-col.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def-col.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [
     {
       "id": 0,
diff --git a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def-file.json b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def-file.json
index dcbfc5a2187b6..9cbfbd263b026 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def-file.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def-file.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [
     {
       "id": 0,
diff --git a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def-line.json b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def-line.json
index 4bd0aa573ac6d..28fe3765464f9 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def-line.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def-line.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [
     {
       "id": 0,
diff --git a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def.json b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def.json
index 99b8e48504295..997467d614063 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [
     {
       "id": 0,
diff --git a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-direct-callees.json b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-direct-callees.json
index 8ed38a57bf3ad..fd16a366f2225 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-direct-callees.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-direct-callees.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [
     {
       "id": 0,
diff --git a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-pretty-name.json b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-pretty-name.json
index 11b96ce994a8d..60ae220460b80 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-pretty-name.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-pretty-name.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [
     {
       "id": 0,
diff --git a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-virtual-callees.json b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-virtual-callees.json
index 45b4e69a0ac02..377151fa043db 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-virtual-callees.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-virtual-callees.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [
     {
       "id": 0,
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-element-not-object.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-element-not-object.json
index 3e8ca527b3b99..78cc3b1dc176e 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-element-not-object.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-element-not-object.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [],
   "linkage_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-entry-missing-data.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-entry-missing-data.json
index e223eaaadfc22..e3e23f3f5f61e 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-entry-missing-data.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-entry-missing-data.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [],
   "linkage_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-entry-missing-summary-name.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-entry-missing-summary-name.json
index 69ea82f79392f..19cd0ede6fa54 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-entry-missing-summary-name.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-entry-missing-summary-name.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [],
   "linkage_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-not-array.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-not-array.json
index 42db27d3c8b57..553c628f725bb 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-not-array.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-not-array.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [],
   "linkage_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/duplicate-entity-id-in-data-map.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/duplicate-entity-id-in-data-map.json
index 75dadc757c676..5a6d0e1fddbd9 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/duplicate-entity-id-in-data-map.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/duplicate-entity-id-in-data-map.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [
     {
@@ -11,12 +9,8 @@
         "usr": "c:@F at foo",
         "suffix": "",
         "namespace": [
-          {
-            "name": "test.cpp"
-          },
-          {
-            "name": "test.exe"
-          }
+          "test.cpp",
+          "test.exe"
         ]
       }
     }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/duplicate-entity.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/duplicate-entity.json
index 12f79e147694c..d4709aeb9dbc9 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/duplicate-entity.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/duplicate-entity.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [
     {
@@ -11,12 +9,8 @@
         "usr": "c:@F at foo",
         "suffix": "",
         "namespace": [
-          {
-            "name": "test.cpp"
-          },
-          {
-            "name": "test.exe"
-          }
+          "test.cpp",
+          "test.exe"
         ]
       }
     },
@@ -26,12 +20,8 @@
         "usr": "c:@F at foo",
         "suffix": "",
         "namespace": [
-          {
-            "name": "test.cpp"
-          },
-          {
-            "name": "test.exe"
-          }
+          "test.cpp",
+          "test.exe"
         ]
       }
     }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/duplicate-summary-name.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/duplicate-summary-name.json
index dc14163d4d32a..de63e691f1b77 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/duplicate-summary-name.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/duplicate-summary-name.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [],
   "linkage_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-data-element-not-object.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-data-element-not-object.json
index edf21979a9f9b..42e8def651987 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-data-element-not-object.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-data-element-not-object.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [],
   "linkage_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-data-missing-entity-id.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-data-missing-entity-id.json
index d99aa24e609e1..5e16bce97e813 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-data-missing-entity-id.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-data-missing-entity-id.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [],
   "linkage_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-data-missing-entity-summary.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-data-missing-entity-summary.json
index 9e1efc073ec65..aeb7d281a5bee 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-data-missing-entity-summary.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-data-missing-entity-summary.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [],
   "linkage_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-id-not-uint64.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-id-not-uint64.json
index f29366e190f38..864764c109103 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-id-not-uint64.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-id-not-uint64.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [],
   "linkage_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-name-missing-namespace.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-name-missing-namespace.json
index 1c1888a15d107..2d062d6fdd9c9 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-name-missing-namespace.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-name-missing-namespace.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [
     {
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-name-missing-suffix.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-name-missing-suffix.json
index b5a51cf425e85..b08975f1c589a 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-name-missing-suffix.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-name-missing-suffix.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [
     {
@@ -10,9 +8,7 @@
       "name": {
         "usr": "c:@F at foo",
         "namespace": [
-          {
-            "name": "test.exe"
-          }
+          "test.exe"
         ]
       }
     }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-name-missing-usr.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-name-missing-usr.json
index f462f41e2d45d..022cc0f4394dc 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-name-missing-usr.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-name-missing-usr.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [
     {
@@ -10,12 +8,8 @@
       "name": {
         "suffix": "",
         "namespace": [
-          {
-            "name": "test.cpp"
-          },
-          {
-            "name": "test.exe"
-          }
+          "test.cpp",
+          "test.exe"
         ]
       }
     }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-element-not-object.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-element-not-object.json
index 4f7063cfd4b5d..13eb65313aad7 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-element-not-object.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-element-not-object.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [
     "invalid"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-entry-id-not-uint64.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-entry-id-not-uint64.json
index 40565f0044b1c..d5291103bc88f 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-entry-id-not-uint64.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-entry-id-not-uint64.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [
     {
@@ -11,12 +9,8 @@
         "usr": "c:@F at foo",
         "suffix": "",
         "namespace": [
-          {
-            "name": "test.cpp"
-          },
-          {
-            "name": "test.exe"
-          }
+          "test.cpp",
+          "test.exe"
         ]
       }
     }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-entry-missing-id.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-entry-missing-id.json
index 001896c552f4b..bb2ee643d439d 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-entry-missing-id.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-entry-missing-id.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [
     {
@@ -10,12 +8,8 @@
         "usr": "c:@F at foo",
         "suffix": "",
         "namespace": [
-          {
-            "name": "test.cpp"
-          },
-          {
-            "name": "test.exe"
-          }
+          "test.cpp",
+          "test.exe"
         ]
       }
     }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-entry-missing-name.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-entry-missing-name.json
index 9ff4b325f7055..c0347b3b12757 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-entry-missing-name.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-entry-missing-name.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [
     {
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-not-array.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-not-array.json
index 13a3e5902677b..f3f805c8cf9a0 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-not-array.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-not-array.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": {},
   "linkage_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-duplicate-id.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-duplicate-id.json
index 9d581a6f62cb8..3393920cfe714 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-duplicate-id.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-duplicate-id.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [
     {
@@ -11,12 +9,8 @@
         "usr": "c:@F at foo",
         "suffix": "",
         "namespace": [
-          {
-            "name": "test.cpp"
-          },
-          {
-            "name": "test.exe"
-          }
+          "test.cpp",
+          "test.exe"
         ]
       }
     }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-element-not-object.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-element-not-object.json
index 9225f7a9d81f0..7fedf2cc0e5d4 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-element-not-object.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-element-not-object.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [],
   "linkage_table": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-id-not-uint64.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-id-not-uint64.json
index 1653ee62bceba..c1108927b7ce2 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-id-not-uint64.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-id-not-uint64.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [],
   "linkage_table": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-linkage-invalid-type.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-linkage-invalid-type.json
index fe70bed49fdf3..aa3dc3b3e3832 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-linkage-invalid-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-linkage-invalid-type.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [],
   "linkage_table": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-linkage-missing-type.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-linkage-missing-type.json
index fa6132273da38..de8789bcb9486 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-linkage-missing-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-linkage-missing-type.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [],
   "linkage_table": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-missing-id.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-missing-id.json
index 2bf8305c91d3b..3521a31a6bedb 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-missing-id.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-missing-id.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [],
   "linkage_table": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-missing-linkage.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-missing-linkage.json
index 2a4fd6d8ef01b..01cc4e828f224 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-missing-linkage.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-missing-linkage.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [],
   "linkage_table": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-extra-id.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-extra-id.json
index 11f4540b042bf..703a2d687bf11 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-extra-id.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-extra-id.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [],
   "linkage_table": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-missing-id.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-missing-id.json
index e829ed86b56ef..cf62d9ca5ef95 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-missing-id.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-missing-id.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [
     {
@@ -11,12 +9,8 @@
         "usr": "c:@F at foo",
         "suffix": "",
         "namespace": [
-          {
-            "name": "test.cpp"
-          },
-          {
-            "name": "test.exe"
-          }
+          "test.cpp",
+          "test.exe"
         ]
       }
     }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-not-array.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-not-array.json
index 34f3f374a5973..5c8ac4cb61bf2 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-not-array.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-not-array.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [],
   "linkage_table": {},
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/lu-namespace-element-not-object.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/lu-namespace-element-not-object.json
deleted file mode 100644
index 6d222ed27029b..0000000000000
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/lu-namespace-element-not-object.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
-  "lu_namespace": [
-    "invalid"
-  ],
-  "id_table": [],
-  "linkage_table": [],
-  "data": [],
-  "target_triple": "arm64-apple-macosx",
-  "type": "LUSummary"
-}
\ No newline at end of file
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/lu-namespace-element-missing-name.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/lu-namespace-element-not-string.json
similarity index 95%
rename from clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/lu-namespace-element-missing-name.json
rename to clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/lu-namespace-element-not-string.json
index 99c36081bfb09..93a32e9bdea47 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/lu-namespace-element-missing-name.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/lu-namespace-element-not-string.json
@@ -1,6 +1,6 @@
 {
   "lu_namespace": [
-    {}
+    42
   ],
   "id_table": [],
   "linkage_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/lu-namespace-not-array.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/lu-namespace-not-array.json
index 2d4e2729f6c74..982d02488abcd 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/lu-namespace-not-array.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/lu-namespace-not-array.json
@@ -1,7 +1,5 @@
 {
-  "lu_namespace": {
-    "name": "test.cpp"
-  },
+  "lu_namespace": "test.cpp",
   "id_table": [],
   "linkage_table": [],
   "data": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/mismatched-type.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/mismatched-type.json
index 3ae529b30ff51..69db165f7a146 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/mismatched-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/mismatched-type.json
@@ -3,9 +3,7 @@
   "id_table": [],
   "linkage_table": [],
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "target_triple": "arm64-apple-macosx",
   "type": "TUSummary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-data.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-data.json
index acd07d70265b5..b479bbab6945d 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-data.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-data.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [],
   "linkage_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-id-table.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-id-table.json
index 9cc5d5942659f..82dec90e70423 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-id-table.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-id-table.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "data": [],
   "target_triple": "arm64-apple-macosx",
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-linkage-table.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-linkage-table.json
index 3b95f70602cc1..0ee5dcbc532c7 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-linkage-table.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-linkage-table.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [],
   "data": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-target-triple.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-target-triple.json
index 80f84b49b5169..ac0fb750dc17b 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-target-triple.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-target-triple.json
@@ -3,9 +3,7 @@
   "id_table": [],
   "linkage_table": [],
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "type": "LUSummary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-type.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-type.json
index 5105938e12c48..1b70b108460f2 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-type.json
@@ -3,9 +3,7 @@
   "id_table": [],
   "linkage_table": [],
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "target_triple": "arm64-apple-macosx"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/namespace-element-not-object.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/namespace-element-not-object.json
deleted file mode 100644
index 6bbe44faf7272..0000000000000
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/namespace-element-not-object.json
+++ /dev/null
@@ -1,30 +0,0 @@
-{
-  "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
-  ],
-  "id_table": [
-    {
-      "id": 0,
-      "name": {
-        "usr": "c:@F at foo",
-        "suffix": "",
-        "namespace": [
-          "invalid"
-        ]
-      }
-    }
-  ],
-  "linkage_table": [
-    {
-      "id": 0,
-      "linkage": {
-        "type": "None"
-      }
-    }
-  ],
-  "data": [],
-  "target_triple": "arm64-apple-macosx",
-  "type": "LUSummary"
-}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/namespace-element-missing-name.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/namespace-element-not-string.json
similarity index 81%
rename from clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/namespace-element-missing-name.json
rename to clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/namespace-element-not-string.json
index b67a53ccaea5c..93e23bac48014 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/namespace-element-missing-name.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/namespace-element-not-string.json
@@ -1,9 +1,5 @@
 {
-  "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
-  ],
+  "lu_namespace": ["test.exe"],
   "id_table": [
     {
       "id": 0,
@@ -11,7 +7,7 @@
         "usr": "c:@F at foo",
         "suffix": "",
         "namespace": [
-          {}
+          42
         ]
       }
     }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/not-normalized-target-triple.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/not-normalized-target-triple.json
index 86266c30ce839..b78e846597e3b 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/not-normalized-target-triple.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/not-normalized-target-triple.json
@@ -3,9 +3,7 @@
   "id_table": [],
   "linkage_table": [],
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "target_triple": "arm64-macosx-apple",
   "type": "LUSummary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-element-not-object.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-element-not-object.json
index dd1b55b749288..bc2a88abcbeac 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-element-not-object.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-element-not-object.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [],
   "linkage_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-invalid-first-field.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-invalid-first-field.json
index ac1a20aac84b9..25e6186410a70 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-invalid-first-field.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-invalid-first-field.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [],
   "linkage_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-invalid-pairs-field-type.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-invalid-pairs-field-type.json
index 4edbb97f9b91e..fd793f3cb2ffd 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-invalid-pairs-field-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-invalid-pairs-field-type.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [],
   "linkage_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-invalid-second-field.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-invalid-second-field.json
index 75eb2d1f86e3d..87755948b28ff 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-invalid-second-field.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-invalid-second-field.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [],
   "linkage_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-missing-first-field.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-missing-first-field.json
index 5fc11668546b9..686d38e399688 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-missing-first-field.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-missing-first-field.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [],
   "linkage_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-missing-pairs-field.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-missing-pairs-field.json
index c295f76878b5c..72bb1260c22ec 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-missing-pairs-field.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-missing-pairs-field.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [],
   "linkage_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-missing-second-field.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-missing-second-field.json
index c71c7061bd06a..10c3eb16f0d0f 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-missing-second-field.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-missing-second-field.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [],
   "linkage_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/read-entity-summary-no-format-info.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/read-entity-summary-no-format-info.json
index fbf9ab842d805..4d1246abff902 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/read-entity-summary-no-format-info.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/read-entity-summary-no-format-info.json
@@ -1,8 +1,6 @@
 {
   "lu_namespace": [
-    {
-      "name": "test.exe"
-    }
+    "test.exe"
   ],
   "id_table": [],
   "linkage_table": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-empty-data-entry.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-empty-data-entry.json
index b2b802f6f0e4c..9532dcde881d2 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-empty-data-entry.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-empty-data-entry.json
@@ -8,9 +8,7 @@
   "id_table": [],
   "linkage_table": [],
   "lu_namespace": [
-    {
-      "name": "test.cpp"
-    }
+    "test.cpp"
   ],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-empty-namespace.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-empty-namespace.json
index 255709aea10ae..de6582ff35a1a 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-empty-namespace.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-empty-namespace.json
@@ -3,9 +3,7 @@
   "id_table": [],
   "linkage_table": [],
   "lu_namespace": [
-    {
-      "name": "test.cpp"
-    }
+    "test.cpp"
   ],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-external.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-external.json
index 280f1d0ca57cc..dcce4b75c1564 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-external.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-external.json
@@ -5,9 +5,7 @@
       "id": 0,
       "name": {
         "namespace": [
-          {
-            "name": "test.cpp"
-          }
+          "test.cpp"
         ],
         "suffix": "",
         "usr": "c:@F at baz"
@@ -23,9 +21,7 @@
     }
   ],
   "lu_namespace": [
-    {
-      "name": "test.cpp"
-    }
+    "test.cpp"
   ],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-internal.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-internal.json
index 8069bf207ec91..9e5070e78fefd 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-internal.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-internal.json
@@ -5,9 +5,7 @@
       "id": 0,
       "name": {
         "namespace": [
-          {
-            "name": "test.cpp"
-          }
+          "test.cpp"
         ],
         "suffix": "",
         "usr": "c:@F at bar"
@@ -23,9 +21,7 @@
     }
   ],
   "lu_namespace": [
-    {
-      "name": "test.cpp"
-    }
+    "test.cpp"
   ],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-multiple.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-multiple.json
index f7b535131b1be..f644a874c189f 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-multiple.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-multiple.json
@@ -5,9 +5,7 @@
       "id": 1,
       "name": {
         "namespace": [
-          {
-            "name": "test.cpp"
-          }
+          "test.cpp"
         ],
         "suffix": "",
         "usr": "c:@F at bar"
@@ -17,9 +15,7 @@
       "id": 2,
       "name": {
         "namespace": [
-          {
-            "name": "test.cpp"
-          }
+          "test.cpp"
         ],
         "suffix": "",
         "usr": "c:@F at baz"
@@ -29,9 +25,7 @@
       "id": 0,
       "name": {
         "namespace": [
-          {
-            "name": "test.cpp"
-          }
+          "test.cpp"
         ],
         "suffix": "",
         "usr": "c:@F at foo"
@@ -59,9 +53,7 @@
     }
   ],
   "lu_namespace": [
-    {
-      "name": "test.cpp"
-    }
+    "test.cpp"
   ],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-none.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-none.json
index b7dccd08806d1..9ca0dfb2a1be5 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-none.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-none.json
@@ -5,9 +5,7 @@
       "id": 0,
       "name": {
         "namespace": [
-          {
-            "name": "test.cpp"
-          }
+          "test.cpp"
         ],
         "suffix": "",
         "usr": "c:@F at foo"
@@ -23,9 +21,7 @@
     }
   ],
   "lu_namespace": [
-    {
-      "name": "test.cpp"
-    }
+    "test.cpp"
   ],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-multiple-namespace-elements.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-multiple-namespace-elements.json
index f78d45cc06d57..9b2e848c34533 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-multiple-namespace-elements.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-multiple-namespace-elements.json
@@ -3,15 +3,9 @@
   "id_table": [],
   "linkage_table": [],
   "lu_namespace": [
-    {
-      "name": "a.cpp"
-    },
-    {
-      "name": "b.cpp"
-    },
-    {
-      "name": "libtest.so"
-    }
+    "a.cpp",
+    "b.cpp",
+    "libtest.so"
   ],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-single-namespace-element.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-single-namespace-element.json
index 255709aea10ae..de6582ff35a1a 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-single-namespace-element.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-single-namespace-element.json
@@ -3,9 +3,7 @@
   "id_table": [],
   "linkage_table": [],
   "lu_namespace": [
-    {
-      "name": "test.cpp"
-    }
+    "test.cpp"
   ],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-two-summary-types.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-two-summary-types.json
index b3857bbe3c49b..4984e01dc2cfd 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-two-summary-types.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-two-summary-types.json
@@ -137,9 +137,7 @@
       "id": 1,
       "name": {
         "namespace": [
-          {
-            "name": "test.cpp"
-          }
+          "test.cpp"
         ],
         "suffix": "",
         "usr": "c:@F at bar"
@@ -149,9 +147,7 @@
       "id": 2,
       "name": {
         "namespace": [
-          {
-            "name": "test.cpp"
-          }
+          "test.cpp"
         ],
         "suffix": "",
         "usr": "c:@F at baz"
@@ -161,9 +157,7 @@
       "id": 0,
       "name": {
         "namespace": [
-          {
-            "name": "test.cpp"
-          }
+          "test.cpp"
         ],
         "suffix": "",
         "usr": "c:@F at foo"
@@ -173,9 +167,7 @@
       "id": 4,
       "name": {
         "namespace": [
-          {
-            "name": "test.cpp"
-          }
+          "test.cpp"
         ],
         "suffix": "",
         "usr": "c:@F at quux"
@@ -185,9 +177,7 @@
       "id": 3,
       "name": {
         "namespace": [
-          {
-            "name": "test.cpp"
-          }
+          "test.cpp"
         ],
         "suffix": "",
         "usr": "c:@F at qux"
@@ -227,9 +217,7 @@
     }
   ],
   "lu_namespace": [
-    {
-      "name": "test.cpp"
-    }
+    "test.cpp"
   ],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/id-table.test b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/id-table.test
index b84adad916f04..d34150e9af71c 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/id-table.test
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/id-table.test
@@ -4,31 +4,19 @@
 // REQUIRES: plugins
 
 // ============================================================================
-// nestedBuildNamespaceFromJSON() errors (EntityName namespace)
+// buildNamespaceFromJSON() errors (EntityName namespace)
 // ============================================================================
 
-// RUN: not clang-ssaf-format --type lu %S/Inputs/namespace-element-not-object.json 2>&1 \
-// RUN:   | FileCheck %s --match-full-lines --check-prefix=NAMESPACE-ELEMENT-NOT-OBJECT
-// RUN: not clang-ssaf-format --type lu --encoding %S/Inputs/namespace-element-not-object.json 2>&1 \
-// RUN:   | FileCheck %s --match-full-lines --check-prefix=NAMESPACE-ELEMENT-NOT-OBJECT
-// NAMESPACE-ELEMENT-NOT-OBJECT:      clang-ssaf-format: error: reading LUSummary from file '{{.*}}namespace-element-not-object.json'
-// NAMESPACE-ELEMENT-NOT-OBJECT-NEXT: reading IdTable from field 'id_table'
-// NAMESPACE-ELEMENT-NOT-OBJECT-NEXT: reading EntityIdTable entry from index '0'
-// NAMESPACE-ELEMENT-NOT-OBJECT-NEXT: reading EntityName from field 'name'
-// NAMESPACE-ELEMENT-NOT-OBJECT-NEXT: reading NestedBuildNamespace from field 'namespace'
-// NAMESPACE-ELEMENT-NOT-OBJECT-NEXT: failed to read BuildNamespace from index '0': expected JSON object
-
-// RUN: not clang-ssaf-format --type lu %S/Inputs/namespace-element-missing-name.json 2>&1 \
-// RUN:   | FileCheck %s --match-full-lines --check-prefix=NAMESPACE-ELEMENT-MISSING-NAME
-// RUN: not clang-ssaf-format --type lu --encoding %S/Inputs/namespace-element-missing-name.json 2>&1 \
-// RUN:   | FileCheck %s --match-full-lines --check-prefix=NAMESPACE-ELEMENT-MISSING-NAME
-// NAMESPACE-ELEMENT-MISSING-NAME:      clang-ssaf-format: error: reading LUSummary from file '{{.*}}namespace-element-missing-name.json'
-// NAMESPACE-ELEMENT-MISSING-NAME-NEXT: reading IdTable from field 'id_table'
-// NAMESPACE-ELEMENT-MISSING-NAME-NEXT: reading EntityIdTable entry from index '0'
-// NAMESPACE-ELEMENT-MISSING-NAME-NEXT: reading EntityName from field 'name'
-// NAMESPACE-ELEMENT-MISSING-NAME-NEXT: reading NestedBuildNamespace from field 'namespace'
-// NAMESPACE-ELEMENT-MISSING-NAME-NEXT: reading BuildNamespace from index '0'
-// NAMESPACE-ELEMENT-MISSING-NAME-NEXT: failed to read BuildNamespaceName from field 'name': expected JSON string
+// RUN: not clang-ssaf-format --type lu %S/Inputs/namespace-element-not-string.json 2>&1 \
+// RUN:   | FileCheck %s --match-full-lines --check-prefix=NAMESPACE-ELEMENT-NOT-STRING
+// RUN: not clang-ssaf-format --type lu --encoding %S/Inputs/namespace-element-not-string.json 2>&1 \
+// RUN:   | FileCheck %s --match-full-lines --check-prefix=NAMESPACE-ELEMENT-NOT-STRING
+// NAMESPACE-ELEMENT-NOT-STRING:      clang-ssaf-format: error: reading LUSummary from file '{{.*}}namespace-element-not-string.json'
+// NAMESPACE-ELEMENT-NOT-STRING-NEXT: reading IdTable from field 'id_table'
+// NAMESPACE-ELEMENT-NOT-STRING-NEXT: reading EntityIdTable entry from index '0'
+// NAMESPACE-ELEMENT-NOT-STRING-NEXT: reading EntityName from field 'name'
+// NAMESPACE-ELEMENT-NOT-STRING-NEXT: reading BuildNamespace from field 'namespace'
+// NAMESPACE-ELEMENT-NOT-STRING-NEXT: failed to read BuildNamespace name from index '0': expected JSON string
 
 // ============================================================================
 // luEntityNameFromJSON() errors
@@ -62,7 +50,7 @@
 // ENTITY-NAME-MISSING-NAMESPACE-NEXT: reading IdTable from field 'id_table'
 // ENTITY-NAME-MISSING-NAMESPACE-NEXT: reading EntityIdTable entry from index '0'
 // ENTITY-NAME-MISSING-NAMESPACE-NEXT: reading EntityName from field 'name'
-// ENTITY-NAME-MISSING-NAMESPACE-NEXT: failed to read NestedBuildNamespace from field 'namespace': expected JSON array
+// ENTITY-NAME-MISSING-NAMESPACE-NEXT: failed to read BuildNamespace from field 'namespace': expected JSON array
 
 // ============================================================================
 // luEntityIdTableEntryFromJSON() errors
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/top-level.test b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/top-level.test
index 262dd2c4304ed..bdf84f370b110 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/top-level.test
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/top-level.test
@@ -1,11 +1,11 @@
-// Top-level LUSummary structure tests: NestedBuildNamespace 'lu_namespace'
+// Top-level LUSummary structure tests: BuildNamespace 'lu_namespace'
 // field parsing and missing top-level fields (lu_namespace, id_table,
 // linkage_table, data).
 
 // REQUIRES: plugins
 
 // ============================================================================
-// nestedBuildNamespaceFromJSON() errors (lu_namespace field) -- LU-SPECIFIC
+// buildNamespaceFromJSON() errors (lu_namespace field) -- LU-SPECIFIC
 // ============================================================================
 
 // RUN: not clang-ssaf-format --type lu %S/Inputs/lu-namespace-not-array.json 2>&1 \
@@ -13,24 +13,15 @@
 // RUN: not clang-ssaf-format --type lu --encoding %S/Inputs/lu-namespace-not-array.json 2>&1 \
 // RUN:   | FileCheck %s --match-full-lines --check-prefix=LU-NAMESPACE-NOT-ARRAY
 // LU-NAMESPACE-NOT-ARRAY:      clang-ssaf-format: error: reading LUSummary from file '{{.*}}lu-namespace-not-array.json'
-// LU-NAMESPACE-NOT-ARRAY-NEXT: failed to read NestedBuildNamespace from field 'lu_namespace': expected JSON array
+// LU-NAMESPACE-NOT-ARRAY-NEXT: failed to read BuildNamespace from field 'lu_namespace': expected JSON array
 
-// RUN: not clang-ssaf-format --type lu %S/Inputs/lu-namespace-element-not-object.json 2>&1 \
-// RUN:   | FileCheck %s --match-full-lines --check-prefix=LU-NAMESPACE-ELEMENT-NOT-OBJECT
-// RUN: not clang-ssaf-format --type lu --encoding %S/Inputs/lu-namespace-element-not-object.json 2>&1 \
-// RUN:   | FileCheck %s --match-full-lines --check-prefix=LU-NAMESPACE-ELEMENT-NOT-OBJECT
-// LU-NAMESPACE-ELEMENT-NOT-OBJECT:      clang-ssaf-format: error: reading LUSummary from file '{{.*}}lu-namespace-element-not-object.json'
-// LU-NAMESPACE-ELEMENT-NOT-OBJECT-NEXT: reading NestedBuildNamespace from field 'lu_namespace'
-// LU-NAMESPACE-ELEMENT-NOT-OBJECT-NEXT: failed to read BuildNamespace from index '0': expected JSON object
-
-// RUN: not clang-ssaf-format --type lu %S/Inputs/lu-namespace-element-missing-name.json 2>&1 \
-// RUN:   | FileCheck %s --match-full-lines --check-prefix=LU-NAMESPACE-ELEMENT-MISSING-NAME
-// RUN: not clang-ssaf-format --type lu --encoding %S/Inputs/lu-namespace-element-missing-name.json 2>&1 \
-// RUN:   | FileCheck %s --match-full-lines --check-prefix=LU-NAMESPACE-ELEMENT-MISSING-NAME
-// LU-NAMESPACE-ELEMENT-MISSING-NAME:      clang-ssaf-format: error: reading LUSummary from file '{{.*}}lu-namespace-element-missing-name.json'
-// LU-NAMESPACE-ELEMENT-MISSING-NAME-NEXT: reading NestedBuildNamespace from field 'lu_namespace'
-// LU-NAMESPACE-ELEMENT-MISSING-NAME-NEXT: reading BuildNamespace from index '0'
-// LU-NAMESPACE-ELEMENT-MISSING-NAME-NEXT: failed to read BuildNamespaceName from field 'name': expected JSON string
+// RUN: not clang-ssaf-format --type lu %S/Inputs/lu-namespace-element-not-string.json 2>&1 \
+// RUN:   | FileCheck %s --match-full-lines --check-prefix=LU-NAMESPACE-ELEMENT-NOT-STRING
+// RUN: not clang-ssaf-format --type lu --encoding %S/Inputs/lu-namespace-element-not-string.json 2>&1 \
+// RUN:   | FileCheck %s --match-full-lines --check-prefix=LU-NAMESPACE-ELEMENT-NOT-STRING
+// LU-NAMESPACE-ELEMENT-NOT-STRING:      clang-ssaf-format: error: reading LUSummary from file '{{.*}}lu-namespace-element-not-string.json'
+// LU-NAMESPACE-ELEMENT-NOT-STRING-NEXT: reading BuildNamespace from field 'lu_namespace'
+// LU-NAMESPACE-ELEMENT-NOT-STRING-NEXT: failed to read BuildNamespace name from index '0': expected JSON string
 
 // ============================================================================
 // readLUSummary() / readLUSummaryEncoding() errors
@@ -41,7 +32,7 @@
 // RUN: not clang-ssaf-format --type lu --encoding %S/Inputs/missing-lu-namespace.json 2>&1 \
 // RUN:   | FileCheck %s --match-full-lines --check-prefix=MISSING-LU-NAMESPACE
 // MISSING-LU-NAMESPACE:      clang-ssaf-format: error: reading LUSummary from file '{{.*}}missing-lu-namespace.json'
-// MISSING-LU-NAMESPACE-NEXT: failed to read NestedBuildNamespace from field 'lu_namespace': expected JSON array
+// MISSING-LU-NAMESPACE-NEXT: failed to read BuildNamespace from field 'lu_namespace': expected JSON array
 
 // RUN: not clang-ssaf-format --type lu %S/Inputs/missing-id-table.json 2>&1 \
 // RUN:   | FileCheck %s --match-full-lines --check-prefix=MISSING-ID-TABLE
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/duplicate-target-triple.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/duplicate-target-triple.json
index a812e51be6514..6d3b8f25952c1 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/duplicate-target-triple.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/duplicate-target-triple.json
@@ -5,9 +5,7 @@
       "id_table": [],
       "linkage_table": [],
       "lu_namespace": [
-        {
-          "name": "libfoo"
-        }
+        "libfoo"
       ],
       "target_triple": "arm64-apple-macosx",
       "type": "LUSummary"
@@ -17,18 +15,14 @@
       "id_table": [],
       "linkage_table": [],
       "lu_namespace": [
-        {
-          "name": "libfoo"
-        }
+        "libfoo"
       ],
       "target_triple": "arm64-apple-macosx",
       "type": "LUSummary"
     }
   ],
   "namespace": [
-    {
-      "name": "libfoo"
-    }
+    "libfoo"
   ],
   "type": "MultiArchSharedLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-empty-lu-namespace.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-empty-lu-namespace.json
index d08c405133715..0c41d581b712b 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-empty-lu-namespace.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-empty-lu-namespace.json
@@ -10,9 +10,7 @@
     }
   ],
   "namespace": [
-    {
-      "name": "libfoo"
-    }
+    "libfoo"
   ],
   "type": "MultiArchSharedLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-inner-error.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-inner-error.json
index 895bb7bc9c697..2d9c33faeb36f 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-inner-error.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-inner-error.json
@@ -9,9 +9,7 @@
     }
   ],
   "namespace": [
-    {
-      "name": "libfoo"
-    }
+    "libfoo"
   ],
   "type": "MultiArchSharedLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-mismatched-type.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-mismatched-type.json
index f8c38de14c0cf..5f04e83298ef2 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-mismatched-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-mismatched-type.json
@@ -5,18 +5,14 @@
       "id_table": [],
       "linkage_table": [],
       "lu_namespace": [
-        {
-          "name": "libfoo"
-        }
+        "libfoo"
       ],
       "target_triple": "arm64-apple-macosx",
       "type": "TUSummary"
     }
   ],
   "namespace": [
-    {
-      "name": "libfoo"
-    }
+    "libfoo"
   ],
   "type": "MultiArchSharedLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-missing-type.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-missing-type.json
index 25cbaeaee9528..f0246b647251d 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-missing-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-missing-type.json
@@ -5,17 +5,13 @@
       "id_table": [],
       "linkage_table": [],
       "lu_namespace": [
-        {
-          "name": "libfoo"
-        }
+        "libfoo"
       ],
       "target_triple": "arm64-apple-macosx"
     }
   ],
   "namespace": [
-    {
-      "name": "libfoo"
-    }
+    "libfoo"
   ],
   "type": "MultiArchSharedLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-namespace-mismatch.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-namespace-mismatch.json
index 8851e0c3633a0..053b62eb480dd 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-namespace-mismatch.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-namespace-mismatch.json
@@ -5,18 +5,14 @@
       "id_table": [],
       "linkage_table": [],
       "lu_namespace": [
-        {
-          "name": "libbar"
-        }
+        "libbar"
       ],
       "target_triple": "arm64-apple-macosx",
       "type": "LUSummary"
     }
   ],
   "namespace": [
-    {
-      "name": "libfoo"
-    }
+    "libfoo"
   ],
   "type": "MultiArchSharedLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-not-object.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-not-object.json
index 7f1c2d01aa332..26749d86e23fe 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-not-object.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/member-not-object.json
@@ -3,9 +3,7 @@
     "not an object"
   ],
   "namespace": [
-    {
-      "name": "libfoo"
-    }
+    "libfoo"
   ],
   "type": "MultiArchSharedLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/members-not-array.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/members-not-array.json
index f17f5e7662d47..bf8f8a189b5c8 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/members-not-array.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/members-not-array.json
@@ -1,9 +1,7 @@
 {
   "members": {},
   "namespace": [
-    {
-      "name": "libfoo"
-    }
+    "libfoo"
   ],
   "type": "MultiArchSharedLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/mismatched-type.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/mismatched-type.json
index 1f275573e703a..c755b5548758e 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/mismatched-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/mismatched-type.json
@@ -1,9 +1,7 @@
 {
   "members": [],
   "namespace": [
-    {
-      "name": "libfoo"
-    }
+    "libfoo"
   ],
   "type": "MultiArchStaticLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/missing-members.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/missing-members.json
index ab8e12ed3573e..cc46b728dd3ee 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/missing-members.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/missing-members.json
@@ -1,8 +1,6 @@
 {
   "namespace": [
-    {
-      "name": "libfoo"
-    }
+    "libfoo"
   ],
   "type": "MultiArchSharedLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/missing-type.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/missing-type.json
index 52427a0ef8c44..95f02b7c63b20 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/missing-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/missing-type.json
@@ -1,8 +1,6 @@
 {
   "members": [],
   "namespace": [
-    {
-      "name": "libfoo"
-    }
+    "libfoo"
   ]
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-empty-members.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-empty-members.json
index 909e88382cf3e..cd86a6284287f 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-empty-members.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-empty-members.json
@@ -1,9 +1,7 @@
 {
   "members": [],
   "namespace": [
-    {
-      "name": "libfoo"
-    }
+    "libfoo"
   ],
   "type": "MultiArchSharedLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-multiple-members.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-multiple-members.json
index 284dd84afedf5..5f196862c610b 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-multiple-members.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-multiple-members.json
@@ -5,9 +5,7 @@
       "id_table": [],
       "linkage_table": [],
       "lu_namespace": [
-        {
-          "name": "libfoo"
-        }
+        "libfoo"
       ],
       "target_triple": "arm64-apple-macosx",
       "type": "LUSummary"
@@ -17,18 +15,14 @@
       "id_table": [],
       "linkage_table": [],
       "lu_namespace": [
-        {
-          "name": "libfoo"
-        }
+        "libfoo"
       ],
       "target_triple": "x86_64-apple-macosx",
       "type": "LUSummary"
     }
   ],
   "namespace": [
-    {
-      "name": "libfoo"
-    }
+    "libfoo"
   ],
   "type": "MultiArchSharedLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-nonempty-members.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-nonempty-members.json
index f8de5ef655606..d39297b5d94f1 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-nonempty-members.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-nonempty-members.json
@@ -7,9 +7,7 @@
           "id": 0,
           "name": {
             "namespace": [
-              {
-                "name": "libfoo"
-              }
+              "libfoo"
             ],
             "suffix": "",
             "usr": "c:@F at foo"
@@ -25,9 +23,7 @@
         }
       ],
       "lu_namespace": [
-        {
-          "name": "libfoo"
-        }
+        "libfoo"
       ],
       "target_triple": "arm64-apple-macosx",
       "type": "LUSummary"
@@ -39,9 +35,7 @@
           "id": 0,
           "name": {
             "namespace": [
-              {
-                "name": "libfoo"
-              }
+              "libfoo"
             ],
             "suffix": "",
             "usr": "c:@F at foo"
@@ -57,18 +51,14 @@
         }
       ],
       "lu_namespace": [
-        {
-          "name": "libfoo"
-        }
+        "libfoo"
       ],
       "target_triple": "x86_64-apple-macosx",
       "type": "LUSummary"
     }
   ],
   "namespace": [
-    {
-      "name": "libfoo"
-    }
+    "libfoo"
   ],
   "type": "MultiArchSharedLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-single-member.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-single-member.json
index ff01a19f060ec..f0770835f2ec3 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-single-member.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-single-member.json
@@ -5,18 +5,14 @@
       "id_table": [],
       "linkage_table": [],
       "lu_namespace": [
-        {
-          "name": "libfoo"
-        }
+        "libfoo"
       ],
       "target_triple": "arm64-apple-macosx",
       "type": "LUSummary"
     }
   ],
   "namespace": [
-    {
-      "name": "libfoo"
-    }
+    "libfoo"
   ],
   "type": "MultiArchSharedLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-three-members.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-three-members.json
index 923498eaac7b2..ae6397b136199 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-three-members.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/rt-three-members.json
@@ -5,9 +5,7 @@
       "id_table": [],
       "linkage_table": [],
       "lu_namespace": [
-        {
-          "name": "libfoo"
-        }
+        "libfoo"
       ],
       "target_triple": "arm64-apple-macosx",
       "type": "LUSummary"
@@ -17,9 +15,7 @@
       "id_table": [],
       "linkage_table": [],
       "lu_namespace": [
-        {
-          "name": "libfoo"
-        }
+        "libfoo"
       ],
       "target_triple": "arm64_32-apple-macosx",
       "type": "LUSummary"
@@ -29,18 +25,14 @@
       "id_table": [],
       "linkage_table": [],
       "lu_namespace": [
-        {
-          "name": "libfoo"
-        }
+        "libfoo"
       ],
       "target_triple": "x86_64-apple-macosx",
       "type": "LUSummary"
     }
   ],
   "namespace": [
-    {
-      "name": "libfoo"
-    }
+    "libfoo"
   ],
   "type": "MultiArchSharedLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/unsorted-members-input.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/unsorted-members-input.json
index b731211428a7a..ba07e2995f267 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/unsorted-members-input.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/unsorted-members-input.json
@@ -5,9 +5,7 @@
       "id_table": [],
       "linkage_table": [],
       "lu_namespace": [
-        {
-          "name": "libfoo"
-        }
+        "libfoo"
       ],
       "target_triple": "x86_64-apple-macosx",
       "type": "LUSummary"
@@ -17,18 +15,14 @@
       "id_table": [],
       "linkage_table": [],
       "lu_namespace": [
-        {
-          "name": "libfoo"
-        }
+        "libfoo"
       ],
       "target_triple": "arm64-apple-macosx",
       "type": "LUSummary"
     }
   ],
   "namespace": [
-    {
-      "name": "libfoo"
-    }
+    "libfoo"
   ],
   "type": "MultiArchSharedLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/unsorted-three-members-input.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/unsorted-three-members-input.json
index 716d03bef5763..34644c5eca738 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/unsorted-three-members-input.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/Inputs/unsorted-three-members-input.json
@@ -5,9 +5,7 @@
       "id_table": [],
       "linkage_table": [],
       "lu_namespace": [
-        {
-          "name": "libfoo"
-        }
+        "libfoo"
       ],
       "target_triple": "x86_64-apple-macosx",
       "type": "LUSummary"
@@ -17,9 +15,7 @@
       "id_table": [],
       "linkage_table": [],
       "lu_namespace": [
-        {
-          "name": "libfoo"
-        }
+        "libfoo"
       ],
       "target_triple": "arm64-apple-macosx",
       "type": "LUSummary"
@@ -29,18 +25,14 @@
       "id_table": [],
       "linkage_table": [],
       "lu_namespace": [
-        {
-          "name": "libfoo"
-        }
+        "libfoo"
       ],
       "target_triple": "arm64_32-apple-macosx",
       "type": "LUSummary"
     }
   ],
   "namespace": [
-    {
-      "name": "libfoo"
-    }
+    "libfoo"
   ],
   "type": "MultiArchSharedLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/top-level.test b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/top-level.test
index c0f9aa2bef153..7884bf4b5e81b 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/top-level.test
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchSharedLibrary/top-level.test
@@ -26,13 +26,13 @@
 // RUN: not clang-ssaf-format --type multi-arch-shared-library %S/Inputs/missing-namespace.json 2>&1 \
 // RUN:   | FileCheck %s --match-full-lines --check-prefix=MISSING-NAMESPACE
 // MISSING-NAMESPACE:      clang-ssaf-format: error: reading MultiArchSharedLibrary from file '{{.*}}missing-namespace.json'
-// MISSING-NAMESPACE-NEXT: failed to read NestedBuildNamespace from field 'namespace': expected JSON array
+// MISSING-NAMESPACE-NEXT: failed to read BuildNamespace from field 'namespace': expected JSON array
 
 // The namespace field must be a JSON array, not a string.
 // RUN: not clang-ssaf-format --type multi-arch-shared-library %S/Inputs/namespace-not-array.json 2>&1 \
 // RUN:   | FileCheck %s --match-full-lines --check-prefix=NAMESPACE-NOT-ARRAY
 // NAMESPACE-NOT-ARRAY:      clang-ssaf-format: error: reading MultiArchSharedLibrary from file '{{.*}}namespace-not-array.json'
-// NAMESPACE-NOT-ARRAY-NEXT: failed to read NestedBuildNamespace from field 'namespace': expected JSON array
+// NAMESPACE-NOT-ARRAY-NEXT: failed to read BuildNamespace from field 'namespace': expected JSON array
 
 // ============================================================================
 // members field errors
@@ -102,4 +102,4 @@
 // RUN:   | FileCheck %s --match-full-lines --check-prefix=MEMBER-INNER-ERROR
 // MEMBER-INNER-ERROR:      clang-ssaf-format: error: reading MultiArchSharedLibrary from file '{{.*}}member-inner-error.json'
 // MEMBER-INNER-ERROR-NEXT: reading MultiArchSharedLibrary member from index '0'
-// MEMBER-INNER-ERROR-NEXT: failed to read NestedBuildNamespace from field 'lu_namespace': expected JSON array
+// MEMBER-INNER-ERROR-NEXT: failed to read BuildNamespace from field 'lu_namespace': expected JSON array
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/duplicate-target-triple.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/duplicate-target-triple.json
index 7d6acb3b300af..858b85919714e 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/duplicate-target-triple.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/duplicate-target-triple.json
@@ -2,23 +2,23 @@
   "members": [
     {
       "members": [],
-      "namespace": {
-        "name": "libfoo"
-      },
+      "namespace": [
+        "libfoo"
+      ],
       "target_triple": "arm64-apple-macosx",
       "type": "StaticLibrary"
     },
     {
       "members": [],
-      "namespace": {
-        "name": "libfoo"
-      },
+      "namespace": [
+        "libfoo"
+      ],
       "target_triple": "arm64-apple-macosx",
       "type": "StaticLibrary"
     }
   ],
-  "namespace": {
-    "name": "libfoo"
-  },
+  "namespace": [
+    "libfoo"
+  ],
   "type": "MultiArchStaticLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-inner-error.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-inner-error.json
index 6a83bf08fdcf9..9656a7f21586f 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-inner-error.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-inner-error.json
@@ -6,8 +6,8 @@
       "type": "StaticLibrary"
     }
   ],
-  "namespace": {
-    "name": "libfoo"
-  },
+  "namespace": [
+    "libfoo"
+  ],
   "type": "MultiArchStaticLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-mismatched-type.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-mismatched-type.json
index 7f0f274b9cdf5..78c12123078cf 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-mismatched-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-mismatched-type.json
@@ -2,15 +2,15 @@
   "members": [
     {
       "members": [],
-      "namespace": {
-        "name": "libfoo"
-      },
+      "namespace": [
+        "libfoo"
+      ],
       "target_triple": "arm64-apple-macosx",
       "type": "TUSummary"
     }
   ],
-  "namespace": {
-    "name": "libfoo"
-  },
+  "namespace": [
+    "libfoo"
+  ],
   "type": "MultiArchStaticLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-missing-type.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-missing-type.json
index 7325f95d42e93..dac0976446bbc 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-missing-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-missing-type.json
@@ -2,14 +2,14 @@
   "members": [
     {
       "members": [],
-      "namespace": {
-        "name": "libfoo"
-      },
+      "namespace": [
+        "libfoo"
+      ],
       "target_triple": "arm64-apple-macosx"
     }
   ],
-  "namespace": {
-    "name": "libfoo"
-  },
+  "namespace": [
+    "libfoo"
+  ],
   "type": "MultiArchStaticLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-namespace-mismatch.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-namespace-mismatch.json
index f70acc6069174..2ce01ea5034a3 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-namespace-mismatch.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-namespace-mismatch.json
@@ -2,15 +2,15 @@
   "members": [
     {
       "members": [],
-      "namespace": {
-        "name": "libbar"
-      },
+      "namespace": [
+        "libbar"
+      ],
       "target_triple": "arm64-apple-macosx",
       "type": "StaticLibrary"
     }
   ],
-  "namespace": {
-    "name": "libfoo"
-  },
+  "namespace": [
+    "libfoo"
+  ],
   "type": "MultiArchStaticLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-not-object.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-not-object.json
index 99cdb1ebbd4b5..1e03c1320c433 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-not-object.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/member-not-object.json
@@ -2,8 +2,8 @@
   "members": [
     "not an object"
   ],
-  "namespace": {
-    "name": "libfoo"
-  },
+  "namespace": [
+    "libfoo"
+  ],
   "type": "MultiArchStaticLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/members-not-array.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/members-not-array.json
index a86b6e5f52ff5..12647c460672e 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/members-not-array.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/members-not-array.json
@@ -1,7 +1,7 @@
 {
   "members": {},
-  "namespace": {
-    "name": "libfoo"
-  },
+  "namespace": [
+    "libfoo"
+  ],
   "type": "MultiArchStaticLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/mismatched-type.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/mismatched-type.json
index f8b18cf9dc4c1..bb4e925e21966 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/mismatched-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/mismatched-type.json
@@ -2,9 +2,9 @@
   "members": {
     "arm64": {
       "members": [],
-      "namespace": {
-        "name": "libfoo"
-      },
+      "namespace": [
+        "libfoo"
+      ],
       "target_triple": "arm64-apple-macosx",
       "type": "StaticLibrary"
     }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/missing-members.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/missing-members.json
index ca1fcbda51e9e..5f057094ae5af 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/missing-members.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/missing-members.json
@@ -1,6 +1,6 @@
 {
-  "namespace": {
-    "name": "libfoo"
-  },
+  "namespace": [
+    "libfoo"
+  ],
   "type": "MultiArchStaticLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/missing-type.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/missing-type.json
index c6014bb4a3aad..db706ba1ba205 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/missing-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/missing-type.json
@@ -2,9 +2,9 @@
   "members": {
     "arm64": {
       "members": [],
-      "namespace": {
-        "name": "libfoo"
-      },
+      "namespace": [
+        "libfoo"
+      ],
       "target_triple": "arm64-apple-macosx",
       "type": "StaticLibrary"
     }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/namespace-not-object.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/namespace-not-array.json
similarity index 100%
rename from clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/namespace-not-object.json
rename to clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/namespace-not-array.json
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-empty-members.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-empty-members.json
index 7a00014cb39e6..c755b5548758e 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-empty-members.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-empty-members.json
@@ -1,7 +1,7 @@
 {
   "members": [],
-  "namespace": {
-    "name": "libfoo"
-  },
+  "namespace": [
+    "libfoo"
+  ],
   "type": "MultiArchStaticLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-multiple-members.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-multiple-members.json
index 27103c888f1df..b1354eaac6902 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-multiple-members.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-multiple-members.json
@@ -2,23 +2,23 @@
   "members": [
     {
       "members": [],
-      "namespace": {
-        "name": "libfoo"
-      },
+      "namespace": [
+        "libfoo"
+      ],
       "target_triple": "arm64-apple-macosx",
       "type": "StaticLibrary"
     },
     {
       "members": [],
-      "namespace": {
-        "name": "libfoo"
-      },
+      "namespace": [
+        "libfoo"
+      ],
       "target_triple": "x86_64-apple-macosx",
       "type": "StaticLibrary"
     }
   ],
-  "namespace": {
-    "name": "libfoo"
-  },
+  "namespace": [
+    "libfoo"
+  ],
   "type": "MultiArchStaticLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-nonempty-members.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-nonempty-members.json
index 907aaff7090c7..d1644f8ee8cd4 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-nonempty-members.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-nonempty-members.json
@@ -7,15 +7,15 @@
           "id_table": [],
           "linkage_table": [],
           "target_triple": "arm64-apple-macosx",
-          "tu_namespace": {
-            "name": "a.cpp"
-          },
+          "tu_namespace": [
+            "a.cpp"
+          ],
           "type": "TUSummary"
         }
       ],
-      "namespace": {
-        "name": "libfoo"
-      },
+      "namespace": [
+        "libfoo"
+      ],
       "target_triple": "arm64-apple-macosx",
       "type": "StaticLibrary"
     },
@@ -26,21 +26,21 @@
           "id_table": [],
           "linkage_table": [],
           "target_triple": "x86_64-apple-macosx",
-          "tu_namespace": {
-            "name": "a.cpp"
-          },
+          "tu_namespace": [
+            "a.cpp"
+          ],
           "type": "TUSummary"
         }
       ],
-      "namespace": {
-        "name": "libfoo"
-      },
+      "namespace": [
+        "libfoo"
+      ],
       "target_triple": "x86_64-apple-macosx",
       "type": "StaticLibrary"
     }
   ],
-  "namespace": {
-    "name": "libfoo"
-  },
+  "namespace": [
+    "libfoo"
+  ],
   "type": "MultiArchStaticLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-single-member.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-single-member.json
index fa83e9f72ca17..2fe8b7d0b6f17 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-single-member.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-single-member.json
@@ -2,15 +2,15 @@
   "members": [
     {
       "members": [],
-      "namespace": {
-        "name": "libfoo"
-      },
+      "namespace": [
+        "libfoo"
+      ],
       "target_triple": "arm64-apple-macosx",
       "type": "StaticLibrary"
     }
   ],
-  "namespace": {
-    "name": "libfoo"
-  },
+  "namespace": [
+    "libfoo"
+  ],
   "type": "MultiArchStaticLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-three-members.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-three-members.json
index 7c2ba45acffa8..4ae8b84a696fb 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-three-members.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/rt-three-members.json
@@ -2,31 +2,31 @@
   "members": [
     {
       "members": [],
-      "namespace": {
-        "name": "libfoo"
-      },
+      "namespace": [
+        "libfoo"
+      ],
       "target_triple": "arm64-apple-macosx",
       "type": "StaticLibrary"
     },
     {
       "members": [],
-      "namespace": {
-        "name": "libfoo"
-      },
+      "namespace": [
+        "libfoo"
+      ],
       "target_triple": "arm64_32-apple-macosx",
       "type": "StaticLibrary"
     },
     {
       "members": [],
-      "namespace": {
-        "name": "libfoo"
-      },
+      "namespace": [
+        "libfoo"
+      ],
       "target_triple": "x86_64-apple-macosx",
       "type": "StaticLibrary"
     }
   ],
-  "namespace": {
-    "name": "libfoo"
-  },
+  "namespace": [
+    "libfoo"
+  ],
   "type": "MultiArchStaticLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/unsorted-members-input.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/unsorted-members-input.json
index fc24652222dab..be1758d62f11c 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/unsorted-members-input.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/unsorted-members-input.json
@@ -2,23 +2,23 @@
   "members": [
     {
       "members": [],
-      "namespace": {
-        "name": "libfoo"
-      },
+      "namespace": [
+        "libfoo"
+      ],
       "target_triple": "x86_64-apple-macosx",
       "type": "StaticLibrary"
     },
     {
       "members": [],
-      "namespace": {
-        "name": "libfoo"
-      },
+      "namespace": [
+        "libfoo"
+      ],
       "target_triple": "arm64-apple-macosx",
       "type": "StaticLibrary"
     }
   ],
-  "namespace": {
-    "name": "libfoo"
-  },
+  "namespace": [
+    "libfoo"
+  ],
   "type": "MultiArchStaticLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/unsorted-three-members-input.json b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/unsorted-three-members-input.json
index e861340b77487..e640908947059 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/unsorted-three-members-input.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/Inputs/unsorted-three-members-input.json
@@ -2,31 +2,31 @@
   "members": [
     {
       "members": [],
-      "namespace": {
-        "name": "libfoo"
-      },
+      "namespace": [
+        "libfoo"
+      ],
       "target_triple": "x86_64-apple-macosx",
       "type": "StaticLibrary"
     },
     {
       "members": [],
-      "namespace": {
-        "name": "libfoo"
-      },
+      "namespace": [
+        "libfoo"
+      ],
       "target_triple": "arm64-apple-macosx",
       "type": "StaticLibrary"
     },
     {
       "members": [],
-      "namespace": {
-        "name": "libfoo"
-      },
+      "namespace": [
+        "libfoo"
+      ],
       "target_triple": "arm64_32-apple-macosx",
       "type": "StaticLibrary"
     }
   ],
-  "namespace": {
-    "name": "libfoo"
-  },
+  "namespace": [
+    "libfoo"
+  ],
   "type": "MultiArchStaticLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/top-level.test b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/top-level.test
index 95cf8c456f315..e6555d278699a 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/top-level.test
+++ b/clang/test/Analysis/Scalable/ssaf-format/MultiArchStaticLibrary/top-level.test
@@ -25,13 +25,13 @@
 // RUN: not clang-ssaf-format --type multi-arch-static-library %S/Inputs/missing-namespace.json 2>&1 \
 // RUN:   | FileCheck %s --match-full-lines --check-prefix=MISSING-NAMESPACE
 // MISSING-NAMESPACE:      clang-ssaf-format: error: reading MultiArchStaticLibrary from file '{{.*}}missing-namespace.json'
-// MISSING-NAMESPACE-NEXT: failed to read BuildNamespace from field 'namespace': expected JSON object
+// MISSING-NAMESPACE-NEXT: failed to read BuildNamespace from field 'namespace': expected JSON array
 
-// The namespace field must be a JSON object, not a string.
-// RUN: not clang-ssaf-format --type multi-arch-static-library %S/Inputs/namespace-not-object.json 2>&1 \
-// RUN:   | FileCheck %s --match-full-lines --check-prefix=NAMESPACE-NOT-OBJECT
-// NAMESPACE-NOT-OBJECT:      clang-ssaf-format: error: reading MultiArchStaticLibrary from file '{{.*}}namespace-not-object.json'
-// NAMESPACE-NOT-OBJECT-NEXT: failed to read BuildNamespace from field 'namespace': expected JSON object
+// The namespace field must be a JSON array, not a string.
+// RUN: not clang-ssaf-format --type multi-arch-static-library %S/Inputs/namespace-not-array.json 2>&1 \
+// RUN:   | FileCheck %s --match-full-lines --check-prefix=NAMESPACE-NOT-ARRAY
+// NAMESPACE-NOT-ARRAY:      clang-ssaf-format: error: reading MultiArchStaticLibrary from file '{{.*}}namespace-not-array.json'
+// NAMESPACE-NOT-ARRAY-NEXT: failed to read BuildNamespace from field 'namespace': expected JSON array
 
 // ============================================================================
 // members field errors
@@ -76,7 +76,7 @@
 // RUN:   | FileCheck %s --match-full-lines --check-prefix=MEMBER-NAMESPACE-MISMATCH
 // MEMBER-NAMESPACE-MISMATCH:      clang-ssaf-format: error: reading MultiArchStaticLibrary from file '{{.*}}member-namespace-mismatch.json'
 // MEMBER-NAMESPACE-MISMATCH-NEXT: reading MultiArchStaticLibrary member from index '0'
-// MEMBER-NAMESPACE-MISMATCH-NEXT: expected 'libfoo' for field 'namespace.name' but got 'libbar'
+// MEMBER-NAMESPACE-MISMATCH-NEXT: field 'namespace' does not equal the enclosing artifact's namespace
 
 // Members are identified by their full target_triple. Two members sharing
 // the same target_triple are rejected.
@@ -93,4 +93,4 @@
 // RUN:   | FileCheck %s --match-full-lines --check-prefix=MEMBER-INNER-ERROR
 // MEMBER-INNER-ERROR:      clang-ssaf-format: error: reading MultiArchStaticLibrary from file '{{.*}}member-inner-error.json'
 // MEMBER-INNER-ERROR-NEXT: reading MultiArchStaticLibrary member from index '0'
-// MEMBER-INNER-ERROR-NEXT: failed to read BuildNamespace from field 'namespace': expected JSON object
+// MEMBER-INNER-ERROR-NEXT: failed to read BuildNamespace from field 'namespace': expected JSON array
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/duplicate-member.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/duplicate-member.json
index dbbac249a455c..2cda6b187b78f 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/duplicate-member.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/duplicate-member.json
@@ -1,16 +1,16 @@
 {
   "type": "StaticLibrary",
   "target_triple": "arm64-apple-macosx",
-  "namespace": {
-    "name": "libfoo"
-  },
+  "namespace": [
+    "libfoo"
+  ],
   "members": [
     {
       "type": "TUSummary",
       "target_triple": "arm64-apple-macosx",
-      "tu_namespace": {
-        "name": "a.cpp"
-      },
+      "tu_namespace": [
+        "a.cpp"
+      ],
       "id_table": [],
       "linkage_table": [],
       "data": []
@@ -18,9 +18,9 @@
     {
       "type": "TUSummary",
       "target_triple": "arm64-apple-macosx",
-      "tu_namespace": {
-        "name": "a.cpp"
-      },
+      "tu_namespace": [
+        "a.cpp"
+      ],
       "id_table": [],
       "linkage_table": [],
       "data": []
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-inner-error.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-inner-error.json
index 2131485dad88c..634b55cd741de 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-inner-error.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-inner-error.json
@@ -8,9 +8,9 @@
       "data": []
     }
   ],
-  "namespace": {
-    "name": "libfoo"
-  },
+  "namespace": [
+    "libfoo"
+  ],
   "target_triple": "arm64-apple-macosx",
   "type": "StaticLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-mismatched-type.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-mismatched-type.json
index 7572b3bec7cc7..76bd4f31a80a6 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-mismatched-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-mismatched-type.json
@@ -1,9 +1,9 @@
 {
   "type": "StaticLibrary",
   "target_triple": "arm64-apple-macosx",
-  "namespace": {
-    "name": "libfoo"
-  },
+  "namespace": [
+    "libfoo"
+  ],
   "members": [
     {
       "type": "LUSummary",
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-missing-type.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-missing-type.json
index 65699548acbb8..e433ef46bdf30 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-missing-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-missing-type.json
@@ -2,17 +2,17 @@
   "members": [
     {
       "target_triple": "arm64-apple-macosx",
-      "tu_namespace": {
-        "name": "a.cpp"
-      },
+      "tu_namespace": [
+        "a.cpp"
+      ],
       "id_table": [],
       "linkage_table": [],
       "data": []
     }
   ],
-  "namespace": {
-    "name": "libfoo"
-  },
+  "namespace": [
+    "libfoo"
+  ],
   "target_triple": "arm64-apple-macosx",
   "type": "StaticLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-not-object.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-not-object.json
index b7edf883d8ae7..1785ba66ffe93 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-not-object.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-not-object.json
@@ -1,8 +1,8 @@
 {
   "type": "StaticLibrary",
   "target_triple": "arm64-apple-macosx",
-  "namespace": {
-    "name": "libfoo"
-  },
+  "namespace": [
+    "libfoo"
+  ],
   "members": ["not an object"]
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-triple-mismatch.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-triple-mismatch.json
index 51ba3d0208eaf..07c6ae6dd529c 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-triple-mismatch.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/member-triple-mismatch.json
@@ -1,16 +1,16 @@
 {
   "type": "StaticLibrary",
   "target_triple": "arm64-apple-macosx",
-  "namespace": {
-    "name": "libfoo"
-  },
+  "namespace": [
+    "libfoo"
+  ],
   "members": [
     {
       "type": "TUSummary",
       "target_triple": "x86_64-apple-macosx",
-      "tu_namespace": {
-        "name": "a.cpp"
-      },
+      "tu_namespace": [
+        "a.cpp"
+      ],
       "id_table": [],
       "linkage_table": [],
       "data": []
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/members-not-array.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/members-not-array.json
index b766cc29c667d..cdafcbfb4ba26 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/members-not-array.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/members-not-array.json
@@ -1,8 +1,8 @@
 {
   "type": "StaticLibrary",
   "target_triple": "arm64-apple-macosx",
-  "namespace": {
-    "name": "libfoo"
-  },
+  "namespace": [
+    "libfoo"
+  ],
   "members": {}
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/mismatched-type.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/mismatched-type.json
index 736d1bc418813..4e1bb52591867 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/mismatched-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/mismatched-type.json
@@ -1,8 +1,8 @@
 {
   "type": "TUSummary",
   "target_triple": "arm64-apple-macosx",
-  "namespace": {
-    "name": "libfoo"
-  },
+  "namespace": [
+    "libfoo"
+  ],
   "members": []
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/missing-members.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/missing-members.json
index 243b15827dd74..55962cba634a2 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/missing-members.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/missing-members.json
@@ -1,7 +1,7 @@
 {
   "type": "StaticLibrary",
   "target_triple": "arm64-apple-macosx",
-  "namespace": {
-    "name": "libfoo"
-  }
+  "namespace": [
+    "libfoo"
+  ]
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/missing-target-triple.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/missing-target-triple.json
index aa3d2fff0f438..fa7446abb2568 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/missing-target-triple.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/missing-target-triple.json
@@ -1,7 +1,7 @@
 {
   "type": "StaticLibrary",
-  "namespace": {
-    "name": "libfoo"
-  },
+  "namespace": [
+    "libfoo"
+  ],
   "members": []
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/missing-type.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/missing-type.json
index 57bf90e759aa5..1af8dc69750d7 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/missing-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/missing-type.json
@@ -1,7 +1,7 @@
 {
   "target_triple": "arm64-apple-macosx",
-  "namespace": {
-    "name": "libfoo"
-  },
+  "namespace": [
+    "libfoo"
+  ],
   "members": []
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/namespace-missing-name.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/namespace-missing-name.json
deleted file mode 100644
index 2b82cda3803b9..0000000000000
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/namespace-missing-name.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
-  "type": "StaticLibrary",
-  "target_triple": "arm64-apple-macosx",
-  "namespace": {},
-  "members": []
-}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/not-normalized-target-triple.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/not-normalized-target-triple.json
index 3892e949ec1e1..9d64899e25d57 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/not-normalized-target-triple.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/not-normalized-target-triple.json
@@ -1,8 +1,8 @@
 {
   "type": "StaticLibrary",
   "target_triple": "arm64-macosx-apple",
-  "namespace": {
-    "name": "libfoo"
-  },
+  "namespace": [
+    "libfoo"
+  ],
   "members": []
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/rt-empty.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/rt-empty.json
index b507063b8178a..e085084ffd262 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/rt-empty.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/rt-empty.json
@@ -1,8 +1,8 @@
 {
   "members": [],
-  "namespace": {
-    "name": "libempty"
-  },
+  "namespace": [
+    "libempty"
+  ],
   "target_triple": "arm64-apple-macosx",
   "type": "StaticLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/rt-multiple-members.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/rt-multiple-members.json
index e0a77a51df2ce..d915d483f5996 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/rt-multiple-members.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/rt-multiple-members.json
@@ -5,9 +5,9 @@
       "id_table": [],
       "linkage_table": [],
       "target_triple": "arm64-apple-macosx",
-      "tu_namespace": {
-        "name": "a.cpp"
-      },
+      "tu_namespace": [
+        "a.cpp"
+      ],
       "type": "TUSummary"
     },
     {
@@ -15,9 +15,9 @@
       "id_table": [],
       "linkage_table": [],
       "target_triple": "arm64-apple-macosx",
-      "tu_namespace": {
-        "name": "b.cpp"
-      },
+      "tu_namespace": [
+        "b.cpp"
+      ],
       "type": "TUSummary"
     },
     {
@@ -25,15 +25,15 @@
       "id_table": [],
       "linkage_table": [],
       "target_triple": "arm64-apple-macosx",
-      "tu_namespace": {
-        "name": "c.cpp"
-      },
+      "tu_namespace": [
+        "c.cpp"
+      ],
       "type": "TUSummary"
     }
   ],
-  "namespace": {
-    "name": "libmulti"
-  },
+  "namespace": [
+    "libmulti"
+  ],
   "target_triple": "arm64-apple-macosx",
   "type": "StaticLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/rt-single-member.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/rt-single-member.json
index b930f420a8908..3fec6d6e81d90 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/rt-single-member.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/rt-single-member.json
@@ -5,15 +5,15 @@
       "id_table": [],
       "linkage_table": [],
       "target_triple": "arm64-apple-macosx",
-      "tu_namespace": {
-        "name": "a.cpp"
-      },
+      "tu_namespace": [
+        "a.cpp"
+      ],
       "type": "TUSummary"
     }
   ],
-  "namespace": {
-    "name": "libfoo"
-  },
+  "namespace": [
+    "libfoo"
+  ],
   "target_triple": "arm64-apple-macosx",
   "type": "StaticLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/unsorted-members-input.json b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/unsorted-members-input.json
index 14b5d2ace17ae..c70644a407067 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/unsorted-members-input.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/Inputs/unsorted-members-input.json
@@ -5,9 +5,9 @@
       "id_table": [],
       "linkage_table": [],
       "target_triple": "arm64-apple-macosx",
-      "tu_namespace": {
-        "name": "c.cpp"
-      },
+      "tu_namespace": [
+        "c.cpp"
+      ],
       "type": "TUSummary"
     },
     {
@@ -15,9 +15,9 @@
       "id_table": [],
       "linkage_table": [],
       "target_triple": "arm64-apple-macosx",
-      "tu_namespace": {
-        "name": "a.cpp"
-      },
+      "tu_namespace": [
+        "a.cpp"
+      ],
       "type": "TUSummary"
     },
     {
@@ -25,15 +25,15 @@
       "id_table": [],
       "linkage_table": [],
       "target_triple": "arm64-apple-macosx",
-      "tu_namespace": {
-        "name": "b.cpp"
-      },
+      "tu_namespace": [
+        "b.cpp"
+      ],
       "type": "TUSummary"
     }
   ],
-  "namespace": {
-    "name": "libmulti"
-  },
+  "namespace": [
+    "libmulti"
+  ],
   "target_triple": "arm64-apple-macosx",
   "type": "StaticLibrary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/top-level.test b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/top-level.test
index 2c60a0861a6b6..cf0dd11464aab 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/top-level.test
+++ b/clang/test/Analysis/Scalable/ssaf-format/StaticLibrary/top-level.test
@@ -39,13 +39,7 @@
 // RUN: not clang-ssaf-format --type static-library %S/Inputs/missing-namespace.json 2>&1 \
 // RUN:   | FileCheck %s --match-full-lines --check-prefix=MISSING-NAMESPACE
 // MISSING-NAMESPACE:      clang-ssaf-format: error: reading StaticLibrary from file '{{.*}}missing-namespace.json'
-// MISSING-NAMESPACE-NEXT: failed to read BuildNamespace from field 'namespace': expected JSON object
-
-// RUN: not clang-ssaf-format --type static-library %S/Inputs/namespace-missing-name.json 2>&1 \
-// RUN:   | FileCheck %s --match-full-lines --check-prefix=NAMESPACE-MISSING-NAME
-// NAMESPACE-MISSING-NAME:      clang-ssaf-format: error: reading StaticLibrary from file '{{.*}}namespace-missing-name.json'
-// NAMESPACE-MISSING-NAME-NEXT: reading BuildNamespace from field 'namespace'
-// NAMESPACE-MISSING-NAME-NEXT: failed to read BuildNamespaceName from field 'name': expected JSON string
+// MISSING-NAMESPACE-NEXT: failed to read BuildNamespace from field 'namespace': expected JSON array
 
 // ============================================================================
 // members array errors
@@ -90,7 +84,7 @@
 // RUN:   | FileCheck %s --match-full-lines --check-prefix=MEMBER-INNER-ERROR
 // MEMBER-INNER-ERROR:      clang-ssaf-format: error: reading StaticLibrary from file '{{.*}}member-inner-error.json'
 // MEMBER-INNER-ERROR-NEXT: reading StaticLibrary member from index '0'
-// MEMBER-INNER-ERROR-NEXT: failed to read BuildNamespace from field 'tu_namespace': expected JSON object
+// MEMBER-INNER-ERROR-NEXT: failed to read BuildNamespace from field 'tu_namespace': expected JSON array
 
 // RUN: not clang-ssaf-format --type static-library %S/Inputs/member-triple-mismatch.json 2>&1 \
 // RUN:   | FileCheck %s --match-full-lines --check-prefix=MEMBER-TRIPLE-MISMATCH
@@ -101,4 +95,4 @@
 // RUN: not clang-ssaf-format --type static-library %S/Inputs/duplicate-member.json 2>&1 \
 // RUN:   | FileCheck %s --match-full-lines --check-prefix=DUPLICATE-MEMBER
 // DUPLICATE-MEMBER:      clang-ssaf-format: error: reading StaticLibrary from file '{{.*}}duplicate-member.json'
-// DUPLICATE-MEMBER-NEXT: failed to insert StaticLibrary member at index '1': encountered duplicate 'BuildNamespace(a.cpp)'
+// DUPLICATE-MEMBER-NEXT: failed to insert StaticLibrary member at index '1': encountered duplicate 'BuildNamespace([a.cpp])'
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-element-not-object.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-element-not-object.json
index 0ce52632d82e1..1595555626dcb 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-element-not-object.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-element-not-object.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [],
   "linkage_table": [],
   "data": ["invalid"],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-entry-missing-data.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-entry-missing-data.json
index 38e8c04ee29f1..53052cf98317f 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-entry-missing-data.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-entry-missing-data.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [],
   "linkage_table": [],
   "data": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-entry-missing-summary-name.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-entry-missing-summary-name.json
index 4a5d498762543..907186e50041a 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-entry-missing-summary-name.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-entry-missing-summary-name.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [],
   "linkage_table": [],
   "data": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-not-array.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-not-array.json
index f755bb98a759d..9c50579ba5522 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-not-array.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-not-array.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [],
   "linkage_table": [],
   "data": {},
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/duplicate-entity-id-in-data-map.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/duplicate-entity-id-in-data-map.json
index 7b4c3b399a5ad..639e67e5c6a8a 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/duplicate-entity-id-in-data-map.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/duplicate-entity-id-in-data-map.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [
     {
       "id": 0,
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/duplicate-entity.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/duplicate-entity.json
index bc0611bde6f65..16b221de22125 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/duplicate-entity.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/duplicate-entity.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [
     {
       "id": 0,
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/duplicate-summary-name.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/duplicate-summary-name.json
index 752578a9cb1c4..3bdff4af7bf04 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/duplicate-summary-name.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/duplicate-summary-name.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [],
   "linkage_table": [],
   "data": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-data-element-not-object.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-data-element-not-object.json
index 6832e27c01d64..389fe5b77195b 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-data-element-not-object.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-data-element-not-object.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [],
   "linkage_table": [],
   "data": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-data-missing-entity-id.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-data-missing-entity-id.json
index 10341a30363c0..b441d84b6bc6c 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-data-missing-entity-id.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-data-missing-entity-id.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [],
   "linkage_table": [],
   "data": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-data-missing-entity-summary.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-data-missing-entity-summary.json
index aab301cd67b65..c2c302fe338df 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-data-missing-entity-summary.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-data-missing-entity-summary.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [],
   "linkage_table": [],
   "data": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-id-not-uint64.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-id-not-uint64.json
index 5ebddf9bea8a6..f4f972cb89371 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-id-not-uint64.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-id-not-uint64.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [],
   "linkage_table": [],
   "data": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-name-missing-suffix.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-name-missing-suffix.json
index 9fd93ef2f624c..b51884a9567c3 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-name-missing-suffix.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-name-missing-suffix.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [
     {
       "id": 0,
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-name-missing-usr.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-name-missing-usr.json
index 7cdfd88f80530..6643fb8a2d6cc 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-name-missing-usr.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-name-missing-usr.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [
     {
       "id": 0,
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-element-not-object.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-element-not-object.json
index 0ee127e912b4e..9ac46dbe354c6 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-element-not-object.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-element-not-object.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [123],
   "linkage_table": [],
   "data": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-entry-id-not-uint64.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-entry-id-not-uint64.json
index a388bc0bcb198..3965e5408bfa3 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-entry-id-not-uint64.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-entry-id-not-uint64.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [
     {
       "id": "not_a_number",
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-entry-missing-id.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-entry-missing-id.json
index 9fb7613559aae..76c5cefd84ef9 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-entry-missing-id.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-entry-missing-id.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [
     {
       "name": {
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-entry-missing-name.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-entry-missing-name.json
index 0f5b77c967045..4a8f05d1dfdfc 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-entry-missing-name.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-entry-missing-name.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [
     {
       "id": 0
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-not-array.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-not-array.json
index 8df85bf5c2c0c..592af95982c42 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-not-array.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-not-array.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": {},
   "linkage_table": [],
   "data": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-duplicate-id.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-duplicate-id.json
index e9d95a4b07617..3fed58079d09a 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-duplicate-id.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-duplicate-id.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [
     {
       "id": 0,
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-element-not-object.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-element-not-object.json
index a85050e639d36..cf29f5eef8391 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-element-not-object.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-element-not-object.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [],
   "linkage_table": ["invalid"],
   "data": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-id-not-uint64.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-id-not-uint64.json
index fb4b364e3efb5..d639d649ab1c4 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-id-not-uint64.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-id-not-uint64.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [],
   "linkage_table": [
     {
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-linkage-invalid-type.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-linkage-invalid-type.json
index 51bb9066d05c2..c5e452e52f0f0 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-linkage-invalid-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-linkage-invalid-type.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [],
   "linkage_table": [
     {
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-linkage-missing-type.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-linkage-missing-type.json
index 053c71eead77b..596d662b44550 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-linkage-missing-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-linkage-missing-type.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [],
   "linkage_table": [
     {
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-missing-id.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-missing-id.json
index 926d517187d9d..fc50ba813c2f5 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-missing-id.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-missing-id.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [],
   "linkage_table": [
     {
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-missing-linkage.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-missing-linkage.json
index 72a87764a9945..9ff943883d6bd 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-missing-linkage.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-missing-linkage.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [],
   "linkage_table": [
     {
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-extra-id.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-extra-id.json
index 5ee0ef7945da4..f5d272762a151 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-extra-id.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-extra-id.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [],
   "linkage_table": [
     {
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-missing-id.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-missing-id.json
index 7290bce38f712..c2a8b631c0013 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-missing-id.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-missing-id.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [
     {
       "id": 0,
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-not-array.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-not-array.json
index c55b30305fda4..10b6ec11f0a55 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-not-array.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-not-array.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [],
   "linkage_table": {},
   "data": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/mismatched-type.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/mismatched-type.json
index 67dd44780ebaf..c2efcfe373027 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/mismatched-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/mismatched-type.json
@@ -3,8 +3,8 @@
   "id_table": [],
   "linkage_table": [],
   "target_triple": "arm64-apple-macosx",
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "type": "LUSummary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-data.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-data.json
index 17640787d0563..987f5c644b4d7 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-data.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-data.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [],
   "linkage_table": [],
   "target_triple": "arm64-apple-macosx",
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-id-table.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-id-table.json
index 2588bfeb56e58..67a82ecae49d8 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-id-table.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-id-table.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "data": [],
   "target_triple": "arm64-apple-macosx",
   "type": "TUSummary"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-linkage-table.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-linkage-table.json
index 4c5662bb34d0a..2a4fd46693282 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-linkage-table.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-linkage-table.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [],
   "data": [],
   "target_triple": "arm64-apple-macosx",
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-name.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-name.json
deleted file mode 100644
index 46df20c658021..0000000000000
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-name.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-  "tu_namespace": {},
-  "id_table": [],
-  "linkage_table": [],
-  "data": [],
-  "target_triple": "arm64-apple-macosx",
-  "type": "TUSummary"
-}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-target-triple.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-target-triple.json
index a74ee92bb3002..5a11c0b0d6c6c 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-target-triple.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-target-triple.json
@@ -2,8 +2,8 @@
   "data": [],
   "id_table": [],
   "linkage_table": [],
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "type": "TUSummary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-type.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-type.json
index 200776105c0ab..281e50c3fb8a4 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-type.json
@@ -3,7 +3,7 @@
   "id_table": [],
   "linkage_table": [],
   "target_triple": "arm64-apple-macosx",
-  "tu_namespace": {
-    "name": "test.cpp"
-  }
+  "tu_namespace": [
+    "test.cpp"
+  ]
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/not-normalized-target-triple.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/not-normalized-target-triple.json
index 9a48d5831bc69..4973ea8ff63fb 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/not-normalized-target-triple.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/not-normalized-target-triple.json
@@ -3,8 +3,8 @@
   "id_table": [],
   "linkage_table": [],
   "target_triple": "arm64-macosx-apple",
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "type": "TUSummary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-element-not-object.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-element-not-object.json
index 0b29518f97cd5..fc2abe3e75119 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-element-not-object.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-element-not-object.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [],
   "linkage_table": [],
   "data": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-invalid-first-field.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-invalid-first-field.json
index 9b17db36ed747..85886531e3915 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-invalid-first-field.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-invalid-first-field.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [],
   "linkage_table": [],
   "data": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-invalid-pairs-field-type.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-invalid-pairs-field-type.json
index 3485487d768cc..e01845c4ed0ae 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-invalid-pairs-field-type.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-invalid-pairs-field-type.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [],
   "linkage_table": [],
   "data": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-invalid-second-field.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-invalid-second-field.json
index c85f831bca7c5..84fd18d65d603 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-invalid-second-field.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-invalid-second-field.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [],
   "linkage_table": [],
   "data": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-missing-first-field.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-missing-first-field.json
index f53568bc68919..a90dc509688c8 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-missing-first-field.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-missing-first-field.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [],
   "linkage_table": [],
   "data": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-missing-pairs-field.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-missing-pairs-field.json
index e694ecc2a55df..762bfac5424f5 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-missing-pairs-field.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-missing-pairs-field.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [],
   "linkage_table": [],
   "data": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-missing-second-field.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-missing-second-field.json
index 3e4bb0da64c5e..0fd76c6663478 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-missing-second-field.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-missing-second-field.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [],
   "linkage_table": [],
   "data": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/read-entity-summary-no-format-info.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/read-entity-summary-no-format-info.json
index fae5ed99a8695..6b86b0407361b 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/read-entity-summary-no-format-info.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/read-entity-summary-no-format-info.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "id_table": [],
   "linkage_table": [],
   "data": [
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-empty-data-entry.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-empty-data-entry.json
index 75bb74e71117a..bd2cbdae7c773 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-empty-data-entry.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-empty-data-entry.json
@@ -8,8 +8,8 @@
   "id_table": [],
   "linkage_table": [],
   "target_triple": "arm64-apple-macosx",
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "type": "TUSummary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-empty.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-empty.json
index 4283c249de14f..1100abfd90e6c 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-empty.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-empty.json
@@ -3,8 +3,8 @@
   "id_table": [],
   "linkage_table": [],
   "target_triple": "arm64-apple-macosx",
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "type": "TUSummary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-link-unit.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-link-unit.json
index 5458aa1f60e41..a3374b91c7469 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-link-unit.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-link-unit.json
@@ -3,8 +3,8 @@
   "id_table": [],
   "linkage_table": [],
   "target_triple": "arm64-apple-macosx",
-  "tu_namespace": {
-    "name": "libtest.so"
-  },
+  "tu_namespace": [
+    "libtest.so"
+  ],
   "type": "TUSummary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-external.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-external.json
index 6260dafad4ed7..27a670603c5af 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-external.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-external.json
@@ -18,8 +18,8 @@
     }
   ],
   "target_triple": "arm64-apple-macosx",
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "type": "TUSummary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-internal.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-internal.json
index e90fa8319d881..f1be8eea2ff2c 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-internal.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-internal.json
@@ -18,8 +18,8 @@
     }
   ],
   "target_triple": "arm64-apple-macosx",
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "type": "TUSummary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-multiple.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-multiple.json
index d725ff778c417..af66a52568200 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-multiple.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-multiple.json
@@ -44,8 +44,8 @@
     }
   ],
   "target_triple": "arm64-apple-macosx",
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "type": "TUSummary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-none.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-none.json
index fad1f78846cd4..4a198c8e671a8 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-none.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-none.json
@@ -18,8 +18,8 @@
     }
   ],
   "target_triple": "arm64-apple-macosx",
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "type": "TUSummary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-two-summary-types.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-two-summary-types.json
index c0a893e454c58..0142278ce9a62 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-two-summary-types.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-two-summary-types.json
@@ -202,8 +202,8 @@
     }
   ],
   "target_triple": "arm64-apple-macosx",
-  "tu_namespace": {
-    "name": "test.cpp"
-  },
+  "tu_namespace": [
+    "test.cpp"
+  ],
   "type": "TUSummary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/top-level.test b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/top-level.test
index 989c9c03a3c6a..3dcd8018ad977 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/top-level.test
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/top-level.test
@@ -3,18 +3,6 @@
 
 // REQUIRES: plugins
 
-// ============================================================================
-// buildNamespaceFromJSON() errors
-// ============================================================================
-
-// RUN: not clang-ssaf-format --type tu %S/Inputs/missing-name.json 2>&1 \
-// RUN:   | FileCheck %s --match-full-lines --check-prefix=MISSING-NAME
-// RUN: not clang-ssaf-format --type tu --encoding %S/Inputs/missing-name.json 2>&1 \
-// RUN:   | FileCheck %s --match-full-lines --check-prefix=MISSING-NAME
-// MISSING-NAME:      clang-ssaf-format: error: reading TUSummary from file '{{.*}}missing-name.json'
-// MISSING-NAME-NEXT: reading BuildNamespace from field 'tu_namespace'
-// MISSING-NAME-NEXT: failed to read BuildNamespaceName from field 'name': expected JSON string
-
 // ============================================================================
 // readTUSummary() / readTUSummaryEncoding() errors
 // ============================================================================
@@ -24,7 +12,7 @@
 // RUN: not clang-ssaf-format --type tu --encoding %S/Inputs/missing-tu-namespace.json 2>&1 \
 // RUN:   | FileCheck %s --match-full-lines --check-prefix=MISSING-TU-NAMESPACE
 // MISSING-TU-NAMESPACE:      clang-ssaf-format: error: reading TUSummary from file '{{.*}}missing-tu-namespace.json'
-// MISSING-TU-NAMESPACE-NEXT: failed to read BuildNamespace from field 'tu_namespace': expected JSON object
+// MISSING-TU-NAMESPACE-NEXT: failed to read BuildNamespace from field 'tu_namespace': expected JSON array
 
 // RUN: not clang-ssaf-format --type tu %S/Inputs/missing-id-table.json 2>&1 \
 // RUN:   | FileCheck %s --match-full-lines --check-prefix=MISSING-ID-TABLE
diff --git a/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/pairs-result-bad-count.json b/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/pairs-result-bad-count.json
index 4f27038ec77e3..1fa4ad22dd7ca 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/pairs-result-bad-count.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/pairs-result-bad-count.json
@@ -4,9 +4,7 @@
       "id": 0,
       "name": {
         "namespace": [
-          {
-            "name": "test.exe"
-          }
+          "test.exe"
         ],
         "suffix": "",
         "usr": "c:@F at foo"
@@ -16,9 +14,7 @@
       "id": 1,
       "name": {
         "namespace": [
-          {
-            "name": "test.exe"
-          }
+          "test.exe"
         ],
         "suffix": "",
         "usr": "c:@F at bar"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/pairs-result-entry-not-object.json b/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/pairs-result-entry-not-object.json
index 7aef816304654..6451864b0f6a2 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/pairs-result-entry-not-object.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/pairs-result-entry-not-object.json
@@ -4,9 +4,7 @@
       "id": 0,
       "name": {
         "namespace": [
-          {
-            "name": "test.exe"
-          }
+          "test.exe"
         ],
         "suffix": "",
         "usr": "c:@F at foo"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/pairs-result-missing-entity-id.json b/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/pairs-result-missing-entity-id.json
index cb01905a81ea8..61b01a5764a19 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/pairs-result-missing-entity-id.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/pairs-result-missing-entity-id.json
@@ -4,9 +4,7 @@
       "id": 0,
       "name": {
         "namespace": [
-          {
-            "name": "test.exe"
-          }
+          "test.exe"
         ],
         "suffix": "",
         "usr": "c:@F at foo"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/rt-all-results.json b/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/rt-all-results.json
index 849bd3d49c33d..4c157dac1efaa 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/rt-all-results.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/rt-all-results.json
@@ -4,9 +4,7 @@
       "id": 1,
       "name": {
         "namespace": [
-          {
-            "name": "test.exe"
-          }
+          "test.exe"
         ],
         "suffix": "",
         "usr": "c:@F at bar#"
@@ -16,9 +14,7 @@
       "id": 2,
       "name": {
         "namespace": [
-          {
-            "name": "test.exe"
-          }
+          "test.exe"
         ],
         "suffix": "",
         "usr": "c:@F at baz#"
@@ -28,9 +24,7 @@
       "id": 0,
       "name": {
         "namespace": [
-          {
-            "name": "test.exe"
-          }
+          "test.exe"
         ],
         "suffix": "",
         "usr": "c:@F at foo#"
diff --git a/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/rt-multiple-results.json b/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/rt-multiple-results.json
index 7bb8de6def3dd..48239669fdc08 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/rt-multiple-results.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/WPASuite/Inputs/rt-multiple-results.json
@@ -4,9 +4,7 @@
       "id": 0,
       "name": {
         "namespace": [
-          {
-            "name": "test.exe"
-          }
+          "test.exe"
         ],
         "suffix": "",
         "usr": "c:@F at foo"
diff --git a/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-1.json b/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-1.json
index 32c573ee578e8..5ecd34b26dbe5 100644
--- a/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-1.json
+++ b/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-1.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "tu1.cpp"
-  },
+  "tu_namespace": [
+    "tu1.cpp"
+  ],
   "id_table": [
     {
       "id": 0,
diff --git a/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-2.json b/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-2.json
index f41426974a3d2..6e84cf55e8328 100644
--- a/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-2.json
+++ b/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-2.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "tu2.cpp"
-  },
+  "tu_namespace": [
+    "tu2.cpp"
+  ],
   "id_table": [
     {
       "id": 0,
diff --git a/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-empty.json b/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-empty.json
index 8db2137f1de17..f0df9dd8fd349 100644
--- a/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-empty.json
+++ b/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-empty.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "empty.cpp"
-  },
+  "tu_namespace": [
+    "empty.cpp"
+  ],
   "id_table": [],
   "linkage_table": [],
   "data": [],
diff --git a/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-invalid-entity-id-multikey.json b/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-invalid-entity-id-multikey.json
index e92fc9c0e66be..17eb0612abac5 100644
--- a/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-invalid-entity-id-multikey.json
+++ b/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-invalid-entity-id-multikey.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "invalid-entity-id-multikey.cpp"
-  },
+  "tu_namespace": [
+    "invalid-entity-id-multikey.cpp"
+  ],
   "id_table": [
     {
       "id": 0,
diff --git a/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-invalid-entity-id-ref.json b/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-invalid-entity-id-ref.json
index 4ef0df8a96b04..4c9da6b26cd74 100644
--- a/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-invalid-entity-id-ref.json
+++ b/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-invalid-entity-id-ref.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "invalid-entity-id-ref.cpp"
-  },
+  "tu_namespace": [
+    "invalid-entity-id-ref.cpp"
+  ],
   "id_table": [
     {
       "id": 0,
diff --git a/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-invalid-entity-id-value.json b/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-invalid-entity-id-value.json
index 1700792152922..e903d40a88a57 100644
--- a/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-invalid-entity-id-value.json
+++ b/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-invalid-entity-id-value.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "invalid-entity-id-value.cpp"
-  },
+  "tu_namespace": [
+    "invalid-entity-id-value.cpp"
+  ],
   "id_table": [
     {
       "id": 0,
diff --git a/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-missing-fields.json b/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-missing-fields.json
index 7730a5dfdc7f7..6991dd39e4b90 100644
--- a/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-missing-fields.json
+++ b/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-missing-fields.json
@@ -1,7 +1,7 @@
 {
-  "tu_namespace": {
-    "name": "missing-fields.cpp"
-  },
+  "tu_namespace": [
+    "missing-fields.cpp"
+  ],
   "target_triple": "arm64-apple-macosx",
   "type": "TUSummary"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-1+2.json b/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-1+2.json
index 9821347c45345..48ba92aeb29c6 100644
--- a/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-1+2.json
+++ b/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-1+2.json
@@ -403,9 +403,7 @@
       "id": 0,
       "name": {
         "namespace": [
-          {
-            "name": "lu-1+2"
-          }
+          "lu-1+2"
         ],
         "suffix": "",
         "usr": "c:@F at shared_ext#"
@@ -415,12 +413,8 @@
       "id": 1,
       "name": {
         "namespace": [
-          {
-            "name": "tu1.cpp"
-          },
-          {
-            "name": "lu-1+2"
-          }
+          "tu1.cpp",
+          "lu-1+2"
         ],
         "suffix": "",
         "usr": "c:@F at shared_int#"
@@ -430,12 +424,8 @@
       "id": 6,
       "name": {
         "namespace": [
-          {
-            "name": "tu2.cpp"
-          },
-          {
-            "name": "lu-1+2"
-          }
+          "tu2.cpp",
+          "lu-1+2"
         ],
         "suffix": "",
         "usr": "c:@F at shared_int#"
@@ -445,12 +435,8 @@
       "id": 2,
       "name": {
         "namespace": [
-          {
-            "name": "tu1.cpp"
-          },
-          {
-            "name": "lu-1+2"
-          }
+          "tu1.cpp",
+          "lu-1+2"
         ],
         "suffix": "",
         "usr": "c:@F at shared_none#"
@@ -460,12 +446,8 @@
       "id": 7,
       "name": {
         "namespace": [
-          {
-            "name": "tu2.cpp"
-          },
-          {
-            "name": "lu-1+2"
-          }
+          "tu2.cpp",
+          "lu-1+2"
         ],
         "suffix": "",
         "usr": "c:@F at shared_none#"
@@ -475,9 +457,7 @@
       "id": 3,
       "name": {
         "namespace": [
-          {
-            "name": "lu-1+2"
-          }
+          "lu-1+2"
         ],
         "suffix": "",
         "usr": "c:@F at unique_ext_tu1#"
@@ -487,9 +467,7 @@
       "id": 8,
       "name": {
         "namespace": [
-          {
-            "name": "lu-1+2"
-          }
+          "lu-1+2"
         ],
         "suffix": "",
         "usr": "c:@F at unique_ext_tu2#"
@@ -499,12 +477,8 @@
       "id": 4,
       "name": {
         "namespace": [
-          {
-            "name": "tu1.cpp"
-          },
-          {
-            "name": "lu-1+2"
-          }
+          "tu1.cpp",
+          "lu-1+2"
         ],
         "suffix": "",
         "usr": "c:@F at unique_int_tu1#"
@@ -514,12 +488,8 @@
       "id": 9,
       "name": {
         "namespace": [
-          {
-            "name": "tu2.cpp"
-          },
-          {
-            "name": "lu-1+2"
-          }
+          "tu2.cpp",
+          "lu-1+2"
         ],
         "suffix": "",
         "usr": "c:@F at unique_int_tu2#"
@@ -529,12 +499,8 @@
       "id": 5,
       "name": {
         "namespace": [
-          {
-            "name": "tu1.cpp"
-          },
-          {
-            "name": "lu-1+2"
-          }
+          "tu1.cpp",
+          "lu-1+2"
         ],
         "suffix": "",
         "usr": "c:@F at unique_none_tu1#"
@@ -544,12 +510,8 @@
       "id": 10,
       "name": {
         "namespace": [
-          {
-            "name": "tu2.cpp"
-          },
-          {
-            "name": "lu-1+2"
-          }
+          "tu2.cpp",
+          "lu-1+2"
         ],
         "suffix": "",
         "usr": "c:@F at unique_none_tu2#"
@@ -625,9 +587,7 @@
     }
   ],
   "lu_namespace": [
-    {
-      "name": "lu-1+2"
-    }
+    "lu-1+2"
   ],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
diff --git a/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-1.json b/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-1.json
index 36d16ed6e7d2a..539c21b92c461 100644
--- a/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-1.json
+++ b/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-1.json
@@ -226,9 +226,7 @@
       "id": 0,
       "name": {
         "namespace": [
-          {
-            "name": "lu-1"
-          }
+          "lu-1"
         ],
         "suffix": "",
         "usr": "c:@F at shared_ext#"
@@ -238,12 +236,8 @@
       "id": 1,
       "name": {
         "namespace": [
-          {
-            "name": "tu1.cpp"
-          },
-          {
-            "name": "lu-1"
-          }
+          "tu1.cpp",
+          "lu-1"
         ],
         "suffix": "",
         "usr": "c:@F at shared_int#"
@@ -253,12 +247,8 @@
       "id": 2,
       "name": {
         "namespace": [
-          {
-            "name": "tu1.cpp"
-          },
-          {
-            "name": "lu-1"
-          }
+          "tu1.cpp",
+          "lu-1"
         ],
         "suffix": "",
         "usr": "c:@F at shared_none#"
@@ -268,9 +258,7 @@
       "id": 3,
       "name": {
         "namespace": [
-          {
-            "name": "lu-1"
-          }
+          "lu-1"
         ],
         "suffix": "",
         "usr": "c:@F at unique_ext_tu1#"
@@ -280,12 +268,8 @@
       "id": 4,
       "name": {
         "namespace": [
-          {
-            "name": "tu1.cpp"
-          },
-          {
-            "name": "lu-1"
-          }
+          "tu1.cpp",
+          "lu-1"
         ],
         "suffix": "",
         "usr": "c:@F at unique_int_tu1#"
@@ -295,12 +279,8 @@
       "id": 5,
       "name": {
         "namespace": [
-          {
-            "name": "tu1.cpp"
-          },
-          {
-            "name": "lu-1"
-          }
+          "tu1.cpp",
+          "lu-1"
         ],
         "suffix": "",
         "usr": "c:@F at unique_none_tu1#"
@@ -346,9 +326,7 @@
     }
   ],
   "lu_namespace": [
-    {
-      "name": "lu-1"
-    }
+    "lu-1"
   ],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
diff --git a/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-2.json b/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-2.json
index 3dded71ee1bbd..c1fe1c7505953 100644
--- a/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-2.json
+++ b/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-2.json
@@ -232,9 +232,7 @@
       "id": 0,
       "name": {
         "namespace": [
-          {
-            "name": "lu-2"
-          }
+          "lu-2"
         ],
         "suffix": "",
         "usr": "c:@F at shared_ext#"
@@ -244,12 +242,8 @@
       "id": 1,
       "name": {
         "namespace": [
-          {
-            "name": "tu2.cpp"
-          },
-          {
-            "name": "lu-2"
-          }
+          "tu2.cpp",
+          "lu-2"
         ],
         "suffix": "",
         "usr": "c:@F at shared_int#"
@@ -259,12 +253,8 @@
       "id": 2,
       "name": {
         "namespace": [
-          {
-            "name": "tu2.cpp"
-          },
-          {
-            "name": "lu-2"
-          }
+          "tu2.cpp",
+          "lu-2"
         ],
         "suffix": "",
         "usr": "c:@F at shared_none#"
@@ -274,9 +264,7 @@
       "id": 3,
       "name": {
         "namespace": [
-          {
-            "name": "lu-2"
-          }
+          "lu-2"
         ],
         "suffix": "",
         "usr": "c:@F at unique_ext_tu2#"
@@ -286,12 +274,8 @@
       "id": 4,
       "name": {
         "namespace": [
-          {
-            "name": "tu2.cpp"
-          },
-          {
-            "name": "lu-2"
-          }
+          "tu2.cpp",
+          "lu-2"
         ],
         "suffix": "",
         "usr": "c:@F at unique_int_tu2#"
@@ -301,12 +285,8 @@
       "id": 5,
       "name": {
         "namespace": [
-          {
-            "name": "tu2.cpp"
-          },
-          {
-            "name": "lu-2"
-          }
+          "tu2.cpp",
+          "lu-2"
         ],
         "suffix": "",
         "usr": "c:@F at unique_none_tu2#"
@@ -352,9 +332,7 @@
     }
   ],
   "lu_namespace": [
-    {
-      "name": "lu-2"
-    }
+    "lu-2"
   ],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
diff --git a/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-empty.json b/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-empty.json
index 16e5eb56d2221..2db0ea7035d29 100644
--- a/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-empty.json
+++ b/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-empty.json
@@ -3,9 +3,7 @@
   "id_table": [],
   "linkage_table": [],
   "lu_namespace": [
-    {
-      "name": "lu-empty"
-    }
+    "lu-empty"
   ],
   "target_triple": "arm64-apple-macosx",
   "type": "LUSummary"
diff --git a/clang/test/Analysis/Scalable/ssaf-linker/linking-errors.test b/clang/test/Analysis/Scalable/ssaf-linker/linking-errors.test
index d762534a3f86f..bdb0648109863 100644
--- a/clang/test/Analysis/Scalable/ssaf-linker/linking-errors.test
+++ b/clang/test/Analysis/Scalable/ssaf-linker/linking-errors.test
@@ -7,7 +7,7 @@
 // RUN: not clang-ssaf-linker %S/Inputs/tu-empty.json %S/Inputs/tu-empty.json -o %t/lu.json 2>&1 \
 // RUN:   | FileCheck %s --match-full-lines --check-prefix=DUP-NS
 // DUP-NS:      clang-ssaf-linker: error: Linking summary '{{.*}}tu-empty.json'
-// DUP-NS-NEXT: failed to link TU summary: duplicate BuildNamespace(empty.cpp)
+// DUP-NS-NEXT: failed to link TU summary: duplicate BuildNamespace([empty.cpp])
 
 // Entity ID object in summary data blob with '@' key alongside extra keys is a fatal error.
 // RUN: not clang-ssaf-linker %S/Inputs/tu-invalid-entity-id-multikey.json -o %t/lu.json 2>&1 \
diff --git a/clang/tools/clang-ssaf-linker/SSAFLinker.cpp b/clang/tools/clang-ssaf-linker/SSAFLinker.cpp
index d64a88936056c..cfa3994b93910 100644
--- a/clang/tools/clang-ssaf-linker/SSAFLinker.cpp
+++ b/clang/tools/clang-ssaf-linker/SSAFLinker.cpp
@@ -125,7 +125,7 @@ void link(const LinkerInput &LI, llvm::TimerGroup &TG) {
   // TODO: The linker currently uses a hardcoded target triple. Architecture
   // tracking in the linker will be handled properly in a separate PR.
   EntityLinker EL(llvm::Triple("arm64-apple-macosx"),
-                  NestedBuildNamespace(BuildNamespace(LI.LinkUnitName)));
+                  BuildNamespace(LI.LinkUnitName));
 
   llvm::Timer TRead("read", "Read Summaries", TG);
   llvm::Timer TLink("link", "Link Summaries", TG);
diff --git a/clang/unittests/ScalableStaticAnalysis/Analyses/PointerFlow/PointerFlowWPATest.cpp b/clang/unittests/ScalableStaticAnalysis/Analyses/PointerFlow/PointerFlowWPATest.cpp
index ed8d9470a5d19..77cc01be02809 100644
--- a/clang/unittests/ScalableStaticAnalysis/Analyses/PointerFlow/PointerFlowWPATest.cpp
+++ b/clang/unittests/ScalableStaticAnalysis/Analyses/PointerFlow/PointerFlowWPATest.cpp
@@ -37,13 +37,13 @@ class PointerFlowWPATest : public TestFixture {
       EntityLinkage(EntityLinkageType::External);
 
   std::unique_ptr<LUSummary> makeLUSummary() {
-    NestedBuildNamespace NS({BuildNamespace("TestLU")});
+    BuildNamespace NS("TestLU");
     return std::make_unique<LUSummary>(llvm::Triple("arm64-apple-macosx"),
                                        std::move(NS));
   }
 
   EntityId addEntity(LUSummary &LU, llvm::StringRef USR) {
-    NestedBuildNamespace NS({BuildNamespace("TestLU")});
+    BuildNamespace NS("TestLU");
     EntityName Name(USR.str(), "", NS);
     EntityId Id = getIdTable(LU).getId(Name);
     getLinkageTable(LU).insert({Id, ExternalLinkage});
diff --git a/clang/unittests/ScalableStaticAnalysis/Analyses/UnsafeBufferUsage/UnsafeBufferUsageWPATest.cpp b/clang/unittests/ScalableStaticAnalysis/Analyses/UnsafeBufferUsage/UnsafeBufferUsageWPATest.cpp
index 201ddbde2571d..9fbf90784ad62 100644
--- a/clang/unittests/ScalableStaticAnalysis/Analyses/UnsafeBufferUsage/UnsafeBufferUsageWPATest.cpp
+++ b/clang/unittests/ScalableStaticAnalysis/Analyses/UnsafeBufferUsage/UnsafeBufferUsageWPATest.cpp
@@ -38,13 +38,13 @@ class UnsafeBufferUsageWPATest : public TestFixture {
       EntityLinkage(EntityLinkageType::External);
 
   std::unique_ptr<LUSummary> makeLUSummary() {
-    NestedBuildNamespace NS({BuildNamespace("TestLU")});
+    BuildNamespace NS("TestLU");
     return std::make_unique<LUSummary>(llvm::Triple("arm64-apple-macosx"),
                                        std::move(NS));
   }
 
   EntityId addEntity(LUSummary &LU, llvm::StringRef USR) {
-    NestedBuildNamespace NS({BuildNamespace("TestLU")});
+    BuildNamespace NS("TestLU");
     EntityName Name(USR.str(), "", NS);
     EntityId Id = getIdTable(LU).getId(Name);
     getLinkageTable(LU).insert({Id, ExternalLinkage});
diff --git a/clang/unittests/ScalableStaticAnalysis/BuildNamespaceTest.cpp b/clang/unittests/ScalableStaticAnalysis/BuildNamespaceTest.cpp
index c57c64c8cce30..50576f1f9c55a 100644
--- a/clang/unittests/ScalableStaticAnalysis/BuildNamespaceTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysis/BuildNamespaceTest.cpp
@@ -15,96 +15,88 @@
 namespace clang::ssaf {
 namespace {
 
-TEST(BuildNamespaceTest, Equality) {
-  BuildNamespace BN1("test.cpp");
-  BuildNamespace BN2("test.cpp");
-  BuildNamespace BN3("other.cpp");
-
-  EXPECT_EQ(BN1, BN2);
-  EXPECT_NE(BN1, BN3);
+TEST(BuildNamespaceTest, DefaultConstructionIsEmpty) {
+  BuildNamespace BN;
+  EXPECT_TRUE(BN.empty());
 }
 
-// NestedBuildNamespace Tests
-
-TEST(NestedBuildNamespaceTest, DefaultConstruction) {
-  NestedBuildNamespace NBN;
-  EXPECT_TRUE(NBN.empty());
-}
-
-TEST(NestedBuildNamespaceTest, SingleNamespaceConstruction) {
+TEST(BuildNamespaceTest, SingleNameConstruction) {
   BuildNamespace BN("test.cpp");
-  NestedBuildNamespace NBN(BN);
+  EXPECT_FALSE(BN.empty());
+}
 
-  EXPECT_FALSE(NBN.empty());
+TEST(BuildNamespaceTest, VectorConstruction) {
+  BuildNamespace BN(std::vector<std::string>{"a", "b", "c"});
+  EXPECT_FALSE(BN.empty());
 }
 
-TEST(NestedBuildNamespaceTest, Equality) {
-  NestedBuildNamespace NBN1(BuildNamespace("test.cpp"));
-  NestedBuildNamespace NBN2(BuildNamespace("test.cpp"));
-  NestedBuildNamespace NBN3(BuildNamespace("other.cpp"));
+TEST(BuildNamespaceTest, EqualityByNames) {
+  BuildNamespace BN1("test.cpp");
+  BuildNamespace BN2("test.cpp");
+  BuildNamespace BN3("other.cpp");
 
-  EXPECT_EQ(NBN1, NBN2);
-  EXPECT_NE(NBN1, NBN3);
+  EXPECT_EQ(BN1, BN2);
+  EXPECT_NE(BN1, BN3);
 }
 
-TEST(NestedBuildNamespaceTest, MakeQualified) {
-  NestedBuildNamespace NBN1(BuildNamespace("test.cpp"));
-  BuildNamespace LinkNS("app");
-  NestedBuildNamespace NBN2(LinkNS);
+TEST(BuildNamespaceTest, EqualityAcrossLevels) {
+  BuildNamespace Single("test.cpp");
+  BuildNamespace Multi(std::vector<std::string>{"test.cpp", "app"});
+  EXPECT_NE(Single, Multi);
+}
 
-  auto Qualified = NBN1.makeQualified(NBN2);
+TEST(BuildNamespaceTest, MakeQualifiedAppendsLevels) {
+  BuildNamespace CU("test.cpp");
+  BuildNamespace LU("app");
+  auto Qualified = CU.makeQualified(LU);
 
-  EXPECT_NE(Qualified, NBN1);
-  EXPECT_NE(Qualified, NBN2);
+  EXPECT_NE(Qualified, CU);
+  EXPECT_NE(Qualified, LU);
 }
 
-TEST(NestedBuildNamespaceTest, EmptyQualified) {
-  NestedBuildNamespace Empty;
-  NestedBuildNamespace NBN(BuildNamespace("test.cpp"));
-
-  auto Qualified = Empty.makeQualified(NBN);
-  EXPECT_EQ(Qualified, NBN);
+TEST(BuildNamespaceTest, MakeQualifiedFromEmpty) {
+  BuildNamespace Empty;
+  BuildNamespace Named("test.cpp");
+  auto Qualified = Empty.makeQualified(Named);
+  EXPECT_EQ(Qualified, Named);
 }
 
-TEST(BuildNamespaceTest, FormatProvider) {
-  EXPECT_EQ(llvm::formatv("{0}", BuildNamespace("test.cpp")).str(),
-            "BuildNamespace(test.cpp)");
+TEST(BuildNamespaceTest, MakeQualifiedWithEmpty) {
+  BuildNamespace Named("test.cpp");
+  BuildNamespace Empty;
+  auto Qualified = Named.makeQualified(Empty);
+  EXPECT_EQ(Qualified, Named);
 }
 
-TEST(NestedBuildNamespaceTest, FormatProvider) {
-  NestedBuildNamespace NBN(BuildNamespace("test.cpp"));
-  EXPECT_EQ(llvm::formatv("{0}", NBN).str(),
-            "NestedBuildNamespace([BuildNamespace(test.cpp)])");
+TEST(BuildNamespaceTest, StreamOutputEmpty) {
+  BuildNamespace BN;
+  std::string S;
+  llvm::raw_string_ostream(S) << BN;
+  EXPECT_EQ(S, "BuildNamespace([])");
 }
 
-TEST(BuildNamespaceTest, StreamOutput) {
+TEST(BuildNamespaceTest, StreamOutputSingle) {
   BuildNamespace BN("test.cpp");
   std::string S;
   llvm::raw_string_ostream(S) << BN;
-  EXPECT_EQ(S, "BuildNamespace(test.cpp)");
+  EXPECT_EQ(S, "BuildNamespace([test.cpp])");
 }
 
-TEST(NestedBuildNamespaceTest, StreamOutputEmpty) {
-  NestedBuildNamespace NBN;
+TEST(BuildNamespaceTest, StreamOutputMultiple) {
+  BuildNamespace BN =
+      BuildNamespace("test.cpp").makeQualified(BuildNamespace("app"));
   std::string S;
-  llvm::raw_string_ostream(S) << NBN;
-  EXPECT_EQ(S, "NestedBuildNamespace([])");
+  llvm::raw_string_ostream(S) << BN;
+  EXPECT_EQ(S, "BuildNamespace([test.cpp, app])");
 }
 
-TEST(NestedBuildNamespaceTest, StreamOutputSingle) {
-  NestedBuildNamespace NBN(BuildNamespace("test.cpp"));
-  std::string S;
-  llvm::raw_string_ostream(S) << NBN;
-  EXPECT_EQ(S, "NestedBuildNamespace([BuildNamespace(test.cpp)])");
+TEST(BuildNamespaceTest, FormatProviderEmpty) {
+  EXPECT_EQ(llvm::formatv("{0}", BuildNamespace()).str(), "BuildNamespace([])");
 }
 
-TEST(NestedBuildNamespaceTest, StreamOutputMultiple) {
-  NestedBuildNamespace NBN(BuildNamespace("test.cpp"));
-  NBN = NBN.makeQualified(NestedBuildNamespace(BuildNamespace("app")));
-  std::string S;
-  llvm::raw_string_ostream(S) << NBN;
-  EXPECT_EQ(S, "NestedBuildNamespace([BuildNamespace(test.cpp), "
-               "BuildNamespace(app)])");
+TEST(BuildNamespaceTest, FormatProviderSingle) {
+  EXPECT_EQ(llvm::formatv("{0}", BuildNamespace("test.cpp")).str(),
+            "BuildNamespace([test.cpp])");
 }
 
 } // namespace
diff --git a/clang/unittests/ScalableStaticAnalysis/EntityIdTableTest.cpp b/clang/unittests/ScalableStaticAnalysis/EntityIdTableTest.cpp
index 01f007bdaecd8..1533593d50e6e 100644
--- a/clang/unittests/ScalableStaticAnalysis/EntityIdTableTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysis/EntityIdTableTest.cpp
@@ -84,11 +84,10 @@ TEST(EntityIdTableTest, MultipleEntities) {
 TEST(EntityIdTableTest, WithBuildNamespace) {
   EntityIdTable Table;
 
-  NestedBuildNamespace NS(BuildNamespace("test.o"));
+  BuildNamespace NS(BuildNamespace("test.o"));
 
   EntityName Entity1("c:@F at foo", "", NS);
-  EntityName Entity2("c:@F at foo", "",
-                     NestedBuildNamespace(BuildNamespace("other.o")));
+  EntityName Entity2("c:@F at foo", "", BuildNamespace("other.o"));
 
   EntityId Id1 = Table.getId(Entity1);
   EntityId Id2 = Table.getId(Entity2);
diff --git a/clang/unittests/ScalableStaticAnalysis/EntityLinkerTest.cpp b/clang/unittests/ScalableStaticAnalysis/EntityLinkerTest.cpp
index 70c17d984ce47..95c5586dc7c31 100644
--- a/clang/unittests/ScalableStaticAnalysis/EntityLinkerTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysis/EntityLinkerTest.cpp
@@ -88,7 +88,7 @@ class EntityLinkerTest : public TestFixture {
 
   EntityId addEntity(TUSummaryEncoding &TU, llvm::StringRef USR,
                      EntityLinkage Linkage) {
-    EntityName Name(USR, "", NestedBuildNamespace());
+    EntityName Name(USR, "", BuildNamespace());
     EntityId Id = getIdTable(TU).getId(Name);
     getLinkageTable(TU).insert({Id, Linkage});
     return Id;
@@ -194,7 +194,7 @@ MATCHER_P(SummaryDataHasSize, ExpectedSize,
 // ============================================================================
 
 TEST_F(EntityLinkerTest, CreatesEmptyLinker) {
-  NestedBuildNamespace LUNamespace({BuildNamespace("LU")});
+  BuildNamespace LUNamespace("LU");
 
   EntityLinker Linker(llvm::Triple("arm64-apple-macosx"), LUNamespace);
 
@@ -205,7 +205,7 @@ TEST_F(EntityLinkerTest, CreatesEmptyLinker) {
 }
 
 TEST_F(EntityLinkerTest, LinksEmptyTranslationUnit) {
-  NestedBuildNamespace LUNamespace({BuildNamespace("LU")});
+  BuildNamespace LUNamespace("LU");
 
   EntityLinker Linker(llvm::Triple("arm64-apple-macosx"), LUNamespace);
 
@@ -220,7 +220,7 @@ TEST_F(EntityLinkerTest, LinksEmptyTranslationUnit) {
 }
 
 TEST_F(EntityLinkerTest, LinksOneTranslationUnit) {
-  NestedBuildNamespace LUNamespace({BuildNamespace("LU")});
+  BuildNamespace LUNamespace("LU");
 
   EntityLinker Linker(llvm::Triple("arm64-apple-macosx"), LUNamespace);
 
@@ -250,8 +250,8 @@ TEST_F(EntityLinkerTest, LinksOneTranslationUnit) {
   const auto &LinkageTable = getLinkageTable(Output);
   const auto &Data = getData(Output);
 
-  NestedBuildNamespace LocalNamespace =
-      NestedBuildNamespace(TUNamespace).makeQualified(LUNamespace);
+  BuildNamespace LocalNamespace =
+      BuildNamespace(TUNamespace).makeQualified(LUNamespace);
 
   EntityName LU_A_Name("A", "", LocalNamespace);
   EntityName LU_B_Name("B", "", LocalNamespace);
@@ -319,7 +319,7 @@ TEST_F(EntityLinkerTest, LinksOneTranslationUnit) {
 }
 
 TEST_F(EntityLinkerTest, LinksTwoTranslationUnits) {
-  NestedBuildNamespace LUNamespace({BuildNamespace("LU")});
+  BuildNamespace LUNamespace("LU");
 
   EntityLinker Linker(llvm::Triple("arm64-apple-macosx"), LUNamespace);
 
@@ -412,11 +412,11 @@ TEST_F(EntityLinkerTest, LinksTwoTranslationUnits) {
   const auto &LinkageTable = getLinkageTable(Output);
   const auto &Data = getData(Output);
 
-  NestedBuildNamespace TU1LocalNamespace =
-      NestedBuildNamespace(TU1Namespace).makeQualified(LUNamespace);
+  BuildNamespace TU1LocalNamespace =
+      BuildNamespace(TU1Namespace).makeQualified(LUNamespace);
 
-  NestedBuildNamespace TU2LocalNamespace =
-      NestedBuildNamespace(TU2Namespace).makeQualified(LUNamespace);
+  BuildNamespace TU2LocalNamespace =
+      BuildNamespace(TU2Namespace).makeQualified(LUNamespace);
 
   // None linkage entities use local namespace (TU scoped)
   EntityName LU_TU1_X_Name("X", "", TU1LocalNamespace);
@@ -610,7 +610,7 @@ TEST_F(EntityLinkerTest, LinksTwoTranslationUnits) {
 }
 
 TEST_F(EntityLinkerTest, RejectsDuplicateTUSummary) {
-  NestedBuildNamespace LUNamespace({BuildNamespace("LU")});
+  BuildNamespace LUNamespace("LU");
 
   EntityLinker Linker(llvm::Triple("arm64-apple-macosx"), LUNamespace);
 
@@ -623,14 +623,13 @@ TEST_F(EntityLinkerTest, RejectsDuplicateTUSummary) {
   ASSERT_THAT_ERROR(
       Linker.link(std::move(TU2)),
       llvm::FailedWithMessage(HasSubstr("failed to link TU summary: duplicate "
-                                        "BuildNamespace(TU)")));
+                                        "BuildNamespace([TU])")));
 }
 
 // Reproduces a crash when linking internal-linkage entities
 // (e.g. "static inline" functions) that share the same USR across TUs.
 TEST_F(EntityLinkerTest, InternalLinkageWithEmptyNamespaceAcrossTUs) {
-  EntityLinker Linker(llvm::Triple("arm64-apple-macosx"),
-                      NestedBuildNamespace{BuildNamespace("LU")});
+  EntityLinker Linker(llvm::Triple("arm64-apple-macosx"), BuildNamespace("LU"));
 
   auto TU1 = createTUSummaryEncoding("TU1");
   addEntity(*TU1, "some_static_inline", InternalLinkage);
@@ -644,8 +643,8 @@ TEST_F(EntityLinkerTest, InternalLinkageWithEmptyNamespaceAcrossTUs) {
   const auto Output = std::move(Linker).takeOutput();
   const auto &IdTable = getIdTable(Output);
 
-  NestedBuildNamespace TU1NS{{BuildNamespace("TU1"), BuildNamespace("LU")}};
-  NestedBuildNamespace TU2NS{{BuildNamespace("TU2"), BuildNamespace("LU")}};
+  BuildNamespace TU1NS(std::vector<std::string>{"TU1", "LU"});
+  BuildNamespace TU2NS(std::vector<std::string>{"TU2", "LU"});
   EntityName ExpectedTU1Name("some_static_inline", "", TU1NS);
   EntityName ExpectedTU2Name("some_static_inline", "", TU2NS);
 
diff --git a/clang/unittests/ScalableStaticAnalysis/EntityNameTest.cpp b/clang/unittests/ScalableStaticAnalysis/EntityNameTest.cpp
index 791bf19f592fc..c996fd4aaadd0 100644
--- a/clang/unittests/ScalableStaticAnalysis/EntityNameTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysis/EntityNameTest.cpp
@@ -17,8 +17,8 @@ namespace clang::ssaf {
 namespace {
 
 TEST(EntityNameTest, Equality) {
-  NestedBuildNamespace NBN1(BuildNamespace("test.cpp"));
-  NestedBuildNamespace NBN2(BuildNamespace("test.cpp"));
+  BuildNamespace NBN1(BuildNamespace("test.cpp"));
+  BuildNamespace NBN2(BuildNamespace("test.cpp"));
 
   EntityName EN1("c:@F at foo", "", NBN1);
   EntityName EN2("c:@F at foo", "", NBN2);
@@ -29,7 +29,7 @@ TEST(EntityNameTest, Equality) {
 }
 
 TEST(EntityNameTest, EqualityWithDifferentSuffix) {
-  NestedBuildNamespace NBN(BuildNamespace("test.cpp"));
+  BuildNamespace NBN(BuildNamespace("test.cpp"));
 
   EntityName EN1("c:@F at foo", "1", NBN);
   EntityName EN2("c:@F at foo", "2", NBN);
@@ -38,8 +38,8 @@ TEST(EntityNameTest, EqualityWithDifferentSuffix) {
 }
 
 TEST(EntityNameTest, EqualityWithDifferentNamespace) {
-  NestedBuildNamespace NBN1(BuildNamespace("test1.cpp"));
-  NestedBuildNamespace NBN2(BuildNamespace("test2.cpp"));
+  BuildNamespace NBN1(BuildNamespace("test1.cpp"));
+  BuildNamespace NBN2(BuildNamespace("test2.cpp"));
 
   EntityName EN1("c:@F at foo", "", NBN1);
   EntityName EN2("c:@F at foo", "", NBN2);
@@ -48,10 +48,10 @@ TEST(EntityNameTest, EqualityWithDifferentNamespace) {
 }
 
 TEST(EntityNameTest, MakeQualified) {
-  NestedBuildNamespace NBN1(BuildNamespace("test.cpp"));
+  BuildNamespace NBN1(BuildNamespace("test.cpp"));
   EntityName EN("c:@F at foo", "", NBN1);
 
-  NestedBuildNamespace NBN2(BuildNamespace("app"));
+  BuildNamespace NBN2(BuildNamespace("app"));
 
   auto Qualified = EN.makeQualified(NBN2);
 
@@ -59,29 +59,28 @@ TEST(EntityNameTest, MakeQualified) {
 }
 
 TEST(EntityNameTest, FormatProvider) {
-  NestedBuildNamespace NBN(BuildNamespace("test.cpp"));
+  BuildNamespace NBN(BuildNamespace("test.cpp"));
   EntityName EN("c:@F at foo", "", NBN);
-  EXPECT_EQ(llvm::formatv("{0}", EN).str(),
-            "EntityName(c:@F at foo, , "
-            "NestedBuildNamespace([BuildNamespace(test.cpp)]))");
+  EXPECT_EQ(llvm::formatv("{0}", EN).str(), "EntityName(c:@F at foo, , "
+                                            "BuildNamespace([test.cpp]))");
 }
 
 TEST(EntityNameTest, StreamOutputNoSuffix) {
-  NestedBuildNamespace NBN(BuildNamespace("test.cpp"));
+  BuildNamespace NBN(BuildNamespace("test.cpp"));
   EntityName EN("c:@F at foo", "", NBN);
   std::string S;
   llvm::raw_string_ostream(S) << EN;
   EXPECT_EQ(S, "EntityName(c:@F at foo, , "
-               "NestedBuildNamespace([BuildNamespace(test.cpp)]))");
+               "BuildNamespace([test.cpp]))");
 }
 
 TEST(EntityNameTest, StreamOutputWithSuffix) {
-  NestedBuildNamespace NBN(BuildNamespace("test.cpp"));
+  BuildNamespace NBN(BuildNamespace("test.cpp"));
   EntityName EN("c:@F at foo", "1", NBN);
   std::string S;
   llvm::raw_string_ostream(S) << EN;
   EXPECT_EQ(S, "EntityName(c:@F at foo, 1, "
-               "NestedBuildNamespace([BuildNamespace(test.cpp)]))");
+               "BuildNamespace([test.cpp]))");
 }
 
 } // namespace
diff --git a/clang/unittests/ScalableStaticAnalysis/Frontend/TUSummaryExtractorFrontendActionTest.cpp b/clang/unittests/ScalableStaticAnalysis/Frontend/TUSummaryExtractorFrontendActionTest.cpp
index ab2b406850489..999fa41393d8f 100644
--- a/clang/unittests/ScalableStaticAnalysis/Frontend/TUSummaryExtractorFrontendActionTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysis/Frontend/TUSummaryExtractorFrontendActionTest.cpp
@@ -184,7 +184,7 @@ class CapturingSerializationFormat final : public SerializationFormat {
   }
   llvm::Error writeTUSummary(const TUSummary &Summary,
                              llvm::StringRef) override {
-    lastCapturedName() = getName(getTUNamespace(Summary));
+    lastCapturedName() = getNames(getTUNamespace(Summary)).front();
     return llvm::Error::success();
   }
   llvm::Expected<TUSummaryEncoding>
diff --git a/clang/unittests/ScalableStaticAnalysis/LUSummaryTest.cpp b/clang/unittests/ScalableStaticAnalysis/LUSummaryTest.cpp
index 4d9b684c66000..c06b45fd482ba 100644
--- a/clang/unittests/ScalableStaticAnalysis/LUSummaryTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysis/LUSummaryTest.cpp
@@ -15,7 +15,7 @@ namespace {
 
 TEST(LUSummaryTest, GetNamespace) {
   BuildNamespace LU("app");
-  NestedBuildNamespace NS(LU);
+  BuildNamespace NS(LU);
   LUSummary Summary(llvm::Triple("arm64-apple-macosx"), NS);
 
   EXPECT_EQ(Summary.getNamespace(), NS);
diff --git a/clang/unittests/ScalableStaticAnalysis/Serialization/JSONFormatTest/LUSummaryTest.cpp b/clang/unittests/ScalableStaticAnalysis/Serialization/JSONFormatTest/LUSummaryTest.cpp
index 1e33b1098cc41..de8f59bb6823a 100644
--- a/clang/unittests/ScalableStaticAnalysis/Serialization/JSONFormatTest/LUSummaryTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysis/Serialization/JSONFormatTest/LUSummaryTest.cpp
@@ -41,7 +41,7 @@ SummaryOps LUSummaryOps{
     },
     [](llvm::StringRef FilePath) -> llvm::Error {
       BuildNamespace BN("test.cpp");
-      NestedBuildNamespace NBN(std::move(BN));
+      BuildNamespace NBN(std::move(BN));
       LUSummary S(llvm::Triple("arm64-apple-macosx"), std::move(NBN));
       return JSONFormat().writeLUSummary(S, FilePath);
     },
@@ -62,7 +62,7 @@ SummaryOps LUSummaryEncodingOps{
     },
     [](llvm::StringRef FilePath) -> llvm::Error {
       BuildNamespace BN("test.cpp");
-      NestedBuildNamespace NBN(std::move(BN));
+      BuildNamespace NBN(std::move(BN));
       LUSummaryEncoding E(llvm::Triple("arm64-apple-macosx"), std::move(NBN));
       return JSONFormat().writeLUSummaryEncoding(E, FilePath);
     },
@@ -187,10 +187,7 @@ TEST_P(LUSummaryTest, NoReadPermission) {
 
   auto ExpectedFilePath = writeJSON(R"({
     "lu_namespace": [
-      {
-        "kind": "LinkUnit",
-        "name": "test.exe"
-      }
+      "test.exe"
     ],
     "id_table": [],
     "linkage_table": [],
@@ -221,10 +218,7 @@ TEST_P(LUSummaryTest, NoReadPermission) {
 TEST_F(JSONFormatLUSummaryTest, ReadEntitySummaryMissingData) {
   auto Result = readLUSummaryFromString(R"({
     "lu_namespace": [
-      {
-        "kind": "LinkUnit",
-        "name": "test.exe"
-      }
+      "test.exe"
     ],
     "target_triple": "arm64-apple-macosx",
     "type": "LUSummary",
@@ -259,10 +253,7 @@ TEST_F(JSONFormatLUSummaryTest, ReadEntitySummaryMissingData) {
 TEST_F(JSONFormatLUSummaryTest, ReadEntitySummaryMismatchedSummaryName) {
   auto Result = readLUSummaryFromString(R"({
     "lu_namespace": [
-      {
-        "kind": "LinkUnit",
-        "name": "test.exe"
-      }
+      "test.exe"
     ],
     "target_triple": "arm64-apple-macosx",
     "type": "LUSummary",
@@ -302,11 +293,10 @@ TEST_F(JSONFormatLUSummaryTest, ReadEntitySummaryMismatchedSummaryName) {
 // ============================================================================
 
 TEST_F(JSONFormatLUSummaryTest, WriteEntitySummaryMissingData) {
-  NestedBuildNamespace NBN(BuildNamespace("test.exe"));
+  BuildNamespace NBN(BuildNamespace("test.exe"));
   LUSummary Summary(llvm::Triple("arm64-apple-macosx"), std::move(NBN));
 
-  NestedBuildNamespace Namespace =
-      NestedBuildNamespace(BuildNamespace("test.cpp"));
+  BuildNamespace Namespace = BuildNamespace("test.cpp");
   EntityId EI = getIdTable(Summary).getId(
       EntityName{"c:@F at foo", "", std::move(Namespace)});
 
@@ -320,11 +310,10 @@ TEST_F(JSONFormatLUSummaryTest, WriteEntitySummaryMissingData) {
 }
 
 TEST_F(JSONFormatLUSummaryTest, WriteEntitySummaryMismatchedSummaryName) {
-  NestedBuildNamespace NBN(BuildNamespace("test.exe"));
+  BuildNamespace NBN(BuildNamespace("test.exe"));
   LUSummary Summary(llvm::Triple("arm64-apple-macosx"), std::move(NBN));
 
-  NestedBuildNamespace Namespace =
-      NestedBuildNamespace(BuildNamespace("test.cpp"));
+  BuildNamespace Namespace = BuildNamespace("test.cpp");
   EntityId EI = getIdTable(Summary).getId(
       EntityName{"c:@F at foo", "", std::move(Namespace)});
 
@@ -417,11 +406,10 @@ TEST_P(LUSummaryTest, WriteStreamOpenFailure) {
 // ============================================================================
 
 TEST_F(JSONFormatLUSummaryTest, WriteEntitySummaryNoFormatInfo) {
-  NestedBuildNamespace NBN(BuildNamespace("test.exe"));
+  BuildNamespace NBN(BuildNamespace("test.exe"));
   LUSummary Summary(llvm::Triple("arm64-apple-macosx"), std::move(NBN));
 
-  NestedBuildNamespace Namespace =
-      NestedBuildNamespace(BuildNamespace("test.cpp"));
+  BuildNamespace Namespace = BuildNamespace("test.cpp");
   EntityId EI = getIdTable(Summary).getId(
       EntityName{"c:@F at foo", "", std::move(Namespace)});
 
diff --git a/clang/unittests/ScalableStaticAnalysis/Serialization/JSONFormatTest/TUSummaryTest.cpp b/clang/unittests/ScalableStaticAnalysis/Serialization/JSONFormatTest/TUSummaryTest.cpp
index 0d4ad859899fd..9095b6c220274 100644
--- a/clang/unittests/ScalableStaticAnalysis/Serialization/JSONFormatTest/TUSummaryTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysis/Serialization/JSONFormatTest/TUSummaryTest.cpp
@@ -183,10 +183,7 @@ TEST_P(TUSummaryTest, NoReadPermission) {
   PathString FileName("no-read-permission.json");
 
   auto ExpectedFilePath = writeJSON(R"({
-    "tu_namespace": {
-      "kind": "CompilationUnit",
-      "name": "test.cpp"
-    },
+    "tu_namespace": ["test.cpp"],
     "id_table": [],
     "linkage_table": [],
     "data": []
@@ -215,10 +212,7 @@ TEST_P(TUSummaryTest, NoReadPermission) {
 
 TEST_F(JSONFormatTUSummaryTest, ReadEntitySummaryMissingData) {
   auto Result = readTUSummaryFromString(R"({
-    "tu_namespace": {
-      "kind": "CompilationUnit",
-      "name": "test.cpp"
-    },
+    "tu_namespace": ["test.cpp"],
     "target_triple": "arm64-apple-macosx",
     "type": "TUSummary",
     "id_table": [],
@@ -251,10 +245,7 @@ TEST_F(JSONFormatTUSummaryTest, ReadEntitySummaryMissingData) {
 
 TEST_F(JSONFormatTUSummaryTest, ReadEntitySummaryMismatchedSummaryName) {
   auto Result = readTUSummaryFromString(R"({
-    "tu_namespace": {
-      "kind": "CompilationUnit",
-      "name": "test.cpp"
-    },
+    "tu_namespace": ["test.cpp"],
     "target_triple": "arm64-apple-macosx",
     "type": "TUSummary",
     "id_table": [],
@@ -298,8 +289,7 @@ TEST_F(JSONFormatTUSummaryTest, WriteEntitySummaryMissingData) {
   TUSummary Summary(llvm::Triple("arm64-apple-macosx"),
                     BuildNamespace("test.cpp"));
 
-  NestedBuildNamespace Namespace =
-      NestedBuildNamespace(BuildNamespace("test.cpp"));
+  BuildNamespace Namespace = BuildNamespace("test.cpp");
   EntityId EI = getIdTable(Summary).getId(
       EntityName{"c:@F at foo", "", std::move(Namespace)});
 
@@ -316,8 +306,7 @@ TEST_F(JSONFormatTUSummaryTest, WriteEntitySummaryMismatchedSummaryName) {
   TUSummary Summary(llvm::Triple("arm64-apple-macosx"),
                     BuildNamespace("test.cpp"));
 
-  NestedBuildNamespace Namespace =
-      NestedBuildNamespace(BuildNamespace("test.cpp"));
+  BuildNamespace Namespace = BuildNamespace("test.cpp");
   EntityId EI = getIdTable(Summary).getId(
       EntityName{"c:@F at foo", "", std::move(Namespace)});
 
@@ -413,8 +402,7 @@ TEST_F(JSONFormatTUSummaryTest, WriteEntitySummaryNoFormatInfo) {
   TUSummary Summary(llvm::Triple("arm64-apple-macosx"),
                     BuildNamespace("test.cpp"));
 
-  NestedBuildNamespace Namespace =
-      NestedBuildNamespace(BuildNamespace("test.cpp"));
+  BuildNamespace Namespace = BuildNamespace("test.cpp");
   EntityId EI = getIdTable(Summary).getId(
       EntityName{"c:@F at foo", "", std::move(Namespace)});
 
diff --git a/clang/unittests/ScalableStaticAnalysis/SummaryData/SummaryDataTest.cpp b/clang/unittests/ScalableStaticAnalysis/SummaryData/SummaryDataTest.cpp
index 9329d07d4e9ce..ad0f49b7e5876 100644
--- a/clang/unittests/ScalableStaticAnalysis/SummaryData/SummaryDataTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysis/SummaryData/SummaryDataTest.cpp
@@ -182,13 +182,13 @@ class LUSummaryConsumerTest : public TestFixture {
   }
 
   std::unique_ptr<LUSummary> makeLUSummary() {
-    NestedBuildNamespace NS({BuildNamespace("TestLU")});
+    BuildNamespace NS("TestLU");
     return std::make_unique<LUSummary>(llvm::Triple("arm64-apple-macosx"),
                                        std::move(NS));
   }
 
   EntityId addEntity(LUSummary &LU, llvm::StringRef USR) {
-    NestedBuildNamespace NS({BuildNamespace("TestLU")});
+    BuildNamespace NS("TestLU");
     EntityName Name(USR.str(), "", NS);
     EntityId Id = getIdTable(LU).getId(Name);
     getLinkageTable(LU).insert({Id, ExternalLinkage});
diff --git a/clang/unittests/ScalableStaticAnalysis/TestFixture.cpp b/clang/unittests/ScalableStaticAnalysis/TestFixture.cpp
index 45e3c693a26fe..091aab956282b 100644
--- a/clang/unittests/ScalableStaticAnalysis/TestFixture.cpp
+++ b/clang/unittests/ScalableStaticAnalysis/TestFixture.cpp
@@ -33,10 +33,6 @@ void PrintTo(const EntityLinkage &EL, std::ostream *OS) { *OS << asString(EL); }
 
 void PrintTo(const EntityName &EN, std::ostream *OS) { *OS << asString(EN); }
 
-void PrintTo(const NestedBuildNamespace &NBN, std::ostream *OS) {
-  *OS << asString(NBN);
-}
-
 void PrintTo(const SummaryName &SN, std::ostream *OS) { *OS << asString(SN); }
 
 } // namespace clang::ssaf
diff --git a/clang/unittests/ScalableStaticAnalysis/TestFixture.h b/clang/unittests/ScalableStaticAnalysis/TestFixture.h
index cb33dd57a31a9..06503d16ed990 100644
--- a/clang/unittests/ScalableStaticAnalysis/TestFixture.h
+++ b/clang/unittests/ScalableStaticAnalysis/TestFixture.h
@@ -42,7 +42,6 @@ void PrintTo(const BuildNamespace &BN, std::ostream *OS);
 void PrintTo(const EntityId &E, std::ostream *OS);
 void PrintTo(const EntityLinkage &EL, std::ostream *OS);
 void PrintTo(const EntityName &EN, std::ostream *OS);
-void PrintTo(const NestedBuildNamespace &NBN, std::ostream *OS);
 void PrintTo(const SummaryName &N, std::ostream *OS);
 
 } // namespace clang::ssaf
diff --git a/clang/unittests/ScalableStaticAnalysis/WholeProgramAnalysis/AnalysisDriverTest.cpp b/clang/unittests/ScalableStaticAnalysis/WholeProgramAnalysis/AnalysisDriverTest.cpp
index e84d6d6119505..eb593fd57487b 100644
--- a/clang/unittests/ScalableStaticAnalysis/WholeProgramAnalysis/AnalysisDriverTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysis/WholeProgramAnalysis/AnalysisDriverTest.cpp
@@ -302,13 +302,13 @@ class AnalysisDriverTest : public TestFixture {
   }
 
   std::unique_ptr<LUSummary> makeLUSummary() {
-    NestedBuildNamespace NS({BuildNamespace("TestLU")});
+    BuildNamespace NS("TestLU");
     return std::make_unique<LUSummary>(llvm::Triple("arm64-apple-macosx"),
                                        std::move(NS));
   }
 
   EntityId addEntity(LUSummary &LU, llvm::StringRef USR) {
-    NestedBuildNamespace NS({BuildNamespace("TestLU")});
+    BuildNamespace NS("TestLU");
     EntityName Name(USR.str(), "", NS);
     EntityId Id = getIdTable(LU).getId(Name);
     getLinkageTable(LU).insert({Id, ExternalLinkage});
diff --git a/clang/unittests/ScalableStaticAnalysis/WholeProgramAnalysis/UnsafeBufferReachableAnalysisTest.cpp b/clang/unittests/ScalableStaticAnalysis/WholeProgramAnalysis/UnsafeBufferReachableAnalysisTest.cpp
index f6228dcb098de..d4e5a56cee0b3 100644
--- a/clang/unittests/ScalableStaticAnalysis/WholeProgramAnalysis/UnsafeBufferReachableAnalysisTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysis/WholeProgramAnalysis/UnsafeBufferReachableAnalysisTest.cpp
@@ -44,13 +44,13 @@ class UnsafeBufferReachableAnalysisTest : public TestFixture {
       EntityLinkage(EntityLinkageType::External);
 
   std::unique_ptr<LUSummary> makeLUSummary() {
-    NestedBuildNamespace NS({BuildNamespace("TestLU")});
+    BuildNamespace NS("TestLU");
     return std::make_unique<LUSummary>(llvm::Triple("arm64-apple-macosx"),
                                        std::move(NS));
   }
 
   EntityId addEntity(LUSummary &LU, llvm::StringRef USR) {
-    NestedBuildNamespace NS({BuildNamespace("TestLU")});
+    BuildNamespace NS("TestLU");
     EntityName Name(USR.str(), "", NS);
     EntityId Id = getIdTable(LU).getId(Name);
     getLinkageTable(LU).insert({Id, ExternalLinkage});



More information about the cfe-commits mailing list