diff options
author | David Majnemer <david.majnemer@gmail.com> | 2016-10-31 17:11:31 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2016-10-31 17:11:31 +0000 |
commit | 91160d851e767cb1ee77b5899a213b2a5a64ad98 (patch) | |
tree | 0fe7337de482314b93ddd728f7973bf0afcf4ed5 /llvm/tools/llvm-objdump | |
parent | f5c0689e92ec46a7f3ec06f4dd8725c9d858b0dd (diff) | |
download | bcm5719-llvm-91160d851e767cb1ee77b5899a213b2a5a64ad98.tar.gz bcm5719-llvm-91160d851e767cb1ee77b5899a213b2a5a64ad98.zip |
Fix an unconditional break in checkMachOAndArchFlags
Found by PVS-Studio.
llvm-svn: 285598
Diffstat (limited to 'llvm/tools/llvm-objdump')
-rw-r--r-- | llvm/tools/llvm-objdump/MachODump.cpp | 44 |
1 files changed, 20 insertions, 24 deletions
diff --git a/llvm/tools/llvm-objdump/MachODump.cpp b/llvm/tools/llvm-objdump/MachODump.cpp index 2c101f65bbe..854f465fdd5 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<MachOObjectFile>(O) && !ArchAll && ArchFlags.size() != 0) { - MachOObjectFile *MachO = dyn_cast<MachOObjectFile>(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<MachOObjectFile>(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; } |