summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-objdump
diff options
context:
space:
mode:
authorDavid Majnemer <david.majnemer@gmail.com>2016-10-31 17:11:31 +0000
committerDavid Majnemer <david.majnemer@gmail.com>2016-10-31 17:11:31 +0000
commit91160d851e767cb1ee77b5899a213b2a5a64ad98 (patch)
tree0fe7337de482314b93ddd728f7973bf0afcf4ed5 /llvm/tools/llvm-objdump
parentf5c0689e92ec46a7f3ec06f4dd8725c9d858b0dd (diff)
downloadbcm5719-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.cpp44
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;
}
OpenPOWER on IntegriCloud