From 91160d851e767cb1ee77b5899a213b2a5a64ad98 Mon Sep 17 00:00:00 2001 From: David Majnemer Date: Mon, 31 Oct 2016 17:11:31 +0000 Subject: [PATCH] Fix an unconditional break in checkMachOAndArchFlags Found by PVS-Studio. llvm-svn: 285598 --- llvm/tools/llvm-nm/llvm-nm.cpp | 4 +-- llvm/tools/llvm-objdump/MachODump.cpp | 44 +++++++++++++++----------------- llvm/tools/llvm-size/llvm-size.cpp | 48 ++++++++++++++++------------------- 3 files changed, 44 insertions(+), 52 deletions(-) diff --git a/llvm/tools/llvm-nm/llvm-nm.cpp b/llvm/tools/llvm-nm/llvm-nm.cpp index 0477dd1..d9e7e1e 100644 --- a/llvm/tools/llvm-nm/llvm-nm.cpp +++ b/llvm/tools/llvm-nm/llvm-nm.cpp @@ -1051,9 +1051,9 @@ dumpSymbolNamesFromObject(SymbolicFile &Obj, bool printName, // architectures was specificed. If not then an error is generated and this // routine returns false. Else it returns true. static bool checkMachOAndArchFlags(SymbolicFile *O, std::string &Filename) { - MachOObjectFile *MachO = dyn_cast(O); + auto *MachO = dyn_cast(O); - if (!MachO || ArchAll || ArchFlags.size() == 0) + if (!MachO || ArchAll || ArchFlags.empty()) return true; MachO::mach_header H; diff --git a/llvm/tools/llvm-objdump/MachODump.cpp b/llvm/tools/llvm-objdump/MachODump.cpp index 2c101f6..854f465 100644 --- a/llvm/tools/llvm-objdump/MachODump.cpp +++ b/llvm/tools/llvm-objdump/MachODump.cpp @@ -1186,30 +1186,26 @@ static void DumpInfoPlistSectionContents(StringRef Filename, // architectures were specified. If not then an error is generated and this // routine returns false. Else it returns true. static bool checkMachOAndArchFlags(ObjectFile *O, StringRef Filename) { - if (isa(O) && !ArchAll && ArchFlags.size() != 0) { - MachOObjectFile *MachO = dyn_cast(O); - bool ArchFound = false; - MachO::mach_header H; - MachO::mach_header_64 H_64; - Triple T; - if (MachO->is64Bit()) { - H_64 = MachO->MachOObjectFile::getHeader64(); - T = MachOObjectFile::getArchTriple(H_64.cputype, H_64.cpusubtype); - } else { - H = MachO->MachOObjectFile::getHeader(); - T = MachOObjectFile::getArchTriple(H.cputype, H.cpusubtype); - } - unsigned i; - for (i = 0; i < ArchFlags.size(); ++i) { - if (ArchFlags[i] == T.getArchName()) - ArchFound = true; - break; - } - if (!ArchFound) { - errs() << "llvm-objdump: file: " + Filename + " does not contain " - << "architecture: " + ArchFlags[i] + "\n"; - return false; - } + auto *MachO = dyn_cast(O); + + if (!MachO || ArchAll || ArchFlags.empty()) + return true; + + MachO::mach_header H; + MachO::mach_header_64 H_64; + Triple T; + if (MachO->is64Bit()) { + H_64 = MachO->MachOObjectFile::getHeader64(); + T = MachOObjectFile::getArchTriple(H_64.cputype, H_64.cpusubtype); + } else { + H = MachO->MachOObjectFile::getHeader(); + T = MachOObjectFile::getArchTriple(H.cputype, H.cpusubtype); + } + if (none_of(ArchFlags, [&](const std::string &Name) { + return Name == T.getArchName(); + })) { + errs() << "llvm-objdump: " + Filename + ": No architecture specified.\n"; + return false; } return true; } diff --git a/llvm/tools/llvm-size/llvm-size.cpp b/llvm/tools/llvm-size/llvm-size.cpp index c274649..1e4c436 100644 --- a/llvm/tools/llvm-size/llvm-size.cpp +++ b/llvm/tools/llvm-size/llvm-size.cpp @@ -498,36 +498,32 @@ static void printObjectSectionSizes(ObjectFile *Obj) { } } -/// Checks to see if the @p o ObjectFile is a Mach-O file and if it is and there +/// Checks to see if the @p O ObjectFile is a Mach-O file and if it is and there /// is a list of architecture flags specified then check to make sure this /// Mach-O file is one of those architectures or all architectures was /// specificed. If not then an error is generated and this routine returns /// false. Else it returns true. -static bool checkMachOAndArchFlags(ObjectFile *o, StringRef file) { - if (isa(o) && !ArchAll && ArchFlags.size() != 0) { - MachOObjectFile *MachO = dyn_cast(o); - bool ArchFound = false; - MachO::mach_header H; - MachO::mach_header_64 H_64; - Triple T; - if (MachO->is64Bit()) { - H_64 = MachO->MachOObjectFile::getHeader64(); - T = MachOObjectFile::getArchTriple(H_64.cputype, H_64.cpusubtype); - } else { - H = MachO->MachOObjectFile::getHeader(); - T = MachOObjectFile::getArchTriple(H.cputype, H.cpusubtype); - } - unsigned i; - for (i = 0; i < ArchFlags.size(); ++i) { - if (ArchFlags[i] == T.getArchName()) - ArchFound = true; - break; - } - if (!ArchFound) { - errs() << ToolName << ": file: " << file - << " does not contain architecture: " << ArchFlags[i] << ".\n"; - return false; - } +static bool checkMachOAndArchFlags(ObjectFile *O, StringRef Filename) { + auto *MachO = dyn_cast(O); + + if (!MachO || ArchAll || ArchFlags.empty()) + return true; + + MachO::mach_header H; + MachO::mach_header_64 H_64; + Triple T; + if (MachO->is64Bit()) { + H_64 = MachO->MachOObjectFile::getHeader64(); + T = MachOObjectFile::getArchTriple(H_64.cputype, H_64.cpusubtype); + } else { + H = MachO->MachOObjectFile::getHeader(); + T = MachOObjectFile::getArchTriple(H.cputype, H.cpusubtype); + } + if (none_of(ArchFlags, [&](const std::string &Name) { + return Name == T.getArchName(); + })) { + error(Filename + ": No architecture specified"); + return false; } return true; } -- 2.7.4