[clang] [clang][ssaf] Track target triple in TU and LU summaries. (PR #204027)

Aviral Goel via cfe-commits cfe-commits at lists.llvm.org
Tue Jun 16 08:53:18 PDT 2026


https://github.com/aviralg updated https://github.com/llvm/llvm-project/pull/204027

>From e6c0b14da0b569c57b19a7b7997d27204ef7cd5e Mon Sep 17 00:00:00 2001
From: Aviral Goel <goel.aviral at gmail.com>
Date: Mon, 15 Jun 2026 18:54:25 -0700
Subject: [PATCH] Code

---
 .../Core/EntityLinker/EntityLinker.h          |  7 ++++--
 .../Core/EntityLinker/LUSummary.h             |  9 +++++--
 .../Core/EntityLinker/LUSummaryEncoding.h     |  9 +++++--
 .../Core/EntityLinker/TUSummaryEncoding.h     | 11 ++++++--
 .../Core/Model/PrivateFieldNames.def          |  4 +++
 .../Core/TUSummary/TUSummary.h                |  9 +++++--
 .../JSONFormat/JSONFormatImpl.cpp             | 16 ++++++++++++
 .../Serialization/JSONFormat/JSONFormatImpl.h | 13 ++++++++++
 .../Serialization/JSONFormat/LUSummary.cpp    | 25 ++++++++++++++++++-
 .../JSONFormat/LUSummaryEncoding.cpp          | 25 ++++++++++++++++++-
 .../Serialization/JSONFormat/TUSummary.cpp    | 25 ++++++++++++++++++-
 .../JSONFormat/TUSummaryEncoding.cpp          | 25 ++++++++++++++++++-
 .../TUSummaryExtractorFrontendAction.cpp      | 15 +++++++----
 .../Inputs/tu-summary-bad-array.json          |  3 ++-
 .../Inputs/tu-summary-bad-summary.json        |  3 ++-
 .../PointerFlow/Inputs/tu-summary-no-key.json |  3 ++-
 .../PointerFlow/Inputs/tu-summary.json        |  1 +
 .../Inputs/tu-summary-bad-element.json        |  3 ++-
 .../Inputs/tu-summary-bad-ptr-level.json      |  3 ++-
 .../Inputs/tu-summary-no-key.json             |  3 ++-
 .../UnsafeBufferUsage/Inputs/tu-summary.json  |  1 +
 .../ssaf-analyzer/Inputs/lu-tags-only.json    |  3 ++-
 .../Scalable/ssaf-analyzer/Inputs/lu.json     |  3 ++-
 .../invalid-direct-callee-element.json        |  3 ++-
 .../CallGraph/invalid-direct-callee-id.json   |  3 ++-
 .../Inputs/CallGraph/missing-def-col.json     |  3 ++-
 .../Inputs/CallGraph/missing-def-file.json    |  3 ++-
 .../Inputs/CallGraph/missing-def-line.json    |  3 ++-
 .../Inputs/CallGraph/missing-def.json         |  3 ++-
 .../CallGraph/missing-direct-callees.json     |  3 ++-
 .../Inputs/CallGraph/missing-pretty-name.json |  3 ++-
 .../CallGraph/missing-virtual-callees.json    |  3 ++-
 .../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      |  3 ++-
 .../LUSummary/Inputs/duplicate-entity.json    |  3 ++-
 .../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    |  3 ++-
 .../Inputs/entity-name-missing-usr.json       |  3 ++-
 .../Inputs/id-table-element-not-object.json   |  3 ++-
 .../Inputs/id-table-entry-id-not-uint64.json  |  3 ++-
 .../Inputs/id-table-entry-missing-id.json     |  3 ++-
 .../Inputs/id-table-entry-missing-name.json   |  3 ++-
 .../LUSummary/Inputs/id-table-not-array.json  |  3 ++-
 .../Inputs/linkage-table-duplicate-id.json    |  3 ++-
 .../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      |  3 ++-
 .../Inputs/linkage-table-not-array.json       |  3 ++-
 .../lu-namespace-element-invalid-kind.json    |  3 ++-
 .../lu-namespace-element-missing-kind.json    |  3 ++-
 .../lu-namespace-element-missing-name.json    |  3 ++-
 .../lu-namespace-element-not-object.json      |  3 ++-
 .../Inputs/lu-namespace-not-array.json        |  3 ++-
 .../LUSummary/Inputs/missing-data.json        |  3 ++-
 .../LUSummary/Inputs/missing-id-table.json    |  3 ++-
 .../Inputs/missing-linkage-table.json         |  3 ++-
 .../Inputs/missing-lu-namespace.json          |  3 ++-
 .../Inputs/missing-target-triple.json         | 11 ++++++++
 .../namespace-element-invalid-kind.json       |  3 ++-
 .../namespace-element-missing-kind.json       |  3 ++-
 .../namespace-element-missing-name.json       |  3 ++-
 .../Inputs/namespace-element-not-object.json  |  3 ++-
 .../Inputs/not-normalized-target-triple.json  | 12 +++++++++
 .../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 |  3 ++-
 .../LUSummary/Inputs/rt-empty-namespace.json  |  3 ++-
 .../LUSummary/Inputs/rt-linkage-external.json |  3 ++-
 .../LUSummary/Inputs/rt-linkage-internal.json |  3 ++-
 .../LUSummary/Inputs/rt-linkage-multiple.json |  3 ++-
 .../LUSummary/Inputs/rt-linkage-none.json     |  3 ++-
 .../rt-multiple-namespace-elements.json       |  3 ++-
 .../Inputs/rt-single-namespace-element.json   |  3 ++-
 .../Inputs/rt-two-summary-types.json          |  3 ++-
 .../ssaf-format/LUSummary/top-level.test      | 15 +++++++++++
 .../Inputs/data-element-not-object.json       |  3 ++-
 .../Inputs/data-entry-missing-data.json       |  3 ++-
 .../data-entry-missing-summary-name.json      |  3 ++-
 .../TUSummary/Inputs/data-not-array.json      |  3 ++-
 .../duplicate-entity-id-in-data-map.json      |  3 ++-
 .../TUSummary/Inputs/duplicate-entity.json    |  3 ++-
 .../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-suffix.json    |  3 ++-
 .../Inputs/entity-name-missing-usr.json       |  3 ++-
 .../Inputs/id-table-element-not-object.json   |  3 ++-
 .../Inputs/id-table-entry-id-not-uint64.json  |  3 ++-
 .../Inputs/id-table-entry-missing-id.json     |  3 ++-
 .../Inputs/id-table-entry-missing-name.json   |  3 ++-
 .../TUSummary/Inputs/id-table-not-array.json  |  3 ++-
 .../TUSummary/Inputs/invalid-kind.json        |  3 ++-
 .../Inputs/linkage-table-duplicate-id.json    |  3 ++-
 .../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      |  3 ++-
 .../Inputs/linkage-table-not-array.json       |  3 ++-
 .../TUSummary/Inputs/missing-data.json        |  3 ++-
 .../TUSummary/Inputs/missing-id-table.json    |  3 ++-
 .../TUSummary/Inputs/missing-kind.json        |  3 ++-
 .../Inputs/missing-linkage-table.json         |  3 ++-
 .../TUSummary/Inputs/missing-name.json        |  3 ++-
 .../Inputs/missing-target-triple.json         |  9 +++++++
 .../Inputs/missing-tu-namespace.json          |  1 +
 .../Inputs/not-normalized-target-triple.json  | 10 ++++++++
 .../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 ++-
 .../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      | 15 +++++++++++
 .../Scalable/ssaf-linker/Inputs/tu-1.json     |  3 ++-
 .../Scalable/ssaf-linker/Inputs/tu-2.json     |  3 ++-
 .../Scalable/ssaf-linker/Inputs/tu-empty.json |  3 ++-
 .../Inputs/tu-invalid-entity-id-multikey.json |  3 ++-
 .../Inputs/tu-invalid-entity-id-ref.json      |  3 ++-
 .../Inputs/tu-invalid-entity-id-value.json    |  3 ++-
 .../ssaf-linker/Inputs/tu-missing-fields.json |  3 ++-
 .../Scalable/ssaf-linker/Outputs/lu-1+2.json  |  3 ++-
 .../Scalable/ssaf-linker/Outputs/lu-1.json    |  3 ++-
 .../Scalable/ssaf-linker/Outputs/lu-2.json    |  3 ++-
 .../ssaf-linker/Outputs/lu-empty.json         |  3 ++-
 clang/tools/clang-ssaf-linker/SSAFLinker.cpp  |  7 ++++--
 .../CallGraph/CallGraphExtractorTest.cpp      |  1 +
 .../Analyses/PointerFlow/PointerFlowTest.cpp  |  3 ++-
 .../PointerFlow/PointerFlowWPATest.cpp        |  3 ++-
 .../UnsafeBufferUsageTest.cpp                 |  3 ++-
 .../UnsafeBufferUsageWPATest.cpp              |  3 ++-
 .../EntityLinkerTest.cpp                      | 21 +++++++++-------
 .../LUSummaryTest.cpp                         |  2 +-
 .../Registries/MockSerializationFormat.cpp    |  2 +-
 .../SummaryExtractorRegistryTest.cpp          |  1 +
 .../JSONFormatTest/LUSummaryTest.cpp          | 12 +++++----
 .../JSONFormatTest/TUSummaryTest.cpp          |  9 +++++--
 .../SummaryData/SummaryDataTest.cpp           |  3 ++-
 .../TUSummaryBuilderTest.cpp                  |  1 +
 .../AnalysisDriverTest.cpp                    |  3 ++-
 .../UnsafeBufferReachableAnalysisTest.cpp     |  3 ++-
 175 files changed, 565 insertions(+), 175 deletions(-)
 create mode 100644 clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-target-triple.json
 create mode 100644 clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/not-normalized-target-triple.json
 create mode 100644 clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-target-triple.json
 create mode 100644 clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/not-normalized-target-triple.json

diff --git a/clang/include/clang/ScalableStaticAnalysisFramework/Core/EntityLinker/EntityLinker.h b/clang/include/clang/ScalableStaticAnalysisFramework/Core/EntityLinker/EntityLinker.h
index 12a42df213e2a..ed02560004632 100644
--- a/clang/include/clang/ScalableStaticAnalysisFramework/Core/EntityLinker/EntityLinker.h
+++ b/clang/include/clang/ScalableStaticAnalysisFramework/Core/EntityLinker/EntityLinker.h
@@ -16,6 +16,7 @@
 
 #include "clang/ScalableStaticAnalysisFramework/Core/EntityLinker/LUSummaryEncoding.h"
 #include "llvm/Support/Error.h"
+#include "llvm/TargetParser/Triple.h"
 #include <map>
 #include <memory>
 #include <set>
@@ -32,9 +33,11 @@ class EntityLinker {
 public:
   /// Constructs an EntityLinker to link TU summaries into a LU summary.
   ///
+  /// \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.
-  explicit EntityLinker(NestedBuildNamespace LUNamespace)
-      : Output(std::move(LUNamespace)) {}
+  EntityLinker(llvm::Triple TargetTriple, NestedBuildNamespace LUNamespace)
+      : Output(std::move(TargetTriple), std::move(LUNamespace)) {}
 
   /// Links a TU summary into a LU summary.
   ///
diff --git a/clang/include/clang/ScalableStaticAnalysisFramework/Core/EntityLinker/LUSummary.h b/clang/include/clang/ScalableStaticAnalysisFramework/Core/EntityLinker/LUSummary.h
index 372f689a00f4e..0e042f783c501 100644
--- a/clang/include/clang/ScalableStaticAnalysisFramework/Core/EntityLinker/LUSummary.h
+++ b/clang/include/clang/ScalableStaticAnalysisFramework/Core/EntityLinker/LUSummary.h
@@ -20,6 +20,7 @@
 #include "clang/ScalableStaticAnalysisFramework/Core/Model/EntityLinkage.h"
 #include "clang/ScalableStaticAnalysisFramework/Core/Model/SummaryName.h"
 #include "clang/ScalableStaticAnalysisFramework/Core/TUSummary/EntitySummary.h"
+#include "llvm/TargetParser/Triple.h"
 #include <map>
 #include <memory>
 
@@ -36,6 +37,9 @@ class LUSummary {
   friend class SerializationFormat;
   friend class TestFixture;
 
+  /// Target triple of the link unit.
+  llvm::Triple TargetTriple;
+
   NestedBuildNamespace LUNamespace;
 
   EntityIdTable IdTable;
@@ -46,8 +50,9 @@ class LUSummary {
       Data;
 
 public:
-  explicit LUSummary(NestedBuildNamespace LUNamespace)
-      : LUNamespace(std::move(LUNamespace)) {}
+  LUSummary(llvm::Triple TargetTriple, NestedBuildNamespace LUNamespace)
+      : TargetTriple(std::move(TargetTriple)),
+        LUNamespace(std::move(LUNamespace)) {}
 
   const NestedBuildNamespace &getNamespace() const { return LUNamespace; }
 };
diff --git a/clang/include/clang/ScalableStaticAnalysisFramework/Core/EntityLinker/LUSummaryEncoding.h b/clang/include/clang/ScalableStaticAnalysisFramework/Core/EntityLinker/LUSummaryEncoding.h
index a4248a4d1e79d..f7fcd903b5c20 100644
--- a/clang/include/clang/ScalableStaticAnalysisFramework/Core/EntityLinker/LUSummaryEncoding.h
+++ b/clang/include/clang/ScalableStaticAnalysisFramework/Core/EntityLinker/LUSummaryEncoding.h
@@ -20,6 +20,7 @@
 #include "clang/ScalableStaticAnalysisFramework/Core/Model/EntityIdTable.h"
 #include "clang/ScalableStaticAnalysisFramework/Core/Model/EntityLinkage.h"
 #include "clang/ScalableStaticAnalysisFramework/Core/Model/SummaryName.h"
+#include "llvm/TargetParser/Triple.h"
 #include <map>
 #include <memory>
 
@@ -35,6 +36,9 @@ class LUSummaryEncoding {
   friend class SerializationFormat;
   friend class TestFixture;
 
+  // Target triple of the link unit.
+  llvm::Triple TargetTriple;
+
   // The namespace identifying this link unit.
   NestedBuildNamespace LUNamespace;
 
@@ -50,8 +54,9 @@ class LUSummaryEncoding {
       Data;
 
 public:
-  explicit LUSummaryEncoding(NestedBuildNamespace LUNamespace)
-      : LUNamespace(std::move(LUNamespace)) {}
+  LUSummaryEncoding(llvm::Triple TargetTriple, NestedBuildNamespace LUNamespace)
+      : TargetTriple(std::move(TargetTriple)),
+        LUNamespace(std::move(LUNamespace)) {}
 };
 
 } // namespace clang::ssaf
diff --git a/clang/include/clang/ScalableStaticAnalysisFramework/Core/EntityLinker/TUSummaryEncoding.h b/clang/include/clang/ScalableStaticAnalysisFramework/Core/EntityLinker/TUSummaryEncoding.h
index 4fcf91d1c0423..5cf3e8283874f 100644
--- a/clang/include/clang/ScalableStaticAnalysisFramework/Core/EntityLinker/TUSummaryEncoding.h
+++ b/clang/include/clang/ScalableStaticAnalysisFramework/Core/EntityLinker/TUSummaryEncoding.h
@@ -20,6 +20,7 @@
 #include "clang/ScalableStaticAnalysisFramework/Core/Model/EntityIdTable.h"
 #include "clang/ScalableStaticAnalysisFramework/Core/Model/EntityLinkage.h"
 #include "clang/ScalableStaticAnalysisFramework/Core/Model/SummaryName.h"
+#include "llvm/TargetParser/Triple.h"
 #include <map>
 #include <memory>
 
@@ -36,6 +37,9 @@ class TUSummaryEncoding {
   friend class SerializationFormat;
   friend class TestFixture;
 
+  // Target triple of the translation unit.
+  llvm::Triple TargetTriple;
+
   // The namespace identifying this translation unit.
   BuildNamespace TUNamespace;
 
@@ -51,8 +55,11 @@ class TUSummaryEncoding {
       Data;
 
 public:
-  explicit TUSummaryEncoding(BuildNamespace TUNamespace)
-      : TUNamespace(std::move(TUNamespace)) {}
+  TUSummaryEncoding(llvm::Triple TargetTriple, BuildNamespace TUNamespace)
+      : TargetTriple(std::move(TargetTriple)),
+        TUNamespace(std::move(TUNamespace)) {}
+
+  const llvm::Triple &getTargetTriple() const { return TargetTriple; }
 };
 
 } // namespace clang::ssaf
diff --git a/clang/include/clang/ScalableStaticAnalysisFramework/Core/Model/PrivateFieldNames.def b/clang/include/clang/ScalableStaticAnalysisFramework/Core/Model/PrivateFieldNames.def
index c8d4b1cecf0ee..44931026ba428 100644
--- a/clang/include/clang/ScalableStaticAnalysisFramework/Core/Model/PrivateFieldNames.def
+++ b/clang/include/clang/ScalableStaticAnalysisFramework/Core/Model/PrivateFieldNames.def
@@ -25,19 +25,23 @@ FIELD(EntityLinkage, Linkage)
 FIELD(EntityName, Namespace)
 FIELD(EntityName, Suffix)
 FIELD(EntityName, USR)
+FIELD(LUSummary, TargetTriple)
 FIELD(LUSummary, Data)
 FIELD(LUSummary, IdTable)
 FIELD(LUSummary, LinkageTable)
 FIELD(LUSummary, LUNamespace)
+FIELD(LUSummaryEncoding, TargetTriple)
 FIELD(LUSummaryEncoding, Data)
 FIELD(LUSummaryEncoding, IdTable)
 FIELD(LUSummaryEncoding, LinkageTable)
 FIELD(LUSummaryEncoding, LUNamespace)
 FIELD(NestedBuildNamespace, Namespaces)
+FIELD(TUSummary, TargetTriple)
 FIELD(TUSummary, Data)
 FIELD(TUSummary, IdTable)
 FIELD(TUSummary, LinkageTable)
 FIELD(TUSummary, TUNamespace)
+FIELD(TUSummaryEncoding, TargetTriple)
 FIELD(TUSummaryEncoding, Data)
 FIELD(TUSummaryEncoding, IdTable)
 FIELD(TUSummaryEncoding, LinkageTable)
diff --git a/clang/include/clang/ScalableStaticAnalysisFramework/Core/TUSummary/TUSummary.h b/clang/include/clang/ScalableStaticAnalysisFramework/Core/TUSummary/TUSummary.h
index 1609e68257d57..c5cadce439ba9 100644
--- a/clang/include/clang/ScalableStaticAnalysisFramework/Core/TUSummary/TUSummary.h
+++ b/clang/include/clang/ScalableStaticAnalysisFramework/Core/TUSummary/TUSummary.h
@@ -15,6 +15,7 @@
 #include "clang/ScalableStaticAnalysisFramework/Core/Model/EntityLinkage.h"
 #include "clang/ScalableStaticAnalysisFramework/Core/Model/SummaryName.h"
 #include "clang/ScalableStaticAnalysisFramework/Core/TUSummary/EntitySummary.h"
+#include "llvm/TargetParser/Triple.h"
 #include <map>
 #include <memory>
 
@@ -22,6 +23,9 @@ namespace clang::ssaf {
 
 /// Data extracted for a given translation unit and for a given set of analyses.
 class TUSummary {
+  /// Target triple of the translation unit.
+  llvm::Triple TargetTriple;
+
   /// Identifies the translation unit.
   BuildNamespace TUNamespace;
 
@@ -33,8 +37,9 @@ class TUSummary {
       Data;
 
 public:
-  explicit TUSummary(BuildNamespace TUNamespace)
-      : TUNamespace(std::move(TUNamespace)) {}
+  TUSummary(llvm::Triple TargetTriple, BuildNamespace TUNamespace)
+      : TargetTriple(std::move(TargetTriple)),
+        TUNamespace(std::move(TUNamespace)) {}
 
   friend class SerializationFormat;
   friend class TestFixture;
diff --git a/clang/lib/ScalableStaticAnalysisFramework/Core/Serialization/JSONFormat/JSONFormatImpl.cpp b/clang/lib/ScalableStaticAnalysisFramework/Core/Serialization/JSONFormat/JSONFormatImpl.cpp
index 12a2efe20092f..5bd37ad5113d5 100644
--- a/clang/lib/ScalableStaticAnalysisFramework/Core/Serialization/JSONFormat/JSONFormatImpl.cpp
+++ b/clang/lib/ScalableStaticAnalysisFramework/Core/Serialization/JSONFormat/JSONFormatImpl.cpp
@@ -10,6 +10,7 @@
 
 #include "clang/ScalableStaticAnalysisFramework/Core/Serialization/SerializationFormatRegistry.h"
 #include "llvm/Support/Registry.h"
+#include "llvm/TargetParser/Triple.h"
 
 using namespace clang;
 using namespace ssaf;
@@ -410,6 +411,21 @@ llvm::StringRef entityLinkageTypeToJSON(EntityLinkageType LT) {
   return entityLinkageTypeToString(LT);
 }
 
+//----------------------------------------------------------------------------
+// TargetTriple
+//----------------------------------------------------------------------------
+
+llvm::Error validateNormalizedTargetTriple(llvm::StringRef Triple) {
+  std::string Normalized = llvm::Triple::normalize(Triple);
+  if (Normalized != Triple) {
+    return ErrorBuilder::create(std::errc::invalid_argument,
+                                ErrorMessages::TargetTripleNotNormalized,
+                                Triple, Normalized)
+        .build();
+  }
+  return llvm::Error::success();
+}
+
 //----------------------------------------------------------------------------
 // EntityLinkage
 //----------------------------------------------------------------------------
diff --git a/clang/lib/ScalableStaticAnalysisFramework/Core/Serialization/JSONFormat/JSONFormatImpl.h b/clang/lib/ScalableStaticAnalysisFramework/Core/Serialization/JSONFormat/JSONFormatImpl.h
index 31a605efe90a5..6903b7725c1b0 100644
--- a/clang/lib/ScalableStaticAnalysisFramework/Core/Serialization/JSONFormat/JSONFormatImpl.h
+++ b/clang/lib/ScalableStaticAnalysisFramework/Core/Serialization/JSONFormat/JSONFormatImpl.h
@@ -117,6 +117,9 @@ inline constexpr const char *FailedToReadEntityIdObject =
 inline constexpr const char *FailedToPatchEntityIdNotInTable =
     "failed to patch EntityId: '{0}' not found in entity resolution table";
 
+inline constexpr const char *TargetTripleNotNormalized =
+    "target triple '{0}' is not in normalized form (expected '{1}')";
+
 } // namespace ErrorMessages
 
 //----------------------------------------------------------------------------
@@ -167,6 +170,16 @@ entityLinkageTypeFromJSON(llvm::StringRef EntityLinkageTypeStr);
 // Provided for consistency with respect to rest of the codebase.
 llvm::StringRef entityLinkageTypeToJSON(EntityLinkageType LT);
 
+//----------------------------------------------------------------------------
+// TargetTriple helpers
+//----------------------------------------------------------------------------
+
+/// Validates that \p Triple is a target triple string in normalized form.
+/// Returns success if \p Triple equals \c llvm::Triple::normalize(Triple),
+/// otherwise returns an \c invalid_argument error describing the expected
+/// normalized form.
+llvm::Error validateNormalizedTargetTriple(llvm::StringRef Triple);
+
 } // namespace clang::ssaf
 
 #endif // LLVM_CLANG_LIB_SCALABLESTATICANALYSISFRAMEWORK_CORE_SERIALIZATION_JSONFORMAT_JSONFORMATIMPL_H
diff --git a/clang/lib/ScalableStaticAnalysisFramework/Core/Serialization/JSONFormat/LUSummary.cpp b/clang/lib/ScalableStaticAnalysisFramework/Core/Serialization/JSONFormat/LUSummary.cpp
index 1137499ba28c9..369334342790a 100644
--- a/clang/lib/ScalableStaticAnalysisFramework/Core/Serialization/JSONFormat/LUSummary.cpp
+++ b/clang/lib/ScalableStaticAnalysisFramework/Core/Serialization/JSONFormat/LUSummary.cpp
@@ -9,6 +9,7 @@
 #include "JSONFormatImpl.h"
 
 #include "clang/ScalableStaticAnalysisFramework/Core/EntityLinker/LUSummary.h"
+#include "llvm/TargetParser/Triple.h"
 
 #include <set>
 
@@ -37,6 +38,25 @@ llvm::Expected<LUSummary> JSONFormat::readLUSummary(llvm::StringRef Path) {
 
   const Object &RootObject = *RootObjectPtr;
 
+  auto OptTargetTriple = RootObject.getString("target_triple");
+  if (!OptTargetTriple) {
+    return ErrorBuilder::create(std::errc::invalid_argument,
+                                ErrorMessages::FailedToReadObjectAtField,
+                                "TargetTriple", "target_triple", "string")
+        .context(ErrorMessages::ReadingFromFile, "LUSummary", Path)
+        .build();
+  }
+
+  if (auto Err = validateNormalizedTargetTriple(*OptTargetTriple)) {
+    return ErrorBuilder::wrap(std::move(Err))
+        .context(ErrorMessages::ReadingFromField, "TargetTriple",
+                 "target_triple")
+        .context(ErrorMessages::ReadingFromFile, "LUSummary", Path)
+        .build();
+  }
+
+  llvm::Triple T(*OptTargetTriple);
+
   const Array *LUNamespaceArray = RootObject.getArray("lu_namespace");
   if (!LUNamespaceArray) {
     return ErrorBuilder::create(std::errc::invalid_argument,
@@ -55,7 +75,7 @@ llvm::Expected<LUSummary> JSONFormat::readLUSummary(llvm::StringRef Path) {
         .build();
   }
 
-  LUSummary Summary(std::move(*ExpectedLUNamespace));
+  LUSummary Summary(std::move(T), std::move(*ExpectedLUNamespace));
 
   {
     const Array *IdTableArray = RootObject.getArray("id_table");
@@ -138,6 +158,9 @@ llvm::Error JSONFormat::writeLUSummary(const LUSummary &S,
                                        llvm::StringRef Path) {
   Object RootObject;
 
+  RootObject["target_triple"] =
+      llvm::Triple::normalize(getTargetTriple(S).str());
+
   RootObject["lu_namespace"] = nestedBuildNamespaceToJSON(getLUNamespace(S));
 
   RootObject["id_table"] = luEntityIdTableToJSON(getIdTable(S));
diff --git a/clang/lib/ScalableStaticAnalysisFramework/Core/Serialization/JSONFormat/LUSummaryEncoding.cpp b/clang/lib/ScalableStaticAnalysisFramework/Core/Serialization/JSONFormat/LUSummaryEncoding.cpp
index e748b021d1666..9cd458e8ab09e 100644
--- a/clang/lib/ScalableStaticAnalysisFramework/Core/Serialization/JSONFormat/LUSummaryEncoding.cpp
+++ b/clang/lib/ScalableStaticAnalysisFramework/Core/Serialization/JSONFormat/LUSummaryEncoding.cpp
@@ -9,6 +9,7 @@
 #include "JSONFormatImpl.h"
 
 #include "clang/ScalableStaticAnalysisFramework/Core/EntityLinker/LUSummaryEncoding.h"
+#include "llvm/TargetParser/Triple.h"
 
 #include <set>
 
@@ -38,6 +39,25 @@ JSONFormat::readLUSummaryEncoding(llvm::StringRef Path) {
 
   const Object &RootObject = *RootObjectPtr;
 
+  auto OptTargetTriple = RootObject.getString("target_triple");
+  if (!OptTargetTriple) {
+    return ErrorBuilder::create(std::errc::invalid_argument,
+                                ErrorMessages::FailedToReadObjectAtField,
+                                "TargetTriple", "target_triple", "string")
+        .context(ErrorMessages::ReadingFromFile, "LUSummary", Path)
+        .build();
+  }
+
+  if (auto Err = validateNormalizedTargetTriple(*OptTargetTriple)) {
+    return ErrorBuilder::wrap(std::move(Err))
+        .context(ErrorMessages::ReadingFromField, "TargetTriple",
+                 "target_triple")
+        .context(ErrorMessages::ReadingFromFile, "LUSummary", Path)
+        .build();
+  }
+
+  llvm::Triple T(*OptTargetTriple);
+
   const Array *LUNamespaceArray = RootObject.getArray("lu_namespace");
   if (!LUNamespaceArray) {
     return ErrorBuilder::create(std::errc::invalid_argument,
@@ -56,7 +76,7 @@ JSONFormat::readLUSummaryEncoding(llvm::StringRef Path) {
         .build();
   }
 
-  LUSummaryEncoding Encoding(std::move(*ExpectedLUNamespace));
+  LUSummaryEncoding Encoding(std::move(T), std::move(*ExpectedLUNamespace));
 
   {
     const Array *IdTableArray = RootObject.getArray("id_table");
@@ -140,6 +160,9 @@ JSONFormat::writeLUSummaryEncoding(const LUSummaryEncoding &SummaryEncoding,
                                    llvm::StringRef Path) {
   Object RootObject;
 
+  RootObject["target_triple"] =
+      llvm::Triple::normalize(getTargetTriple(SummaryEncoding).str());
+
   RootObject["lu_namespace"] =
       nestedBuildNamespaceToJSON(getLUNamespace(SummaryEncoding));
 
diff --git a/clang/lib/ScalableStaticAnalysisFramework/Core/Serialization/JSONFormat/TUSummary.cpp b/clang/lib/ScalableStaticAnalysisFramework/Core/Serialization/JSONFormat/TUSummary.cpp
index cc9460e956e7a..67b1dd4637689 100644
--- a/clang/lib/ScalableStaticAnalysisFramework/Core/Serialization/JSONFormat/TUSummary.cpp
+++ b/clang/lib/ScalableStaticAnalysisFramework/Core/Serialization/JSONFormat/TUSummary.cpp
@@ -9,6 +9,7 @@
 #include "JSONFormatImpl.h"
 
 #include "clang/ScalableStaticAnalysisFramework/Core/TUSummary/TUSummary.h"
+#include "llvm/TargetParser/Triple.h"
 
 #include <set>
 
@@ -37,6 +38,25 @@ llvm::Expected<TUSummary> JSONFormat::readTUSummary(llvm::StringRef Path) {
 
   const Object &RootObject = *RootObjectPtr;
 
+  auto OptTargetTriple = RootObject.getString("target_triple");
+  if (!OptTargetTriple) {
+    return ErrorBuilder::create(std::errc::invalid_argument,
+                                ErrorMessages::FailedToReadObjectAtField,
+                                "TargetTriple", "target_triple", "string")
+        .context(ErrorMessages::ReadingFromFile, "TUSummary", Path)
+        .build();
+  }
+
+  if (auto Err = validateNormalizedTargetTriple(*OptTargetTriple)) {
+    return ErrorBuilder::wrap(std::move(Err))
+        .context(ErrorMessages::ReadingFromField, "TargetTriple",
+                 "target_triple")
+        .context(ErrorMessages::ReadingFromFile, "TUSummary", Path)
+        .build();
+  }
+
+  llvm::Triple T(*OptTargetTriple);
+
   const Object *TUNamespaceObject = RootObject.getObject("tu_namespace");
   if (!TUNamespaceObject) {
     return ErrorBuilder::create(std::errc::invalid_argument,
@@ -55,7 +75,7 @@ llvm::Expected<TUSummary> JSONFormat::readTUSummary(llvm::StringRef Path) {
         .build();
   }
 
-  TUSummary Summary(std::move(*ExpectedTUNamespace));
+  TUSummary Summary(std::move(T), std::move(*ExpectedTUNamespace));
 
   {
     const Array *IdTableArray = RootObject.getArray("id_table");
@@ -138,6 +158,9 @@ llvm::Error JSONFormat::writeTUSummary(const TUSummary &S,
                                        llvm::StringRef Path) {
   Object RootObject;
 
+  RootObject["target_triple"] =
+      llvm::Triple::normalize(getTargetTriple(S).str());
+
   RootObject["tu_namespace"] = buildNamespaceToJSON(getTUNamespace(S));
 
   RootObject["id_table"] = tuEntityIdTableToJSON(getIdTable(S));
diff --git a/clang/lib/ScalableStaticAnalysisFramework/Core/Serialization/JSONFormat/TUSummaryEncoding.cpp b/clang/lib/ScalableStaticAnalysisFramework/Core/Serialization/JSONFormat/TUSummaryEncoding.cpp
index b16d70b6b0416..b4ebac02703ba 100644
--- a/clang/lib/ScalableStaticAnalysisFramework/Core/Serialization/JSONFormat/TUSummaryEncoding.cpp
+++ b/clang/lib/ScalableStaticAnalysisFramework/Core/Serialization/JSONFormat/TUSummaryEncoding.cpp
@@ -9,6 +9,7 @@
 #include "JSONFormatImpl.h"
 
 #include "clang/ScalableStaticAnalysisFramework/Core/EntityLinker/TUSummaryEncoding.h"
+#include "llvm/TargetParser/Triple.h"
 
 #include <set>
 
@@ -38,6 +39,25 @@ JSONFormat::readTUSummaryEncoding(llvm::StringRef Path) {
 
   const Object &RootObject = *RootObjectPtr;
 
+  auto OptTargetTriple = RootObject.getString("target_triple");
+  if (!OptTargetTriple) {
+    return ErrorBuilder::create(std::errc::invalid_argument,
+                                ErrorMessages::FailedToReadObjectAtField,
+                                "TargetTriple", "target_triple", "string")
+        .context(ErrorMessages::ReadingFromFile, "TUSummary", Path)
+        .build();
+  }
+
+  if (auto Err = validateNormalizedTargetTriple(*OptTargetTriple)) {
+    return ErrorBuilder::wrap(std::move(Err))
+        .context(ErrorMessages::ReadingFromField, "TargetTriple",
+                 "target_triple")
+        .context(ErrorMessages::ReadingFromFile, "TUSummary", Path)
+        .build();
+  }
+
+  llvm::Triple T(*OptTargetTriple);
+
   const Object *TUNamespaceObject = RootObject.getObject("tu_namespace");
   if (!TUNamespaceObject) {
     return ErrorBuilder::create(std::errc::invalid_argument,
@@ -56,7 +76,7 @@ JSONFormat::readTUSummaryEncoding(llvm::StringRef Path) {
         .build();
   }
 
-  TUSummaryEncoding Encoding(std::move(*ExpectedTUNamespace));
+  TUSummaryEncoding Encoding(std::move(T), std::move(*ExpectedTUNamespace));
 
   {
     const Array *IdTableArray = RootObject.getArray("id_table");
@@ -140,6 +160,9 @@ JSONFormat::writeTUSummaryEncoding(const TUSummaryEncoding &SummaryEncoding,
                                    llvm::StringRef Path) {
   Object RootObject;
 
+  RootObject["target_triple"] =
+      llvm::Triple::normalize(getTargetTriple(SummaryEncoding).str());
+
   RootObject["tu_namespace"] =
       buildNamespaceToJSON(getTUNamespace(SummaryEncoding));
 
diff --git a/clang/lib/ScalableStaticAnalysisFramework/Frontend/TUSummaryExtractorFrontendAction.cpp b/clang/lib/ScalableStaticAnalysisFramework/Frontend/TUSummaryExtractorFrontendAction.cpp
index 65b9a49e3bc0a..fe900f383ae31 100644
--- a/clang/lib/ScalableStaticAnalysisFramework/Frontend/TUSummaryExtractorFrontendAction.cpp
+++ b/clang/lib/ScalableStaticAnalysisFramework/Frontend/TUSummaryExtractorFrontendAction.cpp
@@ -9,6 +9,7 @@
 #include "clang/ScalableStaticAnalysisFramework/Frontend/TUSummaryExtractorFrontendAction.h"
 #include "clang/AST/ASTConsumer.h"
 #include "clang/Basic/DiagnosticFrontend.h"
+#include "clang/Basic/TargetInfo.h"
 #include "clang/Frontend/MultiplexConsumer.h"
 #include "clang/ScalableStaticAnalysisFramework/Core/Serialization/SerializationFormatRegistry.h"
 #include "clang/ScalableStaticAnalysisFramework/Core/TUSummary/ExtractorRegistry.h"
@@ -19,6 +20,7 @@
 #include "llvm/ADT/StringRef.h"
 #include "llvm/Support/IOSandbox.h"
 #include "llvm/Support/Path.h"
+#include "llvm/TargetParser/Triple.h"
 #include <memory>
 #include <string>
 #include <vector>
@@ -96,7 +98,8 @@ class TUSummaryRunner final : public MultiplexConsumer {
   static std::unique_ptr<TUSummaryRunner> create(CompilerInstance &CI);
 
 private:
-  TUSummaryRunner(std::unique_ptr<SerializationFormat> Format,
+  TUSummaryRunner(llvm::Triple TargetTriple,
+                  std::unique_ptr<SerializationFormat> Format,
                   const FrontendOptions &Opts);
 
   void HandleTranslationUnit(ASTContext &Ctx) override;
@@ -126,14 +129,16 @@ std::unique_ptr<TUSummaryRunner> TUSummaryRunner::create(CompilerInstance &CI) {
   if (reportUnrecognizedExtractorNames(Diags, Opts.SSAFExtractSummaries))
     return nullptr;
 
-  return std::unique_ptr<TUSummaryRunner>{
-      new TUSummaryRunner{makeFormat(FormatName), Opts}};
+  return std::unique_ptr<TUSummaryRunner>{new TUSummaryRunner{
+      CI.getTarget().getTriple(), makeFormat(FormatName), Opts}};
 }
 
-TUSummaryRunner::TUSummaryRunner(std::unique_ptr<SerializationFormat> Format,
+TUSummaryRunner::TUSummaryRunner(llvm::Triple TargetTriple,
+                                 std::unique_ptr<SerializationFormat> Format,
                                  const FrontendOptions &Opts)
     : MultiplexConsumer(std::vector<std::unique_ptr<ASTConsumer>>{}),
-      Summary(BuildNamespace(BuildNamespaceKind::CompilationUnit,
+      Summary(std::move(TargetTriple),
+              BuildNamespace(BuildNamespaceKind::CompilationUnit,
                              Opts.SSAFCompilationUnitId)),
       Format(std::move(Format)), Opts(Opts) {
   assert(this->Format);
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 3848bd68ac0fb..3e7424018cb82 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
@@ -84,5 +84,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 77c02313b6add..f84843491c743 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
@@ -61,5 +61,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 e950edbfa1f3c..33cc2462333f1 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
@@ -90,5 +90,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 4347b5851c8ff..86d412c521fcf 100644
--- a/clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary.json
+++ b/clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary.json
@@ -84,6 +84,7 @@
       }
     }
   ],
+  "target_triple": "arm64-apple-macosx",
   "tu_namespace": {
     "kind": "CompilationUnit",
     "name": "Mock.cpp"
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 e54c8e6f7e64e..dbad76015b28b 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
@@ -47,5 +47,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 b29f54cd1bf8c..85522f074fa05 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
@@ -52,5 +52,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 cda3bb3b51d39..f08db537807eb 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
@@ -52,5 +52,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 ebd3709de9da7..c50a22faf5bf8 100644
--- a/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary.json
+++ b/clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary.json
@@ -98,6 +98,7 @@
       }
     }
   ],
+  "target_triple": "arm64-apple-macosx",
   "tu_namespace": {
     "kind": "CompilationUnit",
     "name": "Mock.cpp"
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 c562a25f3c55d..5a4a6205efab7 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
@@ -40,5 +40,6 @@
       "kind": "LinkUnit",
       "name": "test.exe"
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
diff --git a/clang/test/Analysis/Scalable/ssaf-analyzer/Inputs/lu.json b/clang/test/Analysis/Scalable/ssaf-analyzer/Inputs/lu.json
index 9c30fefc55dd5..86b2e5184588c 100644
--- a/clang/test/Analysis/Scalable/ssaf-analyzer/Inputs/lu.json
+++ b/clang/test/Analysis/Scalable/ssaf-analyzer/Inputs/lu.json
@@ -122,5 +122,6 @@
       "kind": "LinkUnit",
       "name": "test.exe"
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 ce38d26ecb3f0..a644df1ca8bfe 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
@@ -36,5 +36,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 58a01b9a46b99..209ae4a9179ab 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
@@ -38,5 +38,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 138818090ddfa..7caf5142b627a 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
@@ -38,5 +38,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 f542872978a22..d7f23575d1761 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
@@ -35,5 +35,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 73aa096fb144b..0cdab50c2c94e 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
@@ -37,5 +37,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 97922cf5b958c..cb0bc5da020dd 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
@@ -34,5 +34,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 a907513488a8a..8cb06de4ab32c 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
@@ -32,5 +32,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 25dce11f94769..4bc14754457be 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
@@ -30,5 +30,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 0645b7f33d49c..60732ea628acc 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
@@ -33,5 +33,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 86d3ef89ffe8f..75d44b793a7e7 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
@@ -9,5 +9,6 @@
   "linkage_table": [],
   "data": [
     "invalid"
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 3374f3c31157f..5cd6cf276e9b8 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
@@ -11,5 +11,6 @@
     {
       "summary_name": "PairsEntitySummary"
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 fe9b2c46d4c8f..78b5860527310 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
@@ -11,5 +11,6 @@
     {
       "summary_data": []
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 9b53c28a16988..bd7ec6b5c692f 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
@@ -7,5 +7,6 @@
   ],
   "id_table": [],
   "linkage_table": [],
-  "data": {}
+  "data": {},
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 8a59b795a965b..72dbc7653dce4 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
@@ -50,5 +50,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 3330d039515e2..3866aa96530a4 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
@@ -55,5 +55,6 @@
       }
     }
   ],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 9b223799cfcde..208ec9fae45c3 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
@@ -16,5 +16,6 @@
       "summary_name": "PairsEntitySummary",
       "summary_data": []
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 03dc6925a3679..33f3dd29d4eef 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
@@ -14,5 +14,6 @@
         "invalid"
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 d312667f7b7e0..74aebdfef6a01 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
@@ -16,5 +16,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 a230bf12d35b6..169d57a05bcf6 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
@@ -16,5 +16,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 efb7db6a7b8d6..f31489f30385d 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
@@ -17,5 +17,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 a04603f75e003..ad6cddb741090 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
@@ -22,5 +22,6 @@
       }
     }
   ],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 30adfac73018b..41126fa4d9247 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
@@ -27,5 +27,6 @@
       }
     }
   ],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 2f36b9095cb45..b46d6d2742271 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
@@ -31,5 +31,6 @@
       }
     }
   ],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 b7860f1bcc7be..94c9de273a8d9 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
@@ -9,5 +9,6 @@
     "invalid"
   ],
   "linkage_table": [],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 dec95270705bc..729c2aa051148 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
@@ -25,5 +25,6 @@
     }
   ],
   "linkage_table": [],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 4ec9f8d13a921..d3b16784657fb 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
@@ -24,5 +24,6 @@
     }
   ],
   "linkage_table": [],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 4a7ff4a3f8b30..3cb574f405837 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
@@ -11,5 +11,6 @@
     }
   ],
   "linkage_table": [],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 6d807d558b0ad..080e151b7a96d 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
@@ -7,5 +7,6 @@
   ],
   "id_table": {},
   "linkage_table": [],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 a70f7e8ba8207..cecfba5a49ff4 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
@@ -38,5 +38,6 @@
       }
     }
   ],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 4a5116d64fe7c..f0aefb3e9683c 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
@@ -9,5 +9,6 @@
   "linkage_table": [
     "invalid"
   ],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 1fa2adc4972bd..036f7de66a415 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
@@ -14,5 +14,6 @@
       }
     }
   ],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 e76368984868e..407572bc5b572 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
@@ -14,5 +14,6 @@
       }
     }
   ],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 7926d1a869537..7961ef2a2e630 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
@@ -12,5 +12,6 @@
       "linkage": {}
     }
   ],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 e56473d19a15b..7fa7f469f2385 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
@@ -13,5 +13,6 @@
       }
     }
   ],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 e0c88f14ce2e0..9b2b9458506d8 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
@@ -11,5 +11,6 @@
       "id": 0
     }
   ],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 df8800eeaf815..c0ab2322f6ba4 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
@@ -14,5 +14,6 @@
       }
     }
   ],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 dafc9ada14147..2f47753afb1d2 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
@@ -25,5 +25,6 @@
     }
   ],
   "linkage_table": [],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 c693b839d5750..11ddd41feb3ec 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
@@ -7,5 +7,6 @@
   ],
   "id_table": [],
   "linkage_table": {},
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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
index b1dd046962892..25819336f165c 100644
--- 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
@@ -7,5 +7,6 @@
   ],
   "id_table": [],
   "linkage_table": [],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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
index 50631a045c0c9..61adde1614a5d 100644
--- 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
@@ -6,5 +6,6 @@
   ],
   "id_table": [],
   "linkage_table": [],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 855b771ae594d..f1b69104429c9 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
@@ -6,5 +6,6 @@
   ],
   "id_table": [],
   "linkage_table": [],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
\ No newline at end of file
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
index b515fb62ac8c4..96adf4830c753 100644
--- 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
@@ -4,5 +4,6 @@
   ],
   "id_table": [],
   "linkage_table": [],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
\ No newline at end of file
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 66719784515c2..f357bb793ca2e 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
@@ -5,5 +5,6 @@
   },
   "id_table": [],
   "linkage_table": [],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
\ No newline at end of file
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 5bf3fcc3528fb..2016767c7905f 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
@@ -6,5 +6,6 @@
     }
   ],
   "id_table": [],
-  "linkage_table": []
+  "linkage_table": [],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 ed3e9267849f1..dbd255a71a17a 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
@@ -5,5 +5,6 @@
       "name": "test.exe"
     }
   ],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 774b5df9c6163..3b5f4308136ca 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
@@ -6,5 +6,6 @@
     }
   ],
   "id_table": [],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
\ No newline at end of file
diff --git a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-lu-namespace.json b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-lu-namespace.json
index 646de61fb1550..ed207878fae11 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-lu-namespace.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-lu-namespace.json
@@ -1,5 +1,6 @@
 {
+  "target_triple": "arm64-apple-macosx",
   "id_table": [],
   "linkage_table": [],
   "data": []
-}
\ 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
new file mode 100644
index 0000000000000..55ed383c14f17
--- /dev/null
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-target-triple.json
@@ -0,0 +1,11 @@
+{
+  "data": [],
+  "id_table": [],
+  "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
index 5ccec8e79e461..b1b6af46d6d8e 100644
--- 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
@@ -28,5 +28,6 @@
       }
     }
   ],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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
index e5f9c39fc4a10..cbcce067df087 100644
--- 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
@@ -27,5 +27,6 @@
       }
     }
   ],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 a80cca7c12626..f3da73e38ba19 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
@@ -27,5 +27,6 @@
       }
     }
   ],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 9ff091337d04f..a0bfe0fde0756 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
@@ -25,5 +25,6 @@
       }
     }
   ],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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
new file mode 100644
index 0000000000000..fc936aaf17d97
--- /dev/null
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/not-normalized-target-triple.json
@@ -0,0 +1,12 @@
+{
+  "data": [],
+  "id_table": [],
+  "linkage_table": [],
+  "lu_namespace": [
+    {
+      "kind": "LinkUnit",
+      "name": "test.exe"
+    }
+  ],
+  "target_triple": "arm64-macosx-apple"
+}
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 cccfd58b39470..1679bd0c68f5d 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
@@ -21,5 +21,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 5b17d9a2bdb63..74fcc325a8a49 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
@@ -26,5 +26,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 ea02adf5cec9c..3be0b80ab524a 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
@@ -19,5 +19,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 fae104bb55c90..95250febb3484 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
@@ -26,5 +26,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 ed31f9727cdbf..29c7879072929 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
@@ -25,5 +25,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 d9c2c1c8246d4..f8ce6042ef6a5 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
@@ -17,5 +17,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 048f2c812ef78..702e5ee462559 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
@@ -25,5 +25,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 65fbdeb079b77..fed0e1d3d8aec 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
@@ -17,5 +17,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
\ 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 015f265924f2a..38d7adb40274f 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
@@ -12,5 +12,6 @@
       "kind": "CompilationUnit",
       "name": "test.cpp"
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 a31f370ee0fad..fc8c51a7aab2c 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
@@ -7,5 +7,6 @@
       "kind": "CompilationUnit",
       "name": "test.cpp"
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 7dbfd924c701e..3dfe3e5b381e3 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
@@ -28,5 +28,6 @@
       "kind": "CompilationUnit",
       "name": "test.cpp"
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 638b77e2c1e3f..7ffee94d21260 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
@@ -28,5 +28,6 @@
       "kind": "CompilationUnit",
       "name": "test.cpp"
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 51b59f0458923..ce04c675b7ae7 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
@@ -66,5 +66,6 @@
       "kind": "CompilationUnit",
       "name": "test.cpp"
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 2d2e9bf20edab..01cbc41054308 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
@@ -28,5 +28,6 @@
       "kind": "CompilationUnit",
       "name": "test.cpp"
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 86b0ad87e4528..b5640fd54e7b6 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
@@ -15,5 +15,6 @@
       "kind": "LinkUnit",
       "name": "libtest.so"
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 a31f370ee0fad..fc8c51a7aab2c 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
@@ -7,5 +7,6 @@
       "kind": "CompilationUnit",
       "name": "test.cpp"
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 f83708321f0f8..37ab9db4cb078 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
@@ -236,5 +236,6 @@
       "kind": "CompilationUnit",
       "name": "test.cpp"
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 0acd11e682905..da6087c0d6955 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/LUSummary/top-level.test
+++ b/clang/test/Analysis/Scalable/ssaf-format/LUSummary/top-level.test
@@ -82,3 +82,18 @@
 // RUN:   | FileCheck %s --match-full-lines --check-prefix=MISSING-DATA
 // MISSING-DATA:      clang-ssaf-format: error: reading LUSummary from file '{{.*}}missing-data.json'
 // MISSING-DATA-NEXT: failed to read SummaryData entries from field 'data': expected JSON array
+
+// RUN: not clang-ssaf-format --type lu %S/Inputs/missing-target-triple.json 2>&1 \
+// RUN:   | FileCheck %s --match-full-lines --check-prefix=MISSING-TARGET-TRIPLE
+// RUN: not clang-ssaf-format --type lu --encoding %S/Inputs/missing-target-triple.json 2>&1 \
+// RUN:   | FileCheck %s --match-full-lines --check-prefix=MISSING-TARGET-TRIPLE
+// MISSING-TARGET-TRIPLE:      clang-ssaf-format: error: reading LUSummary from file '{{.*}}missing-target-triple.json'
+// MISSING-TARGET-TRIPLE-NEXT: failed to read TargetTriple from field 'target_triple': expected JSON string
+
+// RUN: not clang-ssaf-format --type lu %S/Inputs/not-normalized-target-triple.json 2>&1 \
+// RUN:   | FileCheck %s --match-full-lines --check-prefix=NOT-NORMALIZED-TARGET-TRIPLE
+// RUN: not clang-ssaf-format --type lu --encoding %S/Inputs/not-normalized-target-triple.json 2>&1 \
+// RUN:   | FileCheck %s --match-full-lines --check-prefix=NOT-NORMALIZED-TARGET-TRIPLE
+// NOT-NORMALIZED-TARGET-TRIPLE:      clang-ssaf-format: error: reading LUSummary from file '{{.*}}not-normalized-target-triple.json'
+// NOT-NORMALIZED-TARGET-TRIPLE-NEXT: reading TargetTriple from field 'target_triple'
+// NOT-NORMALIZED-TARGET-TRIPLE-NEXT: target triple 'arm64-macosx-apple' is not in normalized form (expected 'arm64-apple-macosx')
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 c96c7156c5494..6891a4cf9d2c7 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
@@ -5,5 +5,6 @@
   },
   "id_table": [],
   "linkage_table": [],
-  "data": ["invalid"]
+  "data": ["invalid"],
+  "target_triple": "arm64-apple-macosx"
 }
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 3214233104187..d4e46c416adfb 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
@@ -9,5 +9,6 @@
     {
       "summary_name": "PairsEntitySummary"
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 2304f3f90d5ca..666e612cb23e4 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
@@ -9,5 +9,6 @@
     {
       "summary_data": []
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 4a8e3ac953ce6..59885a29bd4de 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
@@ -5,5 +5,6 @@
   },
   "id_table": [],
   "linkage_table": [],
-  "data": {}
+  "data": {},
+  "target_triple": "arm64-apple-macosx"
 }
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 587c019a22ed6..16de981064a5f 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
@@ -38,5 +38,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 dcdb08d31d986..21c7437ab7767 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
@@ -29,5 +29,6 @@
       "linkage": { "type": "External" }
     }
   ],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
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 ec190677f1650..1af809fa8d3fc 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
@@ -14,5 +14,6 @@
       "summary_name": "PairsEntitySummary",
       "summary_data": []
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 7d203771a4baa..41b1780868d2b 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
@@ -10,5 +10,6 @@
       "summary_name": "PairsEntitySummary",
       "summary_data": ["invalid"]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 db708c4ee2fd6..1437b62764f11 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
@@ -14,5 +14,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 3108bce074bed..5d3690a3c4d2d 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
@@ -14,5 +14,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 2cac6f854e2a4..9f5e185269624 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
@@ -15,5 +15,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 c42506de3ef1e..5ce2a000ea4fc 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
@@ -17,5 +17,6 @@
       "linkage": { "type": "External" }
     }
   ],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
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 a9b343aba13b9..57692a0fb6499 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
@@ -17,5 +17,6 @@
       "linkage": { "type": "Internal" }
     }
   ],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
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 56046b99cea11..d3d657acc47d4 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
@@ -5,5 +5,6 @@
   },
   "id_table": [123],
   "linkage_table": [],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
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 8a9242c6ff03c..aede62a4f44d0 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
@@ -13,5 +13,6 @@
     }
   ],
   "linkage_table": [],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
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 9f0f9a7e25fbe..8bab17e3eb1ea 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
@@ -12,5 +12,6 @@
     }
   ],
   "linkage_table": [],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
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 6aa76b6c81c34..dcd650a4acd29 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
@@ -14,5 +14,6 @@
       "linkage": { "type": "None" }
     }
   ],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
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 7bfef9104a8b1..646d45ac19d79 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
@@ -5,5 +5,6 @@
   },
   "id_table": {},
   "linkage_table": [],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
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
index 3dd960cc76ca9..a808fe0851126 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/invalid-kind.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/invalid-kind.json
@@ -5,5 +5,6 @@
   },
   "id_table": [],
   "linkage_table": [],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
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 52e39b229cbac..79b507eac53bc 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
@@ -22,5 +22,6 @@
       "linkage": { "type": "Internal" }
     }
   ],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
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 660a98049add5..554c229a8aac6 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
@@ -5,5 +5,6 @@
   },
   "id_table": [],
   "linkage_table": ["invalid"],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
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 b3668bd39ee29..09ea51fd95c94 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
@@ -10,5 +10,6 @@
       "linkage": { "type": "External" }
     }
   ],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
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 e1cb23b8f5d21..ff9e9a8796f2a 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
@@ -10,5 +10,6 @@
       "linkage": { "type": "invalid_type" }
     }
   ],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
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 1a7f39e93af81..70c706f52c297 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
@@ -10,5 +10,6 @@
       "linkage": {}
     }
   ],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
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 7c3e96cb75cb3..33a5478dba417 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
@@ -9,5 +9,6 @@
       "linkage": { "type": "External" }
     }
   ],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
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 b837fb327d8f4..d29140c33c1cb 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
@@ -9,5 +9,6 @@
       "id": 0
     }
   ],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
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 ea22b8a23cfdb..cd37ea87aac40 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
@@ -10,5 +10,6 @@
       "linkage": { "type": "External" }
     }
   ],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
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 509130ca6e31d..bebf00b85fbf3 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
@@ -13,5 +13,6 @@
     }
   ],
   "linkage_table": [],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
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 11f8239d72d8a..33c339e625349 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
@@ -5,5 +5,6 @@
   },
   "id_table": [],
   "linkage_table": {},
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
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 a872795383a61..90b75c77bfad9 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
@@ -4,5 +4,6 @@
     "name": "test.cpp"
   },
   "id_table": [],
-  "linkage_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 61ce449823c20..2918036a49ce6 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
@@ -3,5 +3,6 @@
     "kind": "CompilationUnit",
     "name": "test.cpp"
   },
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
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
index c78bc51c55863..c34bb94d43068 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-kind.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-kind.json
@@ -4,5 +4,6 @@
   },
   "id_table": [],
   "linkage_table": [],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
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 400a330603a37..657a3e0fb2e3b 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
@@ -4,5 +4,6 @@
     "name": "test.cpp"
   },
   "id_table": [],
-  "data": []
+  "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
index 3e521780ffceb..9b11f57bb6d6e 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
@@ -4,5 +4,6 @@
   },
   "id_table": [],
   "linkage_table": [],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
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
new file mode 100644
index 0000000000000..9c9fd1e54cd34
--- /dev/null
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-target-triple.json
@@ -0,0 +1,9 @@
+{
+  "data": [],
+  "id_table": [],
+  "linkage_table": [],
+  "tu_namespace": {
+    "kind": "CompilationUnit",
+    "name": "test.cpp"
+  }
+}
diff --git a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-tu-namespace.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-tu-namespace.json
index 5f9b7dd71944c..ed207878fae11 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-tu-namespace.json
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-tu-namespace.json
@@ -1,4 +1,5 @@
 {
+  "target_triple": "arm64-apple-macosx",
   "id_table": [],
   "linkage_table": [],
   "data": []
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
new file mode 100644
index 0000000000000..5c860f82185d2
--- /dev/null
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/not-normalized-target-triple.json
@@ -0,0 +1,10 @@
+{
+  "data": [],
+  "id_table": [],
+  "linkage_table": [],
+  "target_triple": "arm64-macosx-apple",
+  "tu_namespace": {
+    "kind": "CompilationUnit",
+    "name": "test.cpp"
+  }
+}
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 e5af7ec227db5..28a1283561741 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
@@ -17,5 +17,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 dfe0ded6832b7..8fbf45488e608 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
@@ -22,5 +22,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 457a9ebe0a4a8..77d445a829efa 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
@@ -17,5 +17,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 546ec248e349d..e44ea77defc04 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
@@ -22,5 +22,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 096385b144088..d2aaee379b58c 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
@@ -21,5 +21,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 3ff28b1458135..6db5f643a5f8c 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
@@ -15,5 +15,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 ffc544ab0e05d..0b07d911125ea 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
@@ -21,5 +21,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 ec4f06978088f..9d3d5d9ac8c41 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
@@ -15,5 +15,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 ecc9c224c4e41..6a40e3ac9b073 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
@@ -7,6 +7,7 @@
   ],
   "id_table": [],
   "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/rt-empty.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-empty.json
index 9c9fd1e54cd34..3e7b173c4d486 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
@@ -2,6 +2,7 @@
   "data": [],
   "id_table": [],
   "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/rt-link-unit.json b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-link-unit.json
index 9c2ebf5e18b9c..736e1c9649be9 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
@@ -2,6 +2,7 @@
   "data": [],
   "id_table": [],
   "linkage_table": [],
+  "target_triple": "arm64-apple-macosx",
   "tu_namespace": {
     "kind": "LinkUnit",
     "name": "libtest.so"
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 91329adbee880..23432edfbaa59 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
@@ -17,6 +17,7 @@
       }
     }
   ],
+  "target_triple": "arm64-apple-macosx",
   "tu_namespace": {
     "kind": "CompilationUnit",
     "name": "test.cpp"
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 c124b17ab19f9..ee893d2aff65f 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
@@ -17,6 +17,7 @@
       }
     }
   ],
+  "target_triple": "arm64-apple-macosx",
   "tu_namespace": {
     "kind": "CompilationUnit",
     "name": "test.cpp"
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 3ab5072ae3dea..21ba39a654782 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
@@ -43,6 +43,7 @@
       }
     }
   ],
+  "target_triple": "arm64-apple-macosx",
   "tu_namespace": {
     "kind": "CompilationUnit",
     "name": "test.cpp"
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 c16825784dadd..8d3a5fc2ca76c 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
@@ -17,6 +17,7 @@
       }
     }
   ],
+  "target_triple": "arm64-apple-macosx",
   "tu_namespace": {
     "kind": "CompilationUnit",
     "name": "test.cpp"
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 30abcc19c1c9b..39c920a74f098 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
@@ -201,6 +201,7 @@
       }
     }
   ],
+  "target_triple": "arm64-apple-macosx",
   "tu_namespace": {
     "kind": "CompilationUnit",
     "name": "test.cpp"
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 489a52b10d2c0..48bdfe6376781 100644
--- a/clang/test/Analysis/Scalable/ssaf-format/TUSummary/top-level.test
+++ b/clang/test/Analysis/Scalable/ssaf-format/TUSummary/top-level.test
@@ -67,3 +67,18 @@
 // RUN:   | FileCheck %s --match-full-lines --check-prefix=MISSING-DATA
 // MISSING-DATA:      clang-ssaf-format: error: reading TUSummary from file '{{.*}}missing-data.json'
 // MISSING-DATA-NEXT: failed to read SummaryData entries from field 'data': expected JSON array
+
+// RUN: not clang-ssaf-format --type tu %S/Inputs/missing-target-triple.json 2>&1 \
+// RUN:   | FileCheck %s --match-full-lines --check-prefix=MISSING-TARGET-TRIPLE
+// RUN: not clang-ssaf-format --type tu --encoding %S/Inputs/missing-target-triple.json 2>&1 \
+// RUN:   | FileCheck %s --match-full-lines --check-prefix=MISSING-TARGET-TRIPLE
+// MISSING-TARGET-TRIPLE:      clang-ssaf-format: error: reading TUSummary from file '{{.*}}missing-target-triple.json'
+// MISSING-TARGET-TRIPLE-NEXT: failed to read TargetTriple from field 'target_triple': expected JSON string
+
+// RUN: not clang-ssaf-format --type tu %S/Inputs/not-normalized-target-triple.json 2>&1 \
+// RUN:   | FileCheck %s --match-full-lines --check-prefix=NOT-NORMALIZED-TARGET-TRIPLE
+// RUN: not clang-ssaf-format --type tu --encoding %S/Inputs/not-normalized-target-triple.json 2>&1 \
+// RUN:   | FileCheck %s --match-full-lines --check-prefix=NOT-NORMALIZED-TARGET-TRIPLE
+// NOT-NORMALIZED-TARGET-TRIPLE:      clang-ssaf-format: error: reading TUSummary from file '{{.*}}not-normalized-target-triple.json'
+// NOT-NORMALIZED-TARGET-TRIPLE-NEXT: reading TargetTriple from field 'target_triple'
+// NOT-NORMALIZED-TARGET-TRIPLE-NEXT: target triple 'arm64-macosx-apple' is not in normalized form (expected 'arm64-apple-macosx')
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 5fdcdd7084078..3b8a3c6fe9c78 100644
--- a/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-1.json
+++ b/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-1.json
@@ -306,5 +306,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 617b528bd1513..bc29dbc27177b 100644
--- a/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-2.json
+++ b/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-2.json
@@ -312,5 +312,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 ec1d262f42653..7e6a69cd53d60 100644
--- a/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-empty.json
+++ b/clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-empty.json
@@ -5,5 +5,6 @@
   },
   "id_table": [],
   "linkage_table": [],
-  "data": []
+  "data": [],
+  "target_triple": "arm64-apple-macosx"
 }
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 e33cd4519eabf..9e58c581216ec 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
@@ -35,5 +35,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 b65cb33c9b84b..1a0f27cf1f5ec 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
@@ -34,5 +34,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 d8b6b8ad8fd15..d28b819ec890f 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
@@ -34,5 +34,6 @@
         }
       ]
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 80256d6fd47a8..fd3b7f27a806d 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
@@ -2,5 +2,6 @@
   "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 568a175730ce6..648d7c361f01c 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
@@ -648,5 +648,6 @@
       "kind": "LinkUnit",
       "name": "lu-1+2"
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 004e5490bba26..a280ef079eb76 100644
--- a/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-1.json
+++ b/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-1.json
@@ -360,5 +360,6 @@
       "kind": "LinkUnit",
       "name": "lu-1"
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 1ed0e7fd38f6c..7d9d67bc171ee 100644
--- a/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-2.json
+++ b/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-2.json
@@ -366,5 +366,6 @@
       "kind": "LinkUnit",
       "name": "lu-2"
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
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 e63b1f0a1337d..4c7f2ff646d14 100644
--- a/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-empty.json
+++ b/clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-empty.json
@@ -7,5 +7,6 @@
       "kind": "LinkUnit",
       "name": "lu-empty"
     }
-  ]
+  ],
+  "target_triple": "arm64-apple-macosx"
 }
diff --git a/clang/tools/clang-ssaf-linker/SSAFLinker.cpp b/clang/tools/clang-ssaf-linker/SSAFLinker.cpp
index 7ee335b2a3990..1a620dedcbd2d 100644
--- a/clang/tools/clang-ssaf-linker/SSAFLinker.cpp
+++ b/clang/tools/clang-ssaf-linker/SSAFLinker.cpp
@@ -122,8 +122,11 @@ LinkerInput validate(llvm::TimerGroup &TG) {
 void link(const LinkerInput &LI, llvm::TimerGroup &TG) {
   info(2, "Constructing linker.");
 
-  EntityLinker EL(NestedBuildNamespace(
-      BuildNamespace(BuildNamespaceKind::LinkUnit, LI.LinkUnitName)));
+  // 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)));
 
   llvm::Timer TRead("read", "Read Summaries", TG);
   llvm::Timer TLink("link", "Link Summaries", TG);
diff --git a/clang/unittests/ScalableStaticAnalysisFramework/Analyses/CallGraph/CallGraphExtractorTest.cpp b/clang/unittests/ScalableStaticAnalysisFramework/Analyses/CallGraph/CallGraphExtractorTest.cpp
index 183fd7155cfba..69db546fbf93d 100644
--- a/clang/unittests/ScalableStaticAnalysisFramework/Analyses/CallGraph/CallGraphExtractorTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysisFramework/Analyses/CallGraph/CallGraphExtractorTest.cpp
@@ -124,6 +124,7 @@ static const SummaryName CallGraphName{CallGraphSummary::Name.str()};
 
 struct CallGraphExtractorTest : ssaf::TestFixture {
   TUSummary Summary{
+      llvm::Triple("arm64-apple-macosx"),
       BuildNamespace(BuildNamespaceKind::CompilationUnit, "Mock.cpp")};
   TUSummaryBuilder Builder = TUSummaryBuilder(Summary);
 
diff --git a/clang/unittests/ScalableStaticAnalysisFramework/Analyses/PointerFlow/PointerFlowTest.cpp b/clang/unittests/ScalableStaticAnalysisFramework/Analyses/PointerFlow/PointerFlowTest.cpp
index 875111aa893ad..ad1a654c5b241 100644
--- a/clang/unittests/ScalableStaticAnalysisFramework/Analyses/PointerFlow/PointerFlowTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysisFramework/Analyses/PointerFlow/PointerFlowTest.cpp
@@ -148,7 +148,8 @@ class PointerFlowTest : public TestFixture {
   std::unique_ptr<ASTUnit> AST;
 
   PointerFlowTest()
-      : TUSum(BuildNamespace(BuildNamespaceKind::CompilationUnit, "Mock.cpp")),
+      : TUSum(llvm::Triple("arm64-apple-macosx"),
+              BuildNamespace(BuildNamespaceKind::CompilationUnit, "Mock.cpp")),
         Builder(TUSum), Extractor(nullptr) {}
 
   template <typename ContributorDecl = NamedDecl,
diff --git a/clang/unittests/ScalableStaticAnalysisFramework/Analyses/PointerFlow/PointerFlowWPATest.cpp b/clang/unittests/ScalableStaticAnalysisFramework/Analyses/PointerFlow/PointerFlowWPATest.cpp
index 0b9778324cbf5..c2b906d715695 100644
--- a/clang/unittests/ScalableStaticAnalysisFramework/Analyses/PointerFlow/PointerFlowWPATest.cpp
+++ b/clang/unittests/ScalableStaticAnalysisFramework/Analyses/PointerFlow/PointerFlowWPATest.cpp
@@ -39,7 +39,8 @@ class PointerFlowWPATest : public TestFixture {
   std::unique_ptr<LUSummary> makeLUSummary() {
     NestedBuildNamespace NS(
         {BuildNamespace(BuildNamespaceKind::LinkUnit, "TestLU")});
-    return std::make_unique<LUSummary>(std::move(NS));
+    return std::make_unique<LUSummary>(llvm::Triple("arm64-apple-macosx"),
+                                       std::move(NS));
   }
 
   EntityId addEntity(LUSummary &LU, llvm::StringRef USR) {
diff --git a/clang/unittests/ScalableStaticAnalysisFramework/Analyses/UnsafeBufferUsage/UnsafeBufferUsageTest.cpp b/clang/unittests/ScalableStaticAnalysisFramework/Analyses/UnsafeBufferUsage/UnsafeBufferUsageTest.cpp
index 4a8fe5a74b58c..a47d802a9f48b 100644
--- a/clang/unittests/ScalableStaticAnalysisFramework/Analyses/UnsafeBufferUsage/UnsafeBufferUsageTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysisFramework/Analyses/UnsafeBufferUsage/UnsafeBufferUsageTest.cpp
@@ -41,7 +41,8 @@ class UnsafeBufferUsageTest : public TestFixture {
   std::unique_ptr<ASTUnit> AST;
 
   UnsafeBufferUsageTest()
-      : TUSum(BuildNamespace(BuildNamespaceKind::CompilationUnit, "Mock.cpp")),
+      : TUSum(llvm::Triple("arm64-apple-macosx"),
+              BuildNamespace(BuildNamespaceKind::CompilationUnit, "Mock.cpp")),
         Builder(TUSum) {}
 
   bool setUpTest(StringRef Code) {
diff --git a/clang/unittests/ScalableStaticAnalysisFramework/Analyses/UnsafeBufferUsage/UnsafeBufferUsageWPATest.cpp b/clang/unittests/ScalableStaticAnalysisFramework/Analyses/UnsafeBufferUsage/UnsafeBufferUsageWPATest.cpp
index 4ac2480b34cd9..80f09f9765fe1 100644
--- a/clang/unittests/ScalableStaticAnalysisFramework/Analyses/UnsafeBufferUsage/UnsafeBufferUsageWPATest.cpp
+++ b/clang/unittests/ScalableStaticAnalysisFramework/Analyses/UnsafeBufferUsage/UnsafeBufferUsageWPATest.cpp
@@ -40,7 +40,8 @@ class UnsafeBufferUsageWPATest : public TestFixture {
   std::unique_ptr<LUSummary> makeLUSummary() {
     NestedBuildNamespace NS(
         {BuildNamespace(BuildNamespaceKind::LinkUnit, "TestLU")});
-    return std::make_unique<LUSummary>(std::move(NS));
+    return std::make_unique<LUSummary>(llvm::Triple("arm64-apple-macosx"),
+                                       std::move(NS));
   }
 
   EntityId addEntity(LUSummary &LU, llvm::StringRef USR) {
diff --git a/clang/unittests/ScalableStaticAnalysisFramework/EntityLinkerTest.cpp b/clang/unittests/ScalableStaticAnalysisFramework/EntityLinkerTest.cpp
index 69312fd2f2b8d..a3759703a48b3 100644
--- a/clang/unittests/ScalableStaticAnalysisFramework/EntityLinkerTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysisFramework/EntityLinkerTest.cpp
@@ -70,9 +70,11 @@ class EntityLinkerTest : public TestFixture {
     MockEntitySummaryEncoding::Index = 0;
   }
 
-  std::unique_ptr<TUSummaryEncoding>
-  createTUSummaryEncoding(BuildNamespaceKind Kind, llvm::StringRef Name) {
-    return std::make_unique<TUSummaryEncoding>(BuildNamespace(Kind, Name));
+  std::unique_ptr<TUSummaryEncoding> createTUSummaryEncoding(
+      BuildNamespaceKind Kind, llvm::StringRef Name,
+      llvm::Triple TargetTriple = llvm::Triple("arm64-apple-macosx")) {
+    return std::make_unique<TUSummaryEncoding>(std::move(TargetTriple),
+                                               BuildNamespace(Kind, Name));
   }
 
   size_t addSummaryData(TUSummaryEncoding &TU, EntityId EId,
@@ -195,7 +197,7 @@ TEST_F(EntityLinkerTest, CreatesEmptyLinker) {
   NestedBuildNamespace LUNamespace(
       {BuildNamespace(BuildNamespaceKind::LinkUnit, "LU")});
 
-  EntityLinker Linker(LUNamespace);
+  EntityLinker Linker(llvm::Triple("arm64-apple-macosx"), LUNamespace);
 
   const auto Output = std::move(Linker).takeOutput();
   EXPECT_EQ(getIdTable(Output).count(), 0u);
@@ -207,7 +209,7 @@ TEST_F(EntityLinkerTest, LinksEmptyTranslationUnit) {
   NestedBuildNamespace LUNamespace(
       {BuildNamespace(BuildNamespaceKind::LinkUnit, "LU")});
 
-  EntityLinker Linker(LUNamespace);
+  EntityLinker Linker(llvm::Triple("arm64-apple-macosx"), LUNamespace);
 
   auto TUEmpty =
       createTUSummaryEncoding(BuildNamespaceKind::CompilationUnit, "TUEmpty");
@@ -224,7 +226,7 @@ TEST_F(EntityLinkerTest, LinksOneTranslationUnit) {
   NestedBuildNamespace LUNamespace(
       {BuildNamespace(BuildNamespaceKind::LinkUnit, "LU")});
 
-  EntityLinker Linker(LUNamespace);
+  EntityLinker Linker(llvm::Triple("arm64-apple-macosx"), LUNamespace);
 
   auto TU = createTUSummaryEncoding(BuildNamespaceKind::CompilationUnit, "TU");
 
@@ -324,7 +326,7 @@ TEST_F(EntityLinkerTest, LinksTwoTranslationUnits) {
   NestedBuildNamespace LUNamespace(
       {BuildNamespace(BuildNamespaceKind::LinkUnit, "LU")});
 
-  EntityLinker Linker(LUNamespace);
+  EntityLinker Linker(llvm::Triple("arm64-apple-macosx"), LUNamespace);
 
   auto TU1 =
       createTUSummaryEncoding(BuildNamespaceKind::CompilationUnit, "TU1");
@@ -618,7 +620,7 @@ TEST_F(EntityLinkerTest, RejectsDuplicateTUSummary) {
   NestedBuildNamespace LUNamespace(
       {BuildNamespace(BuildNamespaceKind::LinkUnit, "LU")});
 
-  EntityLinker Linker(LUNamespace);
+  EntityLinker Linker(llvm::Triple("arm64-apple-macosx"), LUNamespace);
 
   auto TU1 = createTUSummaryEncoding(BuildNamespaceKind::CompilationUnit, "TU");
 
@@ -637,7 +639,8 @@ TEST_F(EntityLinkerTest, RejectsDuplicateTUSummary) {
 TEST_F(EntityLinkerTest, InternalLinkageWithEmptyNamespaceAcrossTUs) {
   constexpr auto LinkUnit = BuildNamespaceKind::LinkUnit;
   constexpr auto CompilationUnit = BuildNamespaceKind::CompilationUnit;
-  EntityLinker Linker(NestedBuildNamespace{BuildNamespace(LinkUnit, "LU")});
+  EntityLinker Linker(llvm::Triple("arm64-apple-macosx"),
+                      NestedBuildNamespace{BuildNamespace(LinkUnit, "LU")});
 
   auto TU1 = createTUSummaryEncoding(CompilationUnit, "TU1");
   addEntity(*TU1, "some_static_inline", InternalLinkage);
diff --git a/clang/unittests/ScalableStaticAnalysisFramework/LUSummaryTest.cpp b/clang/unittests/ScalableStaticAnalysisFramework/LUSummaryTest.cpp
index a35c14b039999..55ae20ce97ca7 100644
--- a/clang/unittests/ScalableStaticAnalysisFramework/LUSummaryTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysisFramework/LUSummaryTest.cpp
@@ -16,7 +16,7 @@ namespace {
 TEST(LUSummaryTest, GetNamespace) {
   BuildNamespace LU(BuildNamespaceKind::LinkUnit, "app");
   NestedBuildNamespace NS(LU);
-  LUSummary Summary(NS);
+  LUSummary Summary(llvm::Triple("arm64-apple-macosx"), NS);
 
   EXPECT_EQ(Summary.getNamespace(), NS);
 }
diff --git a/clang/unittests/ScalableStaticAnalysisFramework/Registries/MockSerializationFormat.cpp b/clang/unittests/ScalableStaticAnalysisFramework/Registries/MockSerializationFormat.cpp
index 3fe6efeaf957a..549b6d0aeded3 100644
--- a/clang/unittests/ScalableStaticAnalysisFramework/Registries/MockSerializationFormat.cpp
+++ b/clang/unittests/ScalableStaticAnalysisFramework/Registries/MockSerializationFormat.cpp
@@ -53,7 +53,7 @@ void MockSerializationFormat::forEachRegisteredAnalysis(
 llvm::Expected<TUSummary>
 MockSerializationFormat::readTUSummary(llvm::StringRef Path) {
   BuildNamespace NS(BuildNamespaceKind::CompilationUnit, "Mock.cpp");
-  TUSummary Summary(NS);
+  TUSummary Summary(llvm::Triple("arm64-apple-macosx"), NS);
 
   auto ManifestFile = llvm::MemoryBuffer::getFile(Path + "/analyses.txt");
   if (!ManifestFile) {
diff --git a/clang/unittests/ScalableStaticAnalysisFramework/Registries/SummaryExtractorRegistryTest.cpp b/clang/unittests/ScalableStaticAnalysisFramework/Registries/SummaryExtractorRegistryTest.cpp
index 10f352c234429..fd6ad83225e10 100644
--- a/clang/unittests/ScalableStaticAnalysisFramework/Registries/SummaryExtractorRegistryTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysisFramework/Registries/SummaryExtractorRegistryTest.cpp
@@ -22,6 +22,7 @@ using namespace ssaf;
 [[nodiscard]]
 static TUSummary makeFakeSummary() {
   return TUSummary(
+      llvm::Triple("arm64-apple-macosx"),
       BuildNamespace(BuildNamespaceKind::CompilationUnit, "Mock.cpp"));
 }
 
diff --git a/clang/unittests/ScalableStaticAnalysisFramework/Serialization/JSONFormatTest/LUSummaryTest.cpp b/clang/unittests/ScalableStaticAnalysisFramework/Serialization/JSONFormatTest/LUSummaryTest.cpp
index b1f2e0f0870f1..76d6f4b01bca1 100644
--- a/clang/unittests/ScalableStaticAnalysisFramework/Serialization/JSONFormatTest/LUSummaryTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysisFramework/Serialization/JSONFormatTest/LUSummaryTest.cpp
@@ -42,7 +42,7 @@ SummaryOps LUSummaryOps{
     [](llvm::StringRef FilePath) -> llvm::Error {
       BuildNamespace BN(BuildNamespaceKind::CompilationUnit, "test.cpp");
       NestedBuildNamespace NBN(std::move(BN));
-      LUSummary S(std::move(NBN));
+      LUSummary S(llvm::Triple("arm64-apple-macosx"), std::move(NBN));
       return JSONFormat().writeLUSummary(S, FilePath);
     },
     [](llvm::StringRef InputFilePath,
@@ -63,7 +63,7 @@ SummaryOps LUSummaryEncodingOps{
     [](llvm::StringRef FilePath) -> llvm::Error {
       BuildNamespace BN(BuildNamespaceKind::CompilationUnit, "test.cpp");
       NestedBuildNamespace NBN(std::move(BN));
-      LUSummaryEncoding E(std::move(NBN));
+      LUSummaryEncoding E(llvm::Triple("arm64-apple-macosx"), std::move(NBN));
       return JSONFormat().writeLUSummaryEncoding(E, FilePath);
     },
     [](llvm::StringRef InputFilePath,
@@ -226,6 +226,7 @@ TEST_F(JSONFormatLUSummaryTest, ReadEntitySummaryMissingData) {
         "name": "test.exe"
       }
     ],
+    "target_triple": "arm64-apple-macosx",
     "id_table": [],
     "linkage_table": [],
     "data": [
@@ -262,6 +263,7 @@ TEST_F(JSONFormatLUSummaryTest, ReadEntitySummaryMismatchedSummaryName) {
         "name": "test.exe"
       }
     ],
+    "target_triple": "arm64-apple-macosx",
     "id_table": [],
     "linkage_table": [],
     "data": [
@@ -300,7 +302,7 @@ TEST_F(JSONFormatLUSummaryTest, ReadEntitySummaryMismatchedSummaryName) {
 TEST_F(JSONFormatLUSummaryTest, WriteEntitySummaryMissingData) {
   NestedBuildNamespace NBN(
       BuildNamespace(BuildNamespaceKind::LinkUnit, "test.exe"));
-  LUSummary Summary(std::move(NBN));
+  LUSummary Summary(llvm::Triple("arm64-apple-macosx"), std::move(NBN));
 
   NestedBuildNamespace Namespace =
       NestedBuildNamespace::makeCompilationUnit("test.cpp");
@@ -319,7 +321,7 @@ TEST_F(JSONFormatLUSummaryTest, WriteEntitySummaryMissingData) {
 TEST_F(JSONFormatLUSummaryTest, WriteEntitySummaryMismatchedSummaryName) {
   NestedBuildNamespace NBN(
       BuildNamespace(BuildNamespaceKind::LinkUnit, "test.exe"));
-  LUSummary Summary(std::move(NBN));
+  LUSummary Summary(llvm::Triple("arm64-apple-macosx"), std::move(NBN));
 
   NestedBuildNamespace Namespace =
       NestedBuildNamespace::makeCompilationUnit("test.cpp");
@@ -417,7 +419,7 @@ TEST_P(LUSummaryTest, WriteStreamOpenFailure) {
 TEST_F(JSONFormatLUSummaryTest, WriteEntitySummaryNoFormatInfo) {
   NestedBuildNamespace NBN(
       BuildNamespace(BuildNamespaceKind::LinkUnit, "test.exe"));
-  LUSummary Summary(std::move(NBN));
+  LUSummary Summary(llvm::Triple("arm64-apple-macosx"), std::move(NBN));
 
   NestedBuildNamespace Namespace =
       NestedBuildNamespace::makeCompilationUnit("test.cpp");
diff --git a/clang/unittests/ScalableStaticAnalysisFramework/Serialization/JSONFormatTest/TUSummaryTest.cpp b/clang/unittests/ScalableStaticAnalysisFramework/Serialization/JSONFormatTest/TUSummaryTest.cpp
index cd78c04cf15e1..d95a3e6d0015e 100644
--- a/clang/unittests/ScalableStaticAnalysisFramework/Serialization/JSONFormatTest/TUSummaryTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysisFramework/Serialization/JSONFormatTest/TUSummaryTest.cpp
@@ -40,7 +40,7 @@ SummaryOps TUSummaryOps{
     },
     [](llvm::StringRef FilePath) -> llvm::Error {
       BuildNamespace BN(BuildNamespaceKind::CompilationUnit, "test.cpp");
-      TUSummary S(std::move(BN));
+      TUSummary S(llvm::Triple("arm64-apple-macosx"), std::move(BN));
       return JSONFormat().writeTUSummary(S, FilePath);
     },
     [](llvm::StringRef InputFilePath,
@@ -60,7 +60,7 @@ SummaryOps TUSummaryEncodingOps{
     },
     [](llvm::StringRef FilePath) -> llvm::Error {
       BuildNamespace BN(BuildNamespaceKind::CompilationUnit, "test.cpp");
-      TUSummaryEncoding E(std::move(BN));
+      TUSummaryEncoding E(llvm::Triple("arm64-apple-macosx"), std::move(BN));
       return JSONFormat().writeTUSummaryEncoding(E, FilePath);
     },
     [](llvm::StringRef InputFilePath,
@@ -219,6 +219,7 @@ TEST_F(JSONFormatTUSummaryTest, ReadEntitySummaryMissingData) {
       "kind": "CompilationUnit",
       "name": "test.cpp"
     },
+    "target_triple": "arm64-apple-macosx",
     "id_table": [],
     "linkage_table": [],
     "data": [
@@ -253,6 +254,7 @@ TEST_F(JSONFormatTUSummaryTest, ReadEntitySummaryMismatchedSummaryName) {
       "kind": "CompilationUnit",
       "name": "test.cpp"
     },
+    "target_triple": "arm64-apple-macosx",
     "id_table": [],
     "linkage_table": [],
     "data": [
@@ -292,6 +294,7 @@ TEST_F(JSONFormatTUSummaryTest, ReadEntitySummaryMismatchedSummaryName) {
 
 TEST_F(JSONFormatTUSummaryTest, WriteEntitySummaryMissingData) {
   TUSummary Summary(
+      llvm::Triple("arm64-apple-macosx"),
       BuildNamespace(BuildNamespaceKind::CompilationUnit, "test.cpp"));
 
   NestedBuildNamespace Namespace =
@@ -310,6 +313,7 @@ TEST_F(JSONFormatTUSummaryTest, WriteEntitySummaryMissingData) {
 
 TEST_F(JSONFormatTUSummaryTest, WriteEntitySummaryMismatchedSummaryName) {
   TUSummary Summary(
+      llvm::Triple("arm64-apple-macosx"),
       BuildNamespace(BuildNamespaceKind::CompilationUnit, "test.cpp"));
 
   NestedBuildNamespace Namespace =
@@ -407,6 +411,7 @@ TEST_P(TUSummaryTest, WriteStreamOpenFailure) {
 
 TEST_F(JSONFormatTUSummaryTest, WriteEntitySummaryNoFormatInfo) {
   TUSummary Summary(
+      llvm::Triple("arm64-apple-macosx"),
       BuildNamespace(BuildNamespaceKind::CompilationUnit, "test.cpp"));
 
   NestedBuildNamespace Namespace =
diff --git a/clang/unittests/ScalableStaticAnalysisFramework/SummaryData/SummaryDataTest.cpp b/clang/unittests/ScalableStaticAnalysisFramework/SummaryData/SummaryDataTest.cpp
index caab7661593f3..ecf7c1b3347be 100644
--- a/clang/unittests/ScalableStaticAnalysisFramework/SummaryData/SummaryDataTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysisFramework/SummaryData/SummaryDataTest.cpp
@@ -184,7 +184,8 @@ class LUSummaryConsumerTest : public TestFixture {
   std::unique_ptr<LUSummary> makeLUSummary() {
     NestedBuildNamespace NS(
         {BuildNamespace(BuildNamespaceKind::LinkUnit, "TestLU")});
-    return std::make_unique<LUSummary>(std::move(NS));
+    return std::make_unique<LUSummary>(llvm::Triple("arm64-apple-macosx"),
+                                       std::move(NS));
   }
 
   EntityId addEntity(LUSummary &LU, llvm::StringRef USR) {
diff --git a/clang/unittests/ScalableStaticAnalysisFramework/TUSummaryBuilderTest.cpp b/clang/unittests/ScalableStaticAnalysisFramework/TUSummaryBuilderTest.cpp
index cbd6dc9c59399..ffcf068ce6956 100644
--- a/clang/unittests/ScalableStaticAnalysisFramework/TUSummaryBuilderTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysisFramework/TUSummaryBuilderTest.cpp
@@ -90,6 +90,7 @@ void PrintTo(const MockSummaryData3 &S, std::ostream *OS) {
 
 struct TUSummaryBuilderTest : ssaf::TestFixture {
   TUSummary Summary{
+      llvm::Triple("arm64-apple-macosx"),
       BuildNamespace(BuildNamespaceKind::CompilationUnit, "Mock.cpp")};
   TUSummaryBuilder Builder{Summary};
   TUSummaryExtractor Extractor{Builder};
diff --git a/clang/unittests/ScalableStaticAnalysisFramework/WholeProgramAnalysis/AnalysisDriverTest.cpp b/clang/unittests/ScalableStaticAnalysisFramework/WholeProgramAnalysis/AnalysisDriverTest.cpp
index 8b2c910711024..5a4192242643e 100644
--- a/clang/unittests/ScalableStaticAnalysisFramework/WholeProgramAnalysis/AnalysisDriverTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysisFramework/WholeProgramAnalysis/AnalysisDriverTest.cpp
@@ -304,7 +304,8 @@ class AnalysisDriverTest : public TestFixture {
   std::unique_ptr<LUSummary> makeLUSummary() {
     NestedBuildNamespace NS(
         {BuildNamespace(BuildNamespaceKind::LinkUnit, "TestLU")});
-    return std::make_unique<LUSummary>(std::move(NS));
+    return std::make_unique<LUSummary>(llvm::Triple("arm64-apple-macosx"),
+                                       std::move(NS));
   }
 
   EntityId addEntity(LUSummary &LU, llvm::StringRef USR) {
diff --git a/clang/unittests/ScalableStaticAnalysisFramework/WholeProgramAnalysis/UnsafeBufferReachableAnalysisTest.cpp b/clang/unittests/ScalableStaticAnalysisFramework/WholeProgramAnalysis/UnsafeBufferReachableAnalysisTest.cpp
index 1ad0bcd2a04d5..62cda9d7c6ff1 100644
--- a/clang/unittests/ScalableStaticAnalysisFramework/WholeProgramAnalysis/UnsafeBufferReachableAnalysisTest.cpp
+++ b/clang/unittests/ScalableStaticAnalysisFramework/WholeProgramAnalysis/UnsafeBufferReachableAnalysisTest.cpp
@@ -46,7 +46,8 @@ class UnsafeBufferReachableAnalysisTest : public TestFixture {
   std::unique_ptr<LUSummary> makeLUSummary() {
     NestedBuildNamespace NS(
         {BuildNamespace(BuildNamespaceKind::LinkUnit, "TestLU")});
-    return std::make_unique<LUSummary>(std::move(NS));
+    return std::make_unique<LUSummary>(llvm::Triple("arm64-apple-macosx"),
+                                       std::move(NS));
   }
 
   EntityId addEntity(LUSummary &LU, llvm::StringRef USR) {



More information about the cfe-commits mailing list