Go to file
Reid Kleckner f6968d886a [Support] Avoid calling CommandLineToArgvW from shell32.dll
Summary:
Shell32.dll depends on gdi32.dll and user32.dll, which are mostly DLLs
for Windows GUI functionality. LLVM's utilities don't typically need GUI
functionality, and loading these DLLs seems to be slowing down startup.
Also, we already have an implementation of Windows command line
tokenization in cl::TokenizeWindowsCommandLine, so we can just use it.

The goal is to get the original argv in UTF-8, so that it can pass
through most LLVM string APIs. A Windows process starts life with a
UTF-16 string for its command line, and it can be retreived with
GetCommandLineW from kernel32.dll.

Previously, we would:
1. Get the wide command line
2. Call CommandLineToArgvW to handle quoting rules and separate it into
   arguments.
3. For each wide argument, expand wildcards (* and ?) using
   FindFirstFileW.
4. Convert each argument to UTF-8

Now we:
1. Get the wide command line, convert the whole thing to UTF-8
2. Tokenize the UTF-8 command line with cl::TokenizeWindowsCommandLine
3. For each argument, expand wildcards if present
   - This requires converting back to UTF-16 to call FindFirstFileW
   - Results of FindFirstFileW must be converted back to UTF-8

Reviewers: zturner

Subscribers: hiraditya, llvm-commits

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

llvm-svn: 341988
2018-09-11 20:22:39 +00:00
clang [gcov] Update a clang test for r341977 2018-09-11 19:42:58 +00:00
clang-tools-extra [clang-tidy] Handle sugared reference types in ExprMutationAnalyzer 2018-09-11 20:05:37 +00:00
compiler-rt [libFuzzer] [Windows] Include windows.h and psapi.h with lowercase 2018-09-11 19:11:54 +00:00
debuginfo-tests Revert "(Retry) Add a basic integration test for C++ smart pointers" 2018-08-20 19:53:33 +00:00
libclc amdgcn: Use __constant AS for amdgcn builtins. 2018-08-03 15:14:08 +00:00
libcxx Fix PR# 38900 - don't call swap inside of random_shuffle when we'd be swapping an element with itself 2018-09-11 18:33:45 +00:00
libcxxabi Port my recent changes from LLVM copy of the demangler: 2018-08-24 23:30:26 +00:00
libunwind [CMake] Don't use -rtlib=compiler-rt with -nodefaultlibs. 2018-09-04 20:57:50 +00:00
lld Simplify. 2018-09-11 14:37:27 +00:00
lldb Remove undefined behavior around the use of StateType 2018-09-11 16:08:05 +00:00
llgo Update copyright year to 2018. 2018-06-18 12:22:17 +00:00
llvm [Support] Avoid calling CommandLineToArgvW from shell32.dll 2018-09-11 20:22:39 +00:00
openmp [OPENMP]Increment iterator when the loop is continued. 2018-09-11 17:16:26 +00:00
parallel-libs Update copyright year to 2018. 2018-06-18 12:22:17 +00:00
polly [PerfMonitor] Fix rdtscp callsites 2018-09-11 14:17:44 +00:00
README.md

README.md

Low Level Virtual Machine (LLVM)

This directory and its subdirectories contain source code for LLVM, a toolkit for the construction of highly optimized compilers, optimizers, and runtime environments.