Skip to content

Commit 4539e75

Browse files
committed
[readtapi] Condense output when comparing tbd files with mismatched inlined libraries (llvm#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. (cherry picked from commit b41baaf)
1 parent 0685fea commit 4539e75

File tree

6 files changed

+37
-168
lines changed

6 files changed

+37
-168
lines changed

llvm/test/tools/llvm-readtapi/compare-left-single-inline.test

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -38,32 +38,8 @@
3838
; CHECK-NEXT: x86_64-apple-ios-simulator
3939
; CHECK-NEXT: > _symB
4040
; CHECK-NEXT:Inlined Reexported Frameworks/Libraries
41-
; CHECK-NEXT: Alpine.framework/Alpine
42-
; CHECK-NEXT: Current Version
43-
; CHECK-NEXT: > 1.2.3
44-
; CHECK-NEXT: Compatibility Version
45-
; CHECK-NEXT: > 0
46-
; CHECK-NEXT: Swift ABI Version
47-
; CHECK-NEXT: > 5
48-
; CHECK-NEXT: Two Level Namespace
49-
; CHECK-NEXT: > true
50-
; CHECK-NEXT: Application Extension Safe
51-
; CHECK-NEXT: > true
52-
; CHECK-NEXT: Allowable Clients
53-
; CHECK-NEXT: i386-apple-macos
54-
; CHECK-NEXT: > ClientD
55-
; CHECK-NEXT: Parent Umbrellas
56-
; CHECK-NEXT: i386-apple-macos
57-
; CHECK-NEXT: > System
58-
; CHECK-NEXT: x86_64-apple-ios-simulator
59-
; CHECK-NEXT: > System
60-
; CHECK-NEXT: Symbols
61-
; CHECK-NEXT: i386-apple-macos
62-
; CHECK-NEXT: > _symA
63-
; CHECK-NEXT: > .objc_class_name_Class1
64-
; CHECK-NEXT: > _symC - Weak-Defined
65-
; CHECK-NEXT: x86_64-apple-ios-simulator
66-
; CHECK-NEXT: > _symB
41+
; CHECK-NEXT: Install Name
42+
; CHECK-NEXT: > Alpine.framework/Alpine
6743

6844

6945

llvm/test/tools/llvm-readtapi/compare-mismatched-inlines.test

Lines changed: 2 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -10,35 +10,8 @@
1010
; CHECK-NEXT: > Alpine.framework/Alpine
1111
; CHECK-NEXT: > System.framework/System
1212
; CHECK-NEXT:Inlined Reexported Frameworks/Libraries
13-
; CHECK-NEXT: System.framework/System
14-
; CHECK-NEXT: Current Version
15-
; CHECK-NEXT: > 1.3.3
16-
; CHECK-NEXT: Compatibility Version
17-
; CHECK-NEXT: > 1.2
18-
; CHECK-NEXT: Swift ABI Version
19-
; CHECK-NEXT: > 3
20-
; CHECK-NEXT: Two Level Namespace
21-
; CHECK-NEXT: > true
22-
; CHECK-NEXT: Application Extension Safe
23-
; CHECK-NEXT: > true
24-
; CHECK-NEXT: Allowable Clients
25-
; CHECK-NEXT: i386-apple-macos
26-
; CHECK-NEXT: > ClientA
27-
; CHECK-NEXT: x86_64-apple-ios
28-
; CHECK-NEXT: > ClientA
29-
; CHECK-NEXT: Parent Umbrellas
30-
; CHECK-NEXT: i386-apple-macos
31-
; CHECK-NEXT: > System
32-
; CHECK-NEXT: x86_64-apple-ios
33-
; CHECK-NEXT: > System
34-
; CHECK-NEXT: Symbols
35-
; CHECK-NEXT: i386-apple-macos
36-
; CHECK-NEXT: > _symA
37-
; CHECK-NEXT: > _symC - Reexported
38-
; CHECK-NEXT: > _symD - Undefined
39-
; CHECK-NEXT: x86_64-apple-ios
40-
; CHECK-NEXT: > _symB
41-
; CHECK-NEXT: > _symAB
13+
; CHECK-NEXT: Install Name
14+
; CHECK-NEXT: > System.framework/System
4215

4316
; CHECK-NOT: error:
4417
; CHECK-NOT: warning:

llvm/test/tools/llvm-readtapi/compare-multiple-inlines.test

Lines changed: 4 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -42,61 +42,10 @@
4242
; CHECK-NEXT: x86_64-apple-ios-simulator
4343
; CHECK-NEXT: > _symB
4444
; CHECK-NEXT:Inlined Reexported Frameworks/Libraries
45-
; CHECK-NEXT: Alpine.framework/Alpine
46-
; CHECK-NEXT: Current Version
47-
; CHECK-NEXT: > 1.2.3
48-
; CHECK-NEXT: Compatibility Version
49-
; CHECK-NEXT: > 0
50-
; CHECK-NEXT: Swift ABI Version
51-
; CHECK-NEXT: > 5
52-
; CHECK-NEXT: Two Level Namespace
53-
; CHECK-NEXT: > true
54-
; CHECK-NEXT: Application Extension Safe
55-
; CHECK-NEXT: > true
56-
; CHECK-NEXT: Allowable Clients
57-
; CHECK-NEXT: i386-apple-macos
58-
; CHECK-NEXT: > ClientD
59-
; CHECK-NEXT: Parent Umbrellas
60-
; CHECK-NEXT: i386-apple-macos
61-
; CHECK-NEXT: > System
62-
; CHECK-NEXT: x86_64-apple-ios-simulator
63-
; CHECK-NEXT: > System
64-
; CHECK-NEXT: Symbols
65-
; CHECK-NEXT: i386-apple-macos
66-
; CHECK-NEXT: > _symA
67-
; CHECK-NEXT: > .objc_class_name_Class1
68-
; CHECK-NEXT: > _symC - Weak-Defined
69-
; CHECK-NEXT: x86_64-apple-ios-simulator
70-
; CHECK-NEXT: > _symB
71-
; CHECK-NEXT: System.framework/System
72-
; CHECK-NEXT: Current Version
73-
; CHECK-NEXT: > 1.3.3
74-
; CHECK-NEXT: Compatibility Version
75-
; CHECK-NEXT: > 1.2
76-
; CHECK-NEXT: Swift ABI Version
77-
; CHECK-NEXT: > 3
78-
; CHECK-NEXT: Two Level Namespace
79-
; CHECK-NEXT: > true
80-
; CHECK-NEXT: Application Extension Safe
81-
; CHECK-NEXT: > true
82-
; CHECK-NEXT: Allowable Clients
83-
; CHECK-NEXT: i386-apple-macos
84-
; CHECK-NEXT: > ClientA
85-
; CHECK-NEXT: x86_64-apple-ios
86-
; CHECK-NEXT: > ClientA
87-
; CHECK-NEXT: Parent Umbrellas
88-
; CHECK-NEXT: i386-apple-macos
89-
; CHECK-NEXT: > System
90-
; CHECK-NEXT: x86_64-apple-ios
91-
; CHECK-NEXT: > System
92-
; CHECK-NEXT: Symbols
93-
; CHECK-NEXT: i386-apple-macos
94-
; CHECK-NEXT: > _symA
95-
; CHECK-NEXT: > _symC - Reexported
96-
; CHECK-NEXT: > _symD - Undefined
97-
; CHECK-NEXT: x86_64-apple-ios
98-
; CHECK-NEXT: > _symB
99-
; CHECK-NEXT: > _symAB
45+
; CHECK-NEXT: Install Name
46+
; CHECK-NEXT: > Alpine.framework/Alpine
47+
; CHECK-NEXT: Install Name
48+
; CHECK-NEXT: > System.framework/System
10049

10150
; CHECK-NOT: error:
10251
; CHECK-NOT: warning:

llvm/test/tools/llvm-readtapi/compare-right-single-inline.test

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -35,32 +35,8 @@
3535
; CHECK-NEXT: x86_64-apple-ios-simulator
3636
; CHECK-NEXT: < _symB
3737
; CHECK-NEXT:Inlined Reexported Frameworks/Libraries
38-
; CHECK-NEXT: Alpine.framework/Alpine
39-
; CHECK-NEXT: Current Version
40-
; CHECK-NEXT: < 1.2.3
41-
; CHECK-NEXT: Compatibility Version
42-
; CHECK-NEXT: < 0
43-
; CHECK-NEXT: Swift ABI Version
44-
; CHECK-NEXT: < 5
45-
; CHECK-NEXT: Two Level Namespace
46-
; CHECK-NEXT: < true
47-
; CHECK-NEXT: Application Extension Safe
48-
; CHECK-NEXT: < true
49-
; CHECK-NEXT: Allowable Clients
50-
; CHECK-NEXT: i386-apple-macos
51-
; CHECK-NEXT: < ClientD
52-
; CHECK-NEXT: Parent Umbrellas
53-
; CHECK-NEXT: i386-apple-macos
54-
; CHECK-NEXT: < System
55-
; CHECK-NEXT: x86_64-apple-ios-simulator
56-
; CHECK-NEXT: < System
57-
; CHECK-NEXT: Symbols
58-
; CHECK-NEXT: i386-apple-macos
59-
; CHECK-NEXT: < _symA
60-
; CHECK-NEXT: < .objc_class_name_Class1
61-
; CHECK-NEXT: < _symC - Weak-Defined
62-
; CHECK-NEXT: x86_64-apple-ios-simulator
63-
; CHECK-NEXT: < _symB
38+
; CHECK-NEXT: Install Name
39+
; CHECK-NEXT: < Alpine.framework/Alpine
6440

6541
; CHECK-NOT: error:
6642
; CHECK-NOT: warning:

llvm/tools/llvm-readtapi/DiffEngine.cpp

Lines changed: 22 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -203,27 +203,6 @@ std::vector<DiffOutput> getSingleIF(InterfaceFile *Interface,
203203
diffAttribute("Install Name", Output,
204204
DiffScalarVal<StringRef, AD_Diff_Scalar_Str>(
205205
Order, Interface->getInstallName()));
206-
diffAttribute("Current Version", Output,
207-
DiffScalarVal<PackedVersion, AD_Diff_Scalar_PackedVersion>(
208-
Order, Interface->getCurrentVersion()));
209-
diffAttribute("Compatibility Version", Output,
210-
DiffScalarVal<PackedVersion, AD_Diff_Scalar_PackedVersion>(
211-
Order, Interface->getCompatibilityVersion()));
212-
diffAttribute("Swift ABI Version", Output,
213-
DiffScalarVal<uint8_t, AD_Diff_Scalar_Unsigned>(
214-
Order, Interface->getSwiftABIVersion()));
215-
diffAttribute("Two Level Namespace", Output,
216-
DiffScalarVal<bool, AD_Diff_Scalar_Bool>(
217-
Order, Interface->isTwoLevelNamespace()));
218-
diffAttribute("Application Extension Safe", Output,
219-
DiffScalarVal<bool, AD_Diff_Scalar_Bool>(
220-
Order, Interface->isApplicationExtensionSafe()));
221-
diffAttribute("Reexported Libraries", Output,
222-
Interface->reexportedLibraries(), Order);
223-
diffAttribute("Allowable Clients", Output, Interface->allowableClients(),
224-
Order);
225-
diffAttribute("Parent Umbrellas", Output, Interface->umbrellas(), Order);
226-
diffAttribute("Symbols", Output, Interface->symbols(), Order);
227206
for (const auto &Doc : Interface->documents()) {
228207
DiffOutput Documents("Inlined Reexported Frameworks/Libraries");
229208
Documents.Kind = AD_Inline_Doc;
@@ -419,10 +398,11 @@ DiffEngine::findDifferences(const InterfaceFile *IFLHS,
419398
Docs.Values.push_back(
420399
std::make_unique<InlineDoc>(std::move(PairDiff)));
421400
}
422-
// If a match is not found, get attributes from single item.
401+
// No matching inlined library was found.
423402
else
424-
Docs.Values.push_back(std::make_unique<InlineDoc>(InlineDoc(
425-
DocLHS->getInstallName(), getSingleIF(DocLHS.get(), lhs))));
403+
Docs.Values.push_back(std::make_unique<InlineDoc>(
404+
InlineDoc(DocLHS->getInstallName(), getSingleIF(DocLHS.get(), lhs),
405+
/*IsMissingDoc=*/true)));
426406
DocsInserted.push_back(DocLHS->getInstallName());
427407
}
428408
for (auto DocRHS : IFRHS->documents()) {
@@ -431,8 +411,9 @@ DiffEngine::findDifferences(const InterfaceFile *IFLHS,
431411
return (GatheredDoc == DocRHS->getInstallName());
432412
});
433413
if (!WasGathered)
434-
Docs.Values.push_back(std::make_unique<InlineDoc>(InlineDoc(
435-
DocRHS->getInstallName(), getSingleIF(DocRHS.get(), rhs))));
414+
Docs.Values.push_back(std::make_unique<InlineDoc>(
415+
InlineDoc(DocRHS->getInstallName(), getSingleIF(DocRHS.get(), rhs),
416+
/*IsMissingDoc=*/true)));
436417
}
437418
if (!Docs.Values.empty())
438419
Output.push_back(std::move(Docs));
@@ -547,12 +528,23 @@ void DiffEngine::printDifferences(raw_ostream &OS,
547528
case AD_Inline_Doc:
548529
if (!Attr.Values.empty()) {
549530
OS << Indent << Attr.Name << "\n";
550-
for (auto &Item : Attr.Values)
551-
if (InlineDoc *Doc = dyn_cast<InlineDoc>(Item.get()))
552-
if (!Doc->DocValues.empty()) {
531+
for (auto &Item : Attr.Values) {
532+
if (InlineDoc *Doc = dyn_cast<InlineDoc>(Item.get())) {
533+
if (Doc->DocValues.empty())
534+
continue;
535+
IndentCounter = 2;
536+
// When only one input file contains an inlined library, print out
537+
// the install name for it. Otherwise print out the different values
538+
// by the install name.
539+
if (Doc->IsMissingDoc) {
540+
printSingleVal<DiffScalarVal<StringRef, AD_Diff_Scalar_Str>>(
541+
std::string(IndentCounter, '\t'), Doc->DocValues.front(), OS);
542+
} else {
553543
OS << Indent << "\t" << Doc->InstallName << "\n";
554-
printDifferences(OS, std::move(Doc->DocValues), 2);
544+
printDifferences(OS, std::move(Doc->DocValues), IndentCounter);
555545
}
546+
}
547+
}
556548
}
557549
break;
558550
}

llvm/tools/llvm-readtapi/DiffEngine.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,9 +128,12 @@ class InlineDoc : public AttributeDiff {
128128
std::string InstallName;
129129
/// Differences found from each file.
130130
std::vector<DiffOutput> DocValues;
131-
InlineDoc(StringRef InstName, std::vector<DiffOutput> Diff)
131+
/// Whether document only exists for one input.
132+
bool IsMissingDoc;
133+
InlineDoc(StringRef InstName, std::vector<DiffOutput> Diff,
134+
bool IsMissingDoc = false)
132135
: AttributeDiff(AD_Inline_Doc), InstallName(InstName),
133-
DocValues(std::move(Diff)){};
136+
DocValues(std::move(Diff)), IsMissingDoc(IsMissingDoc) {};
134137

135138
static bool classof(const AttributeDiff *A) {
136139
return A->getKind() == AD_Inline_Doc;

0 commit comments

Comments
 (0)