diff options
author | Nico Weber <thakis@chromium.org> | 2020-12-15 16:37:37 -0500 |
---|---|---|
committer | Nico Weber <thakis@chromium.org> | 2020-12-15 19:23:07 -0500 |
commit | 09edd9df6e1fa8c316de82aac3718cb9adf17f15 (patch) | |
tree | 4b4c4bb0cdcb464e2fd7a3116e4554d3798868ee | |
parent | 3a0352b85c14cb83150df62a9ea9ac3c4129060d (diff) | |
download | llvm-09edd9df6e1fa8c316de82aac3718cb9adf17f15.zip llvm-09edd9df6e1fa8c316de82aac3718cb9adf17f15.tar.gz llvm-09edd9df6e1fa8c316de82aac3718cb9adf17f15.tar.bz2 |
[mac/lld] simplify code using PackedVersion instead of VersionTuple
PackedVersion already does the correct range checks.
No behavior change.
Differential Revision: https://reviews.llvm.org/D93338
-rw-r--r-- | lld/MachO/Driver.cpp | 28 | ||||
-rw-r--r-- | lld/test/MachO/dylib-version.s | 6 |
2 files changed, 7 insertions, 27 deletions
diff --git a/lld/MachO/Driver.cpp b/lld/MachO/Driver.cpp index 8bac9b7..030cbef 100644 --- a/lld/MachO/Driver.cpp +++ b/lld/MachO/Driver.cpp @@ -40,6 +40,7 @@ #include "llvm/Support/Path.h" #include "llvm/Support/TarWriter.h" #include "llvm/Support/TargetSelect.h" +#include "llvm/TextAPI/MachO/PackedVersion.h" #include <algorithm> @@ -673,34 +674,13 @@ static uint32_t parseDylibVersion(const opt::ArgList& args, unsigned id) { return 0; } - llvm::VersionTuple version; - if (version.tryParse(arg->getValue()) || version.getBuild().hasValue()) { + PackedVersion version; + if (!version.parse32(arg->getValue())) { error(arg->getAsString(args) + ": malformed version"); return 0; } - unsigned major = version.getMajor(); - if (major > UINT16_MAX) { - error(arg->getAsString(args) + ": component " + Twine(major) + - " out of range"); - return 0; - } - - unsigned minor = version.getMinor().getValueOr(0); - if (minor > UINT8_MAX) { - error(arg->getAsString(args) + ": component " + Twine(minor) + - " out of range"); - return 0; - } - - unsigned subminor = version.getSubminor().getValueOr(0); - if (subminor > UINT8_MAX) { - error(arg->getAsString(args) + ": component " + Twine(subminor) + - " out of range"); - return 0; - } - - return (major << 16) | (minor << 8) | subminor; + return version.rawValue(); } bool macho::link(llvm::ArrayRef<const char *> argsArr, bool canExitEarly, diff --git a/lld/test/MachO/dylib-version.s b/lld/test/MachO/dylib-version.s index 41c3c61..c237677 100644 --- a/lld/test/MachO/dylib-version.s +++ b/lld/test/MachO/dylib-version.s @@ -25,19 +25,19 @@ # RUN: -compatibility_version 80000.1 -current_version 1.2.3 2>&1 | \ # RUN: FileCheck --check-prefix=BADMAJOR %s -# BADMAJOR: error: -compatibility_version 80000.1: component 80000 out of range +# BADMAJOR: error: -compatibility_version 80000.1: malformed version # RUN: not %lld -dylib -o %t/executable %t.o -o /dev/null \ # RUN: -compatibility_version 8.300 -current_version 1.2.3 2>&1 | \ # RUN: FileCheck --check-prefix=BADMINOR %s -# BADMINOR: error: -compatibility_version 8.300: component 300 out of range +# BADMINOR: error: -compatibility_version 8.300: malformed version # RUN: not %lld -dylib -o %t/executable %t.o -o /dev/null \ # RUN: -compatibility_version 8.8.300 -current_version 1.2.3 2>&1 | \ # RUN: FileCheck --check-prefix=BADSUBMINOR %s -# BADSUBMINOR: error: -compatibility_version 8.8.300: component 300 out of range +# BADSUBMINOR: error: -compatibility_version 8.8.300: malformed version # RUN: %lld -dylib -o %t/executable %t.o -o %t.dylib \ # RUN: -compatibility_version 1.2.3 -current_version 2.5.6 |