Skip to content

Commit

Permalink
On Windows expansion of regex file name patterns is the responsibilit…
Browse files Browse the repository at this point in the history
…y of each

tool. Fix ar to do that.

Differential Revision: https://reviews.llvm.org/D43987

llvm-svn: 326734
  • Loading branch information
dmmikulin committed Mar 5, 2018
1 parent 9e9333a commit 0faf7c8
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 4 deletions.
7 changes: 7 additions & 0 deletions llvm/test/tools/llvm-ar/regex-cmd.test
@@ -0,0 +1,7 @@
RUN: yaml2obj %S/Inputs/elf.yaml -o %t.o

RUN: rm -f %t.ar
RUN: llvm-ar crs %t.ar %t.*
RUN: llvm-ar tv %t.ar | FileCheck %s

CHECK: regex-cmd.test{{.*}}.o
14 changes: 10 additions & 4 deletions llvm/tools/llvm-ar/llvm-ar.cpp
Expand Up @@ -31,6 +31,7 @@
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/PrettyStackTrace.h"
#include "llvm/Support/Process.h"
#include "llvm/Support/Signals.h"
#include "llvm/Support/TargetSelect.h"
#include "llvm/Support/ToolOutputFile.h"
Expand Down Expand Up @@ -869,18 +870,23 @@ int main(int argc, char **argv) {
Stem.find("lib") != StringRef::npos)
return libDriverMain(makeArrayRef(argv, argc));

for (int i = 1; i < argc; i++) {
SmallVector<const char *, 256> Argv;
SpecificBumpPtrAllocator<char> ArgAllocator;
failIfError(errorCodeToError(sys::Process::GetArgumentVector(
Argv, makeArrayRef(argv, argc), ArgAllocator)));

for (unsigned i = 1; i < Argv.size(); 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.
StringRef S = argv[i];
StringRef S = Argv[i];
if (S.startswith("-") &&
S.find_first_not_of(OptionChars, 1) == StringRef::npos) {
argv[i]++;
Argv[i]++;
break;
}
if (S == "--")
Expand All @@ -889,7 +895,7 @@ int main(int argc, char **argv) {

// Have the command line options parsed and handle things
// like --help and --version.
cl::ParseCommandLineOptions(argc, argv,
cl::ParseCommandLineOptions(Argv.size(), Argv.data(),
"LLVM Archiver (llvm-ar)\n\n"
" This program archives bitcode files into single libraries\n"
);
Expand Down

0 comments on commit 0faf7c8

Please sign in to comment.