[llvm] b41baaf - [readtapi] Condense output when comparing tbd files with mismatched inlined libraries (#129754)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Mar 4 17:05:05 PST 2025
Author: Cyndy Ishida
Date: 2025-03-04T17:05:01-08:00
New Revision: b41baafbc79b950db178102322a7d0de76b58081
URL: https://github.com/llvm/llvm-project/commit/b41baafbc79b950db178102322a7d0de76b58081
DIFF: https://github.com/llvm/llvm-project/commit/b41baafbc79b950db178102322a7d0de76b58081.diff
LOG: [readtapi] Condense output when comparing tbd files with mismatched inlined libraries (#129754)
Previously, when an inlined library existed in TBD file A but not in file B, all of the inlined library's attributes were printed. This is noisy since the important detail is the complete contents are missing. Instead, only print the install name of the inlined library and the marker for which the input file exists in.
Added:
Modified:
llvm/test/tools/llvm-readtapi/compare-left-single-inline.test
llvm/test/tools/llvm-readtapi/compare-mismatched-inlines.test
llvm/test/tools/llvm-readtapi/compare-multiple-inlines.test
llvm/test/tools/llvm-readtapi/compare-right-single-inline.test
llvm/tools/llvm-readtapi/DiffEngine.cpp
llvm/tools/llvm-readtapi/DiffEngine.h
Removed:
################################################################################
diff --git a/llvm/test/tools/llvm-readtapi/compare-left-single-inline.test b/llvm/test/tools/llvm-readtapi/compare-left-single-inline.test
index f8bccb5aa79f1..dc72b7f3b9d12 100644
--- a/llvm/test/tools/llvm-readtapi/compare-left-single-inline.test
+++ b/llvm/test/tools/llvm-readtapi/compare-left-single-inline.test
@@ -38,32 +38,8 @@
; CHECK-NEXT: x86_64-apple-ios-simulator
; CHECK-NEXT: > _symB
; CHECK-NEXT:Inlined Reexported Frameworks/Libraries
-; CHECK-NEXT: Alpine.framework/Alpine
-; CHECK-NEXT: Current Version
-; CHECK-NEXT: > 1.2.3
-; CHECK-NEXT: Compatibility Version
-; CHECK-NEXT: > 0
-; CHECK-NEXT: Swift ABI Version
-; CHECK-NEXT: > 5
-; CHECK-NEXT: Two Level Namespace
-; CHECK-NEXT: > true
-; CHECK-NEXT: Application Extension Safe
-; CHECK-NEXT: > true
-; CHECK-NEXT: Allowable Clients
-; CHECK-NEXT: i386-apple-macos
-; CHECK-NEXT: > ClientD
-; CHECK-NEXT: Parent Umbrellas
-; CHECK-NEXT: i386-apple-macos
-; CHECK-NEXT: > System
-; CHECK-NEXT: x86_64-apple-ios-simulator
-; CHECK-NEXT: > System
-; CHECK-NEXT: Symbols
-; CHECK-NEXT: i386-apple-macos
-; CHECK-NEXT: > _symA
-; CHECK-NEXT: > .objc_class_name_Class1
-; CHECK-NEXT: > _symC - Weak-Defined
-; CHECK-NEXT: x86_64-apple-ios-simulator
-; CHECK-NEXT: > _symB
+; CHECK-NEXT: Install Name
+; CHECK-NEXT: > Alpine.framework/Alpine
diff --git a/llvm/test/tools/llvm-readtapi/compare-mismatched-inlines.test b/llvm/test/tools/llvm-readtapi/compare-mismatched-inlines.test
index 161727cd6fcba..5ef72bcd88090 100644
--- a/llvm/test/tools/llvm-readtapi/compare-mismatched-inlines.test
+++ b/llvm/test/tools/llvm-readtapi/compare-mismatched-inlines.test
@@ -10,35 +10,8 @@
; CHECK-NEXT: > Alpine.framework/Alpine
; CHECK-NEXT: > System.framework/System
; CHECK-NEXT:Inlined Reexported Frameworks/Libraries
-; CHECK-NEXT: System.framework/System
-; CHECK-NEXT: Current Version
-; CHECK-NEXT: > 1.3.3
-; CHECK-NEXT: Compatibility Version
-; CHECK-NEXT: > 1.2
-; CHECK-NEXT: Swift ABI Version
-; CHECK-NEXT: > 3
-; CHECK-NEXT: Two Level Namespace
-; CHECK-NEXT: > true
-; CHECK-NEXT: Application Extension Safe
-; CHECK-NEXT: > true
-; CHECK-NEXT: Allowable Clients
-; CHECK-NEXT: i386-apple-macos
-; CHECK-NEXT: > ClientA
-; CHECK-NEXT: x86_64-apple-ios
-; CHECK-NEXT: > ClientA
-; CHECK-NEXT: Parent Umbrellas
-; CHECK-NEXT: i386-apple-macos
-; CHECK-NEXT: > System
-; CHECK-NEXT: x86_64-apple-ios
-; CHECK-NEXT: > System
-; CHECK-NEXT: Symbols
-; CHECK-NEXT: i386-apple-macos
-; CHECK-NEXT: > _symA
-; CHECK-NEXT: > _symC - Reexported
-; CHECK-NEXT: > _symD - Undefined
-; CHECK-NEXT: x86_64-apple-ios
-; CHECK-NEXT: > _symB
-; CHECK-NEXT: > _symAB
+; CHECK-NEXT: Install Name
+; CHECK-NEXT: > System.framework/System
; CHECK-NOT: error:
; CHECK-NOT: warning:
diff --git a/llvm/test/tools/llvm-readtapi/compare-multiple-inlines.test b/llvm/test/tools/llvm-readtapi/compare-multiple-inlines.test
index 52e11befec07c..f7270d0558a71 100644
--- a/llvm/test/tools/llvm-readtapi/compare-multiple-inlines.test
+++ b/llvm/test/tools/llvm-readtapi/compare-multiple-inlines.test
@@ -42,61 +42,10 @@
; CHECK-NEXT: x86_64-apple-ios-simulator
; CHECK-NEXT: > _symB
; CHECK-NEXT:Inlined Reexported Frameworks/Libraries
-; CHECK-NEXT: Alpine.framework/Alpine
-; CHECK-NEXT: Current Version
-; CHECK-NEXT: > 1.2.3
-; CHECK-NEXT: Compatibility Version
-; CHECK-NEXT: > 0
-; CHECK-NEXT: Swift ABI Version
-; CHECK-NEXT: > 5
-; CHECK-NEXT: Two Level Namespace
-; CHECK-NEXT: > true
-; CHECK-NEXT: Application Extension Safe
-; CHECK-NEXT: > true
-; CHECK-NEXT: Allowable Clients
-; CHECK-NEXT: i386-apple-macos
-; CHECK-NEXT: > ClientD
-; CHECK-NEXT: Parent Umbrellas
-; CHECK-NEXT: i386-apple-macos
-; CHECK-NEXT: > System
-; CHECK-NEXT: x86_64-apple-ios-simulator
-; CHECK-NEXT: > System
-; CHECK-NEXT: Symbols
-; CHECK-NEXT: i386-apple-macos
-; CHECK-NEXT: > _symA
-; CHECK-NEXT: > .objc_class_name_Class1
-; CHECK-NEXT: > _symC - Weak-Defined
-; CHECK-NEXT: x86_64-apple-ios-simulator
-; CHECK-NEXT: > _symB
-; CHECK-NEXT: System.framework/System
-; CHECK-NEXT: Current Version
-; CHECK-NEXT: > 1.3.3
-; CHECK-NEXT: Compatibility Version
-; CHECK-NEXT: > 1.2
-; CHECK-NEXT: Swift ABI Version
-; CHECK-NEXT: > 3
-; CHECK-NEXT: Two Level Namespace
-; CHECK-NEXT: > true
-; CHECK-NEXT: Application Extension Safe
-; CHECK-NEXT: > true
-; CHECK-NEXT: Allowable Clients
-; CHECK-NEXT: i386-apple-macos
-; CHECK-NEXT: > ClientA
-; CHECK-NEXT: x86_64-apple-ios
-; CHECK-NEXT: > ClientA
-; CHECK-NEXT: Parent Umbrellas
-; CHECK-NEXT: i386-apple-macos
-; CHECK-NEXT: > System
-; CHECK-NEXT: x86_64-apple-ios
-; CHECK-NEXT: > System
-; CHECK-NEXT: Symbols
-; CHECK-NEXT: i386-apple-macos
-; CHECK-NEXT: > _symA
-; CHECK-NEXT: > _symC - Reexported
-; CHECK-NEXT: > _symD - Undefined
-; CHECK-NEXT: x86_64-apple-ios
-; CHECK-NEXT: > _symB
-; CHECK-NEXT: > _symAB
+; CHECK-NEXT: Install Name
+; CHECK-NEXT: > Alpine.framework/Alpine
+; CHECK-NEXT: Install Name
+; CHECK-NEXT: > System.framework/System
; CHECK-NOT: error:
; CHECK-NOT: warning:
diff --git a/llvm/test/tools/llvm-readtapi/compare-right-single-inline.test b/llvm/test/tools/llvm-readtapi/compare-right-single-inline.test
index 46642b037b7ef..8e7d852cef7d4 100644
--- a/llvm/test/tools/llvm-readtapi/compare-right-single-inline.test
+++ b/llvm/test/tools/llvm-readtapi/compare-right-single-inline.test
@@ -35,32 +35,8 @@
; CHECK-NEXT: x86_64-apple-ios-simulator
; CHECK-NEXT: < _symB
; CHECK-NEXT:Inlined Reexported Frameworks/Libraries
-; CHECK-NEXT: Alpine.framework/Alpine
-; CHECK-NEXT: Current Version
-; CHECK-NEXT: < 1.2.3
-; CHECK-NEXT: Compatibility Version
-; CHECK-NEXT: < 0
-; CHECK-NEXT: Swift ABI Version
-; CHECK-NEXT: < 5
-; CHECK-NEXT: Two Level Namespace
-; CHECK-NEXT: < true
-; CHECK-NEXT: Application Extension Safe
-; CHECK-NEXT: < true
-; CHECK-NEXT: Allowable Clients
-; CHECK-NEXT: i386-apple-macos
-; CHECK-NEXT: < ClientD
-; CHECK-NEXT: Parent Umbrellas
-; CHECK-NEXT: i386-apple-macos
-; CHECK-NEXT: < System
-; CHECK-NEXT: x86_64-apple-ios-simulator
-; CHECK-NEXT: < System
-; CHECK-NEXT: Symbols
-; CHECK-NEXT: i386-apple-macos
-; CHECK-NEXT: < _symA
-; CHECK-NEXT: < .objc_class_name_Class1
-; CHECK-NEXT: < _symC - Weak-Defined
-; CHECK-NEXT: x86_64-apple-ios-simulator
-; CHECK-NEXT: < _symB
+; CHECK-NEXT: Install Name
+; CHECK-NEXT: < Alpine.framework/Alpine
; CHECK-NOT: error:
; CHECK-NOT: warning:
diff --git a/llvm/tools/llvm-readtapi/DiffEngine.cpp b/llvm/tools/llvm-readtapi/DiffEngine.cpp
index 6434c871fa64b..8fc45f436109e 100644
--- a/llvm/tools/llvm-readtapi/DiffEngine.cpp
+++ b/llvm/tools/llvm-readtapi/DiffEngine.cpp
@@ -203,27 +203,6 @@ std::vector<DiffOutput> getSingleIF(InterfaceFile *Interface,
diff Attribute("Install Name", Output,
DiffScalarVal<StringRef, AD_Diff_Scalar_Str>(
Order, Interface->getInstallName()));
-
diff Attribute("Current Version", Output,
- DiffScalarVal<PackedVersion, AD_Diff_Scalar_PackedVersion>(
- Order, Interface->getCurrentVersion()));
-
diff Attribute("Compatibility Version", Output,
- DiffScalarVal<PackedVersion, AD_Diff_Scalar_PackedVersion>(
- Order, Interface->getCompatibilityVersion()));
-
diff Attribute("Swift ABI Version", Output,
- DiffScalarVal<uint8_t, AD_Diff_Scalar_Unsigned>(
- Order, Interface->getSwiftABIVersion()));
-
diff Attribute("Two Level Namespace", Output,
- DiffScalarVal<bool, AD_Diff_Scalar_Bool>(
- Order, Interface->isTwoLevelNamespace()));
-
diff Attribute("Application Extension Safe", Output,
- DiffScalarVal<bool, AD_Diff_Scalar_Bool>(
- Order, Interface->isApplicationExtensionSafe()));
-
diff Attribute("Reexported Libraries", Output,
- Interface->reexportedLibraries(), Order);
-
diff Attribute("Allowable Clients", Output, Interface->allowableClients(),
- Order);
-
diff Attribute("Parent Umbrellas", Output, Interface->umbrellas(), Order);
-
diff Attribute("Symbols", Output, Interface->symbols(), Order);
for (const auto &Doc : Interface->documents()) {
DiffOutput Documents("Inlined Reexported Frameworks/Libraries");
Documents.Kind = AD_Inline_Doc;
@@ -419,10 +398,11 @@ DiffEngine::findDifferences(const InterfaceFile *IFLHS,
Docs.Values.push_back(
std::make_unique<InlineDoc>(std::move(PairDiff)));
}
- // If a match is not found, get attributes from single item.
+ // No matching inlined library was found.
else
- Docs.Values.push_back(std::make_unique<InlineDoc>(InlineDoc(
- DocLHS->getInstallName(), getSingleIF(DocLHS.get(), lhs))));
+ Docs.Values.push_back(std::make_unique<InlineDoc>(
+ InlineDoc(DocLHS->getInstallName(), getSingleIF(DocLHS.get(), lhs),
+ /*IsMissingDoc=*/true)));
DocsInserted.push_back(DocLHS->getInstallName());
}
for (auto DocRHS : IFRHS->documents()) {
@@ -431,8 +411,9 @@ DiffEngine::findDifferences(const InterfaceFile *IFLHS,
return (GatheredDoc == DocRHS->getInstallName());
});
if (!WasGathered)
- Docs.Values.push_back(std::make_unique<InlineDoc>(InlineDoc(
- DocRHS->getInstallName(), getSingleIF(DocRHS.get(), rhs))));
+ Docs.Values.push_back(std::make_unique<InlineDoc>(
+ InlineDoc(DocRHS->getInstallName(), getSingleIF(DocRHS.get(), rhs),
+ /*IsMissingDoc=*/true)));
}
if (!Docs.Values.empty())
Output.push_back(std::move(Docs));
@@ -547,12 +528,23 @@ void DiffEngine::printDifferences(raw_ostream &OS,
case AD_Inline_Doc:
if (!Attr.Values.empty()) {
OS << Indent << Attr.Name << "\n";
- for (auto &Item : Attr.Values)
- if (InlineDoc *Doc = dyn_cast<InlineDoc>(Item.get()))
- if (!Doc->DocValues.empty()) {
+ for (auto &Item : Attr.Values) {
+ if (InlineDoc *Doc = dyn_cast<InlineDoc>(Item.get())) {
+ if (Doc->DocValues.empty())
+ continue;
+ IndentCounter = 2;
+ // When only one input file contains an inlined library, print out
+ // the install name for it. Otherwise print out the
diff erent values
+ // by the install name.
+ if (Doc->IsMissingDoc) {
+ printSingleVal<DiffScalarVal<StringRef, AD_Diff_Scalar_Str>>(
+ std::string(IndentCounter, '\t'), Doc->DocValues.front(), OS);
+ } else {
OS << Indent << "\t" << Doc->InstallName << "\n";
- printDifferences(OS, std::move(Doc->DocValues), 2);
+ printDifferences(OS, std::move(Doc->DocValues), IndentCounter);
}
+ }
+ }
}
break;
}
diff --git a/llvm/tools/llvm-readtapi/DiffEngine.h b/llvm/tools/llvm-readtapi/DiffEngine.h
index 58b0c1b3ea9cb..7ab57d43e3af2 100644
--- a/llvm/tools/llvm-readtapi/DiffEngine.h
+++ b/llvm/tools/llvm-readtapi/DiffEngine.h
@@ -128,9 +128,12 @@ class InlineDoc : public AttributeDiff {
std::string InstallName;
/// Differences found from each file.
std::vector<DiffOutput> DocValues;
- InlineDoc(StringRef InstName, std::vector<DiffOutput> Diff)
+ /// Whether document only exists for one input.
+ bool IsMissingDoc;
+ InlineDoc(StringRef InstName, std::vector<DiffOutput> Diff,
+ bool IsMissingDoc = false)
: AttributeDiff(AD_Inline_Doc), InstallName(InstName),
- DocValues(std::move(Diff)){};
+ DocValues(std::move(Diff)), IsMissingDoc(IsMissingDoc) {};
static bool classof(const AttributeDiff *A) {
return A->getKind() == AD_Inline_Doc;
More information about the llvm-commits
mailing list