diff options
Diffstat (limited to 'llvm/tools/llvm-tapi-diff/DiffEngine.cpp')
-rw-r--r-- | llvm/tools/llvm-tapi-diff/DiffEngine.cpp | 58 |
1 files changed, 29 insertions, 29 deletions
diff --git a/llvm/tools/llvm-tapi-diff/DiffEngine.cpp b/llvm/tools/llvm-tapi-diff/DiffEngine.cpp index 9ebaadbeec26..3e07bb94f4df 100644 --- a/llvm/tools/llvm-tapi-diff/DiffEngine.cpp +++ b/llvm/tools/llvm-tapi-diff/DiffEngine.cpp @@ -11,11 +11,13 @@ // //===----------------------------------------------------------------------===/ #include "DiffEngine.h" +#include "llvm/ADT/SmallString.h" #include "llvm/Support/Casting.h" #include "llvm/Support/raw_ostream.h" #include "llvm/TextAPI/InterfaceFile.h" #include "llvm/TextAPI/Symbol.h" #include "llvm/TextAPI/Target.h" +#include <iterator> using namespace llvm; using namespace MachO; @@ -74,43 +76,49 @@ StringLiteral SymScalar::getSymbolNamePrefix(MachO::SymbolKind Kind) { llvm_unreachable("Unknown llvm::MachO::SymbolKind enum"); } -std::string SymScalar::stringifySymbolFlag(MachO::SymbolFlags Flag) { - switch (Flag) { - case MachO::SymbolFlags::None: - return ""; - case MachO::SymbolFlags::ThreadLocalValue: - return "Thread-Local"; - case MachO::SymbolFlags::WeakDefined: - return "Weak-Defined"; - case MachO::SymbolFlags::WeakReferenced: - return "Weak-Referenced"; - case MachO::SymbolFlags::Undefined: - return "Undefined"; - case MachO::SymbolFlags::Rexported: - return "Reexported"; - } - llvm_unreachable("Unknown llvm::MachO::SymbolFlags enum"); +std::string SymScalar::getFlagString(const MachO::Symbol *Sym) { + if (Sym->getFlags() == SymbolFlags::None) + return {}; + SmallString<64> Flags(" - "); + if (Sym->isThreadLocalValue()) + Flags.append("Thread-Local "); + if (Sym->isWeakDefined()) + Flags.append("Weak-Defined "); + if (Sym->isWeakReferenced()) + Flags.append("Weak-Referenced "); + if (Sym->isUndefined()) + Flags.append("Undefined "); + if (Sym->isReexported()) + Flags.append("Reexported "); + if (Sym->isData()) + Flags.append("Data "); + if (Sym->isText()) + Flags.append("Text "); + + return std::string(Flags); } void SymScalar::print(raw_ostream &OS, std::string Indent, MachO::Target Targ) { if (Val->getKind() == MachO::SymbolKind::ObjectiveCClass) { if (Targ.Arch == MachO::AK_i386 && Targ.Platform == MachO::PLATFORM_MACOS) { OS << Indent << "\t\t" << ((Order == lhs) ? "< " : "> ") - << ObjC1ClassNamePrefix << Val->getName() - << getFlagString(Val->getFlags()) << "\n"; + << ObjC1ClassNamePrefix << Val->getName() << getFlagString(Val) + << "\n"; return; } OS << Indent << "\t\t" << ((Order == lhs) ? "< " : "> ") - << ObjC2ClassNamePrefix << Val->getName() - << getFlagString(Val->getFlags()) << "\n"; + << ObjC2ClassNamePrefix << Val->getName() << getFlagString(Val) << "\n"; } OS << Indent << "\t\t" << ((Order == lhs) ? "< " : "> ") << getSymbolNamePrefix(Val->getKind()) << Val->getName() - << getFlagString(Val->getFlags()) << "\n"; + << getFlagString(Val) << "\n"; } bool checkSymbolEquality(llvm::MachO::InterfaceFile::const_symbol_range LHS, llvm::MachO::InterfaceFile::const_symbol_range RHS) { + if (std::distance(LHS.begin(), LHS.end()) != + std::distance(RHS.begin(), RHS.end())) + return false; return std::equal(LHS.begin(), LHS.end(), RHS.begin(), [&](auto LHS, auto RHS) { return *LHS == *RHS; }); } @@ -204,9 +212,6 @@ std::vector<DiffOutput> getSingleIF(InterfaceFile *Interface, diffAttribute("Swift ABI Version", Output, DiffScalarVal<uint8_t, AD_Diff_Scalar_Unsigned>( Order, Interface->getSwiftABIVersion())); - diffAttribute("InstallAPI", Output, - DiffScalarVal<bool, AD_Diff_Scalar_Bool>( - Order, Interface->isInstallAPI())); diffAttribute("Two Level Namespace", Output, DiffScalarVal<bool, AD_Diff_Scalar_Bool>( Order, Interface->isTwoLevelNamespace())); @@ -341,11 +346,6 @@ DiffEngine::findDifferences(const InterfaceFile *IFLHS, DiffScalarVal<uint8_t, AD_Diff_Scalar_Unsigned>( rhs, IFRHS->getSwiftABIVersion()), "Swift ABI Version")); - if (IFLHS->isInstallAPI() != IFRHS->isInstallAPI()) - Output.push_back(recordDifferences( - DiffScalarVal<bool, AD_Diff_Scalar_Bool>(lhs, IFLHS->isInstallAPI()), - DiffScalarVal<bool, AD_Diff_Scalar_Bool>(rhs, IFRHS->isInstallAPI()), - "InstallAPI")); if (IFLHS->isTwoLevelNamespace() != IFRHS->isTwoLevelNamespace()) Output.push_back(recordDifferences(DiffScalarVal<bool, AD_Diff_Scalar_Bool>( |