aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNico Weber <thakis@chromium.org>2020-12-15 16:37:37 -0500
committerNico Weber <thakis@chromium.org>2020-12-15 19:23:07 -0500
commit09edd9df6e1fa8c316de82aac3718cb9adf17f15 (patch)
tree4b4c4bb0cdcb464e2fd7a3116e4554d3798868ee
parent3a0352b85c14cb83150df62a9ea9ac3c4129060d (diff)
downloadllvm-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.cpp28
-rw-r--r--lld/test/MachO/dylib-version.s6
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