[PATCH] D39538: [llvm-ar] Support an options string that start with a dash

Martin Storsjö via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Nov 2 13:35:43 PDT 2017


mstorsjo updated this revision to Diff 121361.
mstorsjo added a comment.

Break out of the loop on '--' and once an argument with a stripped dash is found.


https://reviews.llvm.org/D39538

Files:
  test/tools/llvm-ar/default-add.test
  tools/llvm-ar/llvm-ar.cpp


Index: tools/llvm-ar/llvm-ar.cpp
===================================================================
--- tools/llvm-ar/llvm-ar.cpp
+++ tools/llvm-ar/llvm-ar.cpp
@@ -127,6 +127,8 @@
   "  [v] - be verbose about actions taken\n"
 );
 
+static const char OptionChars[] = "dmpqrtxabiosSTucv";
+
 // This enumeration delineates the kinds of operations on an archive
 // that are permitted.
 enum ArchiveOperation {
@@ -879,6 +881,23 @@
       Stem.find("lib") != StringRef::npos)
     return libDriverMain(makeArrayRef(argv, argc));
 
+  for (int i = 1; i < argc; i++) {
+    // If an argument starts with a dash and only contains chars
+    // that belong to the options chars set, remove the dash.
+    // We can't handle it after the command line options parsing
+    // is done, since it will error out on an unrecognized string
+    // starting with a dash.
+    // Make sure this doesn't match the actual llvm-ar specific options
+    // that start with a dash.
+    if (argv[i][0] == '-' &&
+        strspn(&argv[i][1], OptionChars) + 1 == strlen(argv[i])) {
+      argv[i]++;
+      break;
+    }
+    if (!strcmp(argv[i], "--"))
+      break;
+  }
+
   // Have the command line options parsed and handle things
   // like --help and --version.
   cl::ParseCommandLineOptions(argc, argv,
Index: test/tools/llvm-ar/default-add.test
===================================================================
--- test/tools/llvm-ar/default-add.test
+++ test/tools/llvm-ar/default-add.test
@@ -4,7 +4,8 @@
 RUN: rm -f %t.ar
 RUN: llvm-ar crs %t.ar %t-macho.o
 RUN: grep -q __.SYMDEF %t.ar
-RUN: llvm-ar crs %t.ar %t-coff.o
+Test that an option string prefixed by a dash works.
+RUN: llvm-ar -crs %t.ar %t-coff.o
 RUN: grep -q __.SYMDEF %t.ar
 
 RUN: rm -f %t.ar


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D39538.121361.patch
Type: text/x-patch
Size: 1754 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20171102/0b1fe42f/attachment.bin>


More information about the llvm-commits mailing list