[llvm-branch-commits] [lld] 09edd9d - [mac/lld] simplify code using PackedVersion instead of VersionTuple

Nico Weber via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Tue Dec 15 16:27:16 PST 2020


Author: Nico Weber
Date: 2020-12-15T19:23:07-05:00
New Revision: 09edd9df6e1fa8c316de82aac3718cb9adf17f15

URL: https://github.com/llvm/llvm-project/commit/09edd9df6e1fa8c316de82aac3718cb9adf17f15
DIFF: https://github.com/llvm/llvm-project/commit/09edd9df6e1fa8c316de82aac3718cb9adf17f15.diff

LOG: [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

Added: 
    

Modified: 
    lld/MachO/Driver.cpp
    lld/test/MachO/dylib-version.s

Removed: 
    


################################################################################
diff  --git a/lld/MachO/Driver.cpp b/lld/MachO/Driver.cpp
index 8bac9b7b877f..030cbef53049 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 41c3c6135d1d..c2376773e34b 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


        


More information about the llvm-branch-commits mailing list