llvmorg-github-actions[bot] wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang-ssaf

Author: Aviral Goel (aviralg)

<details>
<summary>Changes</summary>

This commit introduces the following changes:

- Add `TargetTriple` field to `TUSummary`, `LUSummary`, and their encodings.
- Frontend captures the triple from `CompilerInstance::getTarget()` when 
extracting a TU summary.
- JSON format reads/writes a `target_triple` field at the root of each summary; 
reader rejects strings not in `llvm::Triple::normalize` form.
- All TU/LU JSON test inputs/outputs and unit tests updated to include the new 
field.
    
`clang-ssaf-linker` uses a hardcoded `x86_64-unknown-linux-gnu` for the link 
unit; surfacing the triple through the tool will be handled in a follow-up PR.
    
rdar://179403011

---

Patch is 127.24 KiB, truncated to 20.00 KiB below, full version: 
https://github.com/llvm/llvm-project/pull/204259.diff


183 Files Affected:

- (modified) 
clang/include/clang/ScalableStaticAnalysisFramework/Core/EntityLinker/EntityLinker.h
 (+5-2) 
- (modified) 
clang/include/clang/ScalableStaticAnalysisFramework/Core/EntityLinker/LUSummary.h
 (+7-2) 
- (modified) 
clang/include/clang/ScalableStaticAnalysisFramework/Core/EntityLinker/LUSummaryEncoding.h
 (+7-2) 
- (modified) 
clang/include/clang/ScalableStaticAnalysisFramework/Core/EntityLinker/TUSummaryEncoding.h
 (+9-2) 
- (modified) 
clang/include/clang/ScalableStaticAnalysisFramework/Core/Model/PrivateFieldNames.def
 (+4) 
- (modified) 
clang/include/clang/ScalableStaticAnalysisFramework/Core/TUSummary/TUSummary.h 
(+7-2) 
- (modified) clang/lib/ScalableStaticAnalysisFramework/Analyses/CMakeLists.txt 
(+1) 
- (modified) clang/lib/ScalableStaticAnalysisFramework/Core/CMakeLists.txt (+1) 
- (modified) 
clang/lib/ScalableStaticAnalysisFramework/Core/Serialization/JSONFormat/JSONFormatImpl.cpp
 (+16) 
- (modified) 
clang/lib/ScalableStaticAnalysisFramework/Core/Serialization/JSONFormat/JSONFormatImpl.h
 (+13) 
- (modified) 
clang/lib/ScalableStaticAnalysisFramework/Core/Serialization/JSONFormat/LUSummary.cpp
 (+24-1) 
- (modified) 
clang/lib/ScalableStaticAnalysisFramework/Core/Serialization/JSONFormat/LUSummaryEncoding.cpp
 (+24-1) 
- (modified) 
clang/lib/ScalableStaticAnalysisFramework/Core/Serialization/JSONFormat/TUSummary.cpp
 (+24-1) 
- (modified) 
clang/lib/ScalableStaticAnalysisFramework/Core/Serialization/JSONFormat/TUSummaryEncoding.cpp
 (+24-1) 
- (modified) clang/lib/ScalableStaticAnalysisFramework/Frontend/CMakeLists.txt 
(+1) 
- (modified) 
clang/lib/ScalableStaticAnalysisFramework/Frontend/TUSummaryExtractorFrontendAction.cpp
 (+10-5) 
- (modified) clang/lib/ScalableStaticAnalysisFramework/Tool/CMakeLists.txt (+1) 
- (modified) 
clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary-bad-array.json 
(+2-1) 
- (modified) 
clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary-bad-summary.json 
(+2-1) 
- (modified) 
clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary-no-key.json (+2-1) 
- (modified) clang/test/Analysis/Scalable/PointerFlow/Inputs/tu-summary.json 
(+1) 
- (modified) 
clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary-bad-element.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary-bad-ptr-level.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary-no-key.json 
(+2-1) 
- (modified) 
clang/test/Analysis/Scalable/UnsafeBufferUsage/Inputs/tu-summary.json (+1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-analyzer/Inputs/lu-tags-only.json (+2-1) 
- (modified) clang/test/Analysis/Scalable/ssaf-analyzer/Inputs/lu.json (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/invalid-direct-callee-element.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/invalid-direct-callee-id.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def-col.json 
(+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def-file.json 
(+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def-line.json 
(+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-def.json 
(+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-direct-callees.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-pretty-name.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/Inputs/CallGraph/missing-virtual-callees.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-element-not-object.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-entry-missing-data.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-entry-missing-summary-name.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/data-not-array.json 
(+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/duplicate-entity-id-in-data-map.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/duplicate-entity.json 
(+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/duplicate-summary-name.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-data-element-not-object.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-data-missing-entity-id.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-data-missing-entity-summary.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-id-not-uint64.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-name-missing-namespace.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-name-missing-suffix.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/entity-name-missing-usr.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-element-not-object.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-entry-id-not-uint64.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-entry-missing-id.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-entry-missing-name.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/id-table-not-array.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-duplicate-id.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-element-not-object.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-id-not-uint64.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-linkage-invalid-type.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-linkage-missing-type.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-missing-id.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-entry-missing-linkage.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-extra-id.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-missing-id.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/linkage-table-not-array.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/lu-namespace-element-invalid-kind.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/lu-namespace-element-missing-kind.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/lu-namespace-element-missing-name.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/lu-namespace-element-not-object.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/lu-namespace-not-array.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-data.json 
(+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-id-table.json 
(+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-linkage-table.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-lu-namespace.json
 (+2-1) 
- (added) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/missing-target-triple.json
 (+11) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/namespace-element-invalid-kind.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/namespace-element-missing-kind.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/namespace-element-missing-name.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/namespace-element-not-object.json
 (+2-1) 
- (added) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/not-normalized-target-triple.json
 (+12) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-element-not-object.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-invalid-first-field.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-invalid-pairs-field-type.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-invalid-second-field.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-missing-first-field.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-missing-pairs-field.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/pairs-missing-second-field.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/read-entity-summary-no-format-info.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-empty-data-entry.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-empty-namespace.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-external.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-internal.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-multiple.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-linkage-none.json 
(+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-multiple-namespace-elements.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-single-namespace-element.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/LUSummary/Inputs/rt-two-summary-types.json
 (+2-1) 
- (modified) clang/test/Analysis/Scalable/ssaf-format/LUSummary/top-level.test 
(+15) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-element-not-object.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-entry-missing-data.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-entry-missing-summary-name.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/data-not-array.json 
(+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/duplicate-entity-id-in-data-map.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/duplicate-entity.json 
(+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/duplicate-summary-name.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-data-element-not-object.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-data-missing-entity-id.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-data-missing-entity-summary.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-id-not-uint64.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-name-missing-suffix.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/entity-name-missing-usr.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-element-not-object.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-entry-id-not-uint64.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-entry-missing-id.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-entry-missing-name.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/id-table-not-array.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/invalid-kind.json 
(+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-duplicate-id.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-element-not-object.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-id-not-uint64.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-linkage-invalid-type.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-linkage-missing-type.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-missing-id.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-entry-missing-linkage.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-extra-id.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-missing-id.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/linkage-table-not-array.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-data.json 
(+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-id-table.json 
(+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-kind.json 
(+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-linkage-table.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-name.json 
(+2-1) 
- (added) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-target-triple.json
 (+9) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/missing-tu-namespace.json
 (+1) 
- (added) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/not-normalized-target-triple.json
 (+10) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-element-not-object.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-invalid-first-field.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-invalid-pairs-field-type.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-invalid-second-field.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-missing-first-field.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-missing-pairs-field.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/pairs-missing-second-field.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/read-entity-summary-no-format-info.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-empty-data-entry.json
 (+1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-empty.json (+1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-link-unit.json 
(+1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-external.json
 (+1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-internal.json
 (+1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-multiple.json
 (+1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-linkage-none.json 
(+1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-format/TUSummary/Inputs/rt-two-summary-types.json
 (+1) 
- (modified) clang/test/Analysis/Scalable/ssaf-format/TUSummary/top-level.test 
(+15) 
- (modified) clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-1.json (+2-1) 
- (modified) clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-2.json (+2-1) 
- (modified) clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-empty.json 
(+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-invalid-entity-id-multikey.json
 (+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-invalid-entity-id-ref.json 
(+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-invalid-entity-id-value.json 
(+2-1) 
- (modified) 
clang/test/Analysis/Scalable/ssaf-linker/Inputs/tu-missing-fields.json (+2-1) 
- (modified) clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-1+2.json 
(+2-1) 
- (modified) clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-1.json (+2-1) 
- (modified) clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-2.json (+2-1) 
- (modified) clang/test/Analysis/Scalable/ssaf-linker/Outputs/lu-empty.json 
(+2-1) 
- (modified) clang/tools/clang-ssaf-analyzer/CMakeLists.txt (+1) 
- (modified) clang/tools/clang-ssaf-format/CMakeLists.txt (+1) 
- (modified) clang/tools/clang-ssaf-linker/CMakeLists.txt (+1) 
- (modified) clang/tools/clang-ssaf-linker/SSAFLinker.cpp (+5-2) 
- (modified) 
clang/unittests/ScalableStaticAnalysisFramework/Analyses/CallGraph/CallGraphExtractorTest.cpp
 (+1) 
- (modified) 
clang/unittests/ScalableStaticAnalysisFramework/Analyses/PointerFlow/PointerFlowTest.cpp
 (+2-1) 
- (modified) 
clang/unittests/ScalableStaticAnalysisFramework/Analyses/PointerFlow/PointerFlowWPATest.cpp
 (+2-1) 
- (modified) 
clang/unittests/ScalableStaticAnalysisFramework/Analyses/UnsafeBufferUsage/UnsafeBufferUsageTest.cpp
 (+2-1) 
- (modified) 
clang/unittests/ScalableStaticAnalysisFramework/Analyses/UnsafeBufferUsage/UnsafeBufferUsageWPATest.cpp
 (+2-1) 
- (modified) clang/unittests/ScalableStaticAnalysisFramework/CMakeLists.txt 
(+1) 
- (modified) 
clang/unittests/ScalableStaticAnalysisFramework/EntityLinkerTest.cpp (+12-9) 
- (modified) clang/unittests/ScalableStaticAnalysisFramework/LUSummaryTest.cpp 
(+1-1) 
- (modified) 
clang/unittests/ScalableStaticAnalysisFramework/Registries/MockSerializationFormat.cpp
 (+1-1) 
- (modified) 
clang/unittests/ScalableStaticAnalysisFramework/Registries/SummaryExtractorRegistryTest.cpp
 (+1) 
- (modified) 
clang/unittests/ScalableStaticAnalysisFramework/Serialization/JSONFormatTest/LUSummaryTest.cpp
 (+7-5) 
- (modified) 
clang/unittests/ScalableStaticAnalysisFramework/Serialization/JSONFormatTest/TUSummaryTest.cpp
 (+7-2) 
- (modified) 
clang/unittests/ScalableStaticAnalysisFramework/SummaryData/SummaryDataTest.cpp 
(+2-1) 
- (modified) 
clang/unittests/ScalableStaticAnalysisFramework/TUSummaryBuilderTest.cpp (+1) 
- (modified) 
clang/unittests/ScalableStaticAnalysisFramework/WholeProgramAnalysis/AnalysisDriverTest.cpp
 (+2-1) 
- (modified) 
clang/unittests/ScalableStaticAnalysisFramework/WholeProgramAnalysis/UnsafeBufferReachableAnalysisTest.cpp
 (+2-1) 


``````````diff
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/Analyses/CMakeLists.txt 
b/clang/lib/ScalableStaticAnalysisFramework/Analyses/CMakeLists.txt
index 3f3d3d02ff644..2bd7c925fc5b9 100644
--- a/clang/lib/ScalableStaticAnalysisFramework/Analyses/CMakeLists.txt
+++ b/clang/lib/ScalableStaticAnalysisFramework/Analyses/CMakeLists.txt
@@ -1,5 +1,6 @@
 set(LLVM_LINK_COMPONENTS
   Support
+  TargetParser
   )
 
 add_clang_library(clangScalableStaticAnalysisFrameworkAnalyses
diff --git a/clang/lib/ScalableStaticAnalysisFramework/Core/CMakeLists.txt 
b/clang/lib/ScalableStaticAnalysisFramework/Core/CMakeLists.txt
index 2c43d645f7e74..5085a9bc562e0 100644
--- a/clang/lib/ScalableStaticAnalysisFramework/Core/CMakeLists.txt
+++ b/clang/lib/ScalableStaticAnalysisFramework/Core/CMakeLists.txt
@@ -1,5 +1,6 @@
 set(LLVM_LINK_COMPONENTS
   Support
+  TargetParser
   )
 
 add_clang_library(clangScalableStaticAnalysisFrameworkCore
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,
+           ...
[truncated]

``````````

</details>


https://github.com/llvm/llvm-project/pull/204259
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to