summaryrefslogtreecommitdiff
path: root/lld/tools
Commit message (Collapse)AuthorAgeFilesLines
* Migrate {starts,ends}with_insensitive to {starts,ends}_with_insensitive (NFC)Kazu Hirata2023-05-161-1/+1
| | | | | | | | | | | | | | This patch migrates uses of StringRef::{starts,ends}with_insensitive to StringRef::{starts,ends}_with_insensitive so that we can use names similar to those used in std::string_view. Note that the llvm/ directory has migrated in commit 6c3ea866e93003e16fc55d3b5cedd3bc371d1fde. I'll post a separate patch to deprecate StringRef::{starts,ends}with_insensitive. Differential Revision: https://reviews.llvm.org/D150506
* [llvm-driver] Pass extra arguments to toolsAlex Brachet2023-02-101-1/+2
| | | | Differential Revision: https://reviews.llvm.org/D137799
* [NFC][TargetParser] Replace uses of llvm/Support/Host.hArchibald Elliott2023-02-101-1/+1
| | | | | | | The forwarding header is left in place because of its use in `polly/lib/External/isl/interface/extract_interface.cc`, but I have added a GCC warning about the fact it is deprecated, because it is used in `isl` from where it is included by Polly.
* [NFC][TargetParser] Remove llvm/ADT/Triple.hArchibald Elliott2023-02-071-1/+1
| | | | | | I also ran `git clang-format` to get the headers in the right order for the new location, which has changed the order of other headers in two files.
* [lld] Fix iwyu problems after 83d59e05b201760e3f364ff6316301d347cbad95Fangrui Song2022-12-281-0/+1
| | | | | The commit transitively includes lld/include/lld/Common/ErrorHandler.h into lld/include/lld/Common/Driver.h, which is not intended.
* [Support] Move TargetParsers to new componentArchibald Elliott2022-12-201-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a fairly large changeset, but it can be broken into a few pieces: - `llvm/Support/*TargetParser*` are all moved from the LLVM Support component into a new LLVM Component called "TargetParser". This potentially enables using tablegen to maintain this information, as is shown in https://reviews.llvm.org/D137517. This cannot currently be done, as llvm-tblgen relies on LLVM's Support component. - This also moves two files from Support which use and depend on information in the TargetParser: - `llvm/Support/Host.{h,cpp}` which contains functions for inspecting the current Host machine for info about it, primarily to support getting the host triple, but also for `-mcpu=native` support in e.g. Clang. This is fairly tightly intertwined with the information in `X86TargetParser.h`, so keeping them in the same component makes sense. - `llvm/ADT/Triple.h` and `llvm/Support/Triple.cpp`, which contains the target triple parser and representation. This is very intertwined with the Arm target parser, because the arm architecture version appears in canonical triples on arm platforms. - I moved the relevant unittests to their own directory. And so, we end up with a single component that has all the information about the following, which to me seems like a unified component: - Triples that LLVM Knows about - Architecture names and CPUs that LLVM knows about - CPU detection logic for LLVM Given this, I have also moved `RISCVISAInfo.h` into this component, as it seems to me to be part of that same set of functionality. If you get link errors in your components after this patch, you likely need to add TargetParser into LLVM_LINK_COMPONENTS in CMake. Differential Revision: https://reviews.llvm.org/D137838
* [lld] Use std::optional in lld.cpp (NFC)Kazu Hirata2022-11-261-1/+2
| | | | | | | This is part of an effort to migrate from llvm::Optional to std::optional: https://discourse.llvm.org/t/deprecating-llvm-optional-x-hasvalue-getvalue-getvalueor/63716
* [lld] Check errors from expanding response filesHans Wennborg2022-11-071-1/+3
| | | | | | | | | | | | | | Previously the response file expansion code would print the error, but lld would not exit, which was odd. lld does response file expansion in the different drivers, but it's also done in main() first, so it's enough to check there. By checking for these errors we would have caught when D136090 introduced a bug that made lld print errors for response files which contained "-rpath @foo". Differental revision: https://reviews.llvm.org/D137477
* [llvm-driver] Add lldAlex Brachet2022-10-132-4/+14
| | | | | | | | The llvm-driver, enabled with LLVM_TOOL_LLVM_DRIVER_BUILD combines many llvm executables into one to save overall toolchain size. This patch adds the capability for lld to be part of the llvm-driver. Differential Revision: https://reviews.llvm.org/D127472
* [LLD][ELF] Add FORCE_LLD_DIAGNOSTICS_CRASH to force LLD to crashBen Dunbobbin2022-07-051-0/+6
| | | | | | | | | | Add FORCE_LLD_DIAGNOSTICS_CRASH inspired by the existing FORCE_CLANG_DIAGNOSTICS_CRASH. This is particularly useful for people customizing LLD as they may want to modify the crash reporting behavior. Differential Revision: https://reviews.llvm.org/D128195
* [LLD] Fix issue in HIP due to unspecified order of evaluation of the ↵Alexandre Ganea2022-02-081-2/+2
| | | | | | | | | | | | | | function object This fixes the issue raised in https://reviews.llvm.org/D108850#3303452 Before C++17, the function object is evaluated in a unspecified order. In the following example: https://godbolt.org/z/8ao4vdsr7 the function object is either evaluated before or after the arguments, depending on the compiler. With MSVC and /std:c++14 the function object is evaluated after the arguments; with clang and gcc, it is evaluated before. With C++17, the function object is guaranteed to be evaluated before the arguments, see: https://riptutorial.com/cplusplus/example/19369/evaluation-order-of-function-arguments In our case, the issue was that the `args` conversion to `ArrayRef` was evaluated before the lambda call `link`, which internally was calling `parseFlavor()`, which in turned modified `args`. We ended with an `ArrayRef` argument that reflected the previous contents of `args`. Add coverage for `-flavor` which we didn't have before. Differential Revision: https://reviews.llvm.org/D119278
* Re-land [LLD] Remove global state in lldCommonAlexandre Ganea2022-01-201-19/+35
| | | | | | | | | | Move all variables at file-scope or function-static-scope into a hosting structure (lld::CommonLinkerContext) that lives at lldMain()-scope. Drivers will inherit from this structure and add their own global state, in the same way as for the existing COFFLinkerContext. See discussion in https://lists.llvm.org/pipermail/llvm-dev/2021-June/151184.html The previous land f860fe362282ed69b9d4503a20e5d20b9a041189 caused issues in https://lab.llvm.org/buildbot/#/builders/123/builds/8383, fixed by 22ee510dac9440a74b2e5b3fe3ff13ccdbf55af3. Differential Revision: https://reviews.llvm.org/D108850
* Revert [LLD] Remove global state in lldCommonAlexandre Ganea2022-01-161-33/+16
| | | | It seems to be causing issues on https://lab.llvm.org/buildbot/#/builders/123/builds/8383
* [LLD] Remove global state in lldCommonAlexandre Ganea2022-01-161-16/+33
| | | | | | | | Move all variables at file-scope or function-static-scope into a hosting structure (lld::CommonLinkerContext) that lives at lldMain()-scope. Drivers will inherit from this structure and add their own global state, in the same way as for the existing COFFLinkerContext. See discussion in https://lists.llvm.org/pipermail/llvm-dev/2021-June/151184.html Differential Revision: https://reviews.llvm.org/D108850
* [lld][CMake] Use `GNUInstallDirs` to support custom installation dirsJohn Ericson2021-12-311-1/+1
| | | | | | | | | Extracted from D99484. My new plan is to start from the outside and work inward. Reviewed By: stephenneuendorffer Differential Revision: https://reviews.llvm.org/D115568
* [lld-macho] Remove old macho darwin lldKeith Smiley2021-12-022-12/+6
| | | | | | | | | During the llvm round table it was generally agreed that the newer macho lld implementation is feature complete enough to replace the old implementation entirely. This will reduce confusion for new users who aren't aware of the history. Differential Revision: https://reviews.llvm.org/D114842
* [lld] Enable ANSI escape code for WindowsFangrui Song2021-09-091-0/+2
| | | | | Buffered diagnostics need ENABLE_VIRTUAL_TERMINAL_PROCESSING after D87272. Do it unconditionally like FileCheck.
* [CMake][gn] lldMachO=>lldMachOOld, lldMachO2=>lldMachOFangrui Song2021-08-041-1/+1
| | | | | | | | | Now that D95204 switched default to new Darwin backend, rename some CMake targets to match. Reviewed By: #lld-macho, smeenai, int3 Differential Revision: https://reviews.llvm.org/D107516
* [lld] Replace LLVM_ATTRIBUTE_NORETURN with [[noreturn]]Fangrui Song2021-07-271-1/+1
| | | | [[noreturn]] can be used since 2016 when the minimum compiler requirement was bumped to GCC 4.8/MSVC 2015.
* [lld] Rename StringRef _lower() method calls to _insensitive()Martin Storsjö2021-06-251-1/+1
|
* [lld-macho] Fix BUILD_SHARED_LIBS buildAlex Richardson2021-06-031-4/+0
| | | | | | | | | | | | | | ca6751043d8899b12baeb48621e61fb352cfee09 added a dependency on XAR (at least for the shared libs build), so without this change we get the following linker error: Undefined symbols for architecture x86_64: "_xar_close", referenced from: lld::macho::BitcodeBundleSection::finalize() in SyntheticSections.cpp.o Reviewed By: #lld-macho, int3, thakis Differential Revision: https://reviews.llvm.org/D100999
* Fix lld macho standalone build by including llvm/Config/llvm-config.h ↵Mariusz Ceier2021-05-191-1/+1
| | | | | | | | | | | | | | | | instead of llvm/Config/config.h lld/MachO/Driver.cpp and lld/MachO/SyntheticSections.cpp include llvm/Config/config.h which doesn't exist when building standalone lld. This patch replaces llvm/Config/config.h include with llvm/Config/llvm-config.h just like it is in lld/ELF/Driver.cpp and HAVE_LIBXAR with LLVM_HAVE_LIXAR and moves LLVM_HAVE_LIBXAR from config.h to llvm-config.h Also it adds LLVM_HAVE_LIBXAR to LLVMConfig.cmake and links liblldMachO2.so with XAR_LIB if LLVM_HAVE_LIBXAR is set. Differential Revision: https://reviews.llvm.org/D102084
* [lld] Delete unused includes. NFCFangrui Song2021-04-191-6/+0
|
* [lld-macho] Initial groundwork for -bitcode_bundleJez Ng2021-04-161-0/+4
| | | | | | | | | | This diff creates an empty XAR file and copies it into `__LLVM,__bundle`. Follow-up work will actually populate the contents of that XAR. Reviewed By: #lld-macho, gkm Differential Revision: https://reviews.llvm.org/D100650
* [lld-macho] Switch default to new Darwin backendJez Ng2021-03-012-6/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | The new Darwin backend for LLD is now able to link reasonably large real-world programs on x86_64. For instance, we have achieved self-hosting for the X86_64 target, where all LLD tests pass when building lld with itself on macOS. As such, we would like to make it the default back-end. The new port is now named `ld64.lld`, and the old port remains accessible as `ld64.lld.darwinold` This [annoucement email][1] has some context. (But note that, unlike what the email says, we are no longer doing this as part of the LLVM 12 branch cut -- instead we will go into LLVM 13.) Numerous mechanical test changes were required to make this change; in the interest of creating something that's reviewable on Phabricator, I've split out the boring changes into a separate diff (D95905). I plan to merge its contents with those in this diff before landing. (@gkm made the original draft of this diff, and he has agreed to let me take over.) [1]: https://lists.llvm.org/pipermail/llvm-dev/2021-January/147665.html Reviewed By: #lld-macho, thakis Differential Revision: https://reviews.llvm.org/D95204
* lld: Fix darwinnew symlink name added in e16c0a9a68971Nico Weber2020-11-241-1/+1
|
* clang+lld: Improve clang+ld.darwinnew.lld interaction, pass -demangleNico Weber2020-11-241-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | This patch: - adds an ld64.lld.darwinnew symlink for lld, to go with f2710d4b576, so that `clang -fuse-ld=lld.darwinnew` can be used to test new Mach-O lld while it's in bring-up. (The expectation is that we'll remove this again once new Mach-O lld is the defauld and only Mach-O lld.) - lets the clang driver know if the linker is lld (currently only triggered if `-fuse-ld=lld` or `-fuse-ld=lld.darwinnew` is passed). Currently only used for the next point, but could be used to implement other features that need close coordination between compiler and linker, e.g. having a diag for calling `clang++` instead of `clang` when link errors are caused by a missing C++ stdlib. - lets the clang driver pass `-demangle` to Mach-O lld (both old and new), in addition to ld64 - implements -demangle for new Mach-O lld - changes demangleItanium() to accept _Z, __Z, ___Z, ____Z prefixes (and updates one test added in D68014). Mach-O has an extra underscore for symbols, and the three (or, on Mach-O, four) underscores are used for block names. Differential Revision: https://reviews.llvm.org/D91884
* lld/mach-o: Infer darwinnew from filename ld64.lld.darwinnew tooNico Weber2020-11-161-1/+1
| | | | | | | | | | | | | | `-flavor` is difficult to use through the clang driver since it must be the first argument. clang's `-fuse-ld=foo` looks for `ld64.foo` when targeting darwin, so it's easiest if darwinnew accepts some `ld64.foo`. Let's go with `ld64.lld.darwinnew`, so that `clang -fuse-ld=lld.darwinnew` does the right thing (assuming a symlink with the name `ld64.ld.darwinnew exists in the right place). This is temporary until darwinnew replaces ld64.lld, and it only exists to make testing the new lld port easier.
* [LLD][COFF] When using LLD-as-a-library, always prevent re-entrance on failuresAlexandre Ganea2020-11-121-11/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a follow-up for D70378 (Cover usage of LLD as a library). While debugging an intermittent failure on a bot, I recalled this scenario which causes the issue: 1.When executing lld/test/ELF/invalid/symtab-sh-info.s L45, we reach lld::elf::Obj-File::ObjFile() which goes straight into its base ELFFileBase(), then ELFFileBase::init(). 2.At that point fatal() is thrown in lld/ELF/InputFiles.cpp L381, leaving a half-initialized ObjFile instance. 3.We then end up in lld::exitLld() and since we are running with LLD_IN_TEST, we hapily restore the control flow to CrashRecoveryContext::RunSafely() then back in lld::safeLldMain(). 4.Before this patch, we called errorHandler().reset() just after, and this attempted to reset the associated SpecificAlloc<ObjFile<ELF64LE>>. That tried to free the half-initialized ObjFile instance, and more precisely its ObjFile::dwarf member. Sometimes that worked, sometimes it failed and was catched by the CrashRecoveryContext. This scenario was the reason we called errorHandler().reset() through a CrashRecoveryContext. But in some rare cases, the above repro somehow corrupted the heap, creating a stack overflow. When the CrashRecoveryContext's filter (that is, __except (ExceptionFilter(GetExceptionInformation()))) tried to handle the exception, it crashed again since the stack was exhausted -- and that took the whole application down. That is the issue seen on the bot. Locally it happens about 1 times out of 15. Now this situation can happen anywhere in LLD. Since catching stack overflows is not a reliable scenario ATM when using CrashRecoveryContext, we're now preventing further re-entrance when such failures occur, by signaling lld::SafeReturn::canRunAgain=false. When running with LLD_IN_TEST=2 (or above), only one iteration will be executed, instead of two. Differential Revision: https://reviews.llvm.org/D88348
* [LLD][COFF] Cover usage of LLD-as-a-library in testsAlexandre Ganea2020-09-241-17/+92
| | | | | | | | | In lit tests, we run each LLD invocation twice (LLD_IN_TEST=2), without shutting down the process in-between. This ensures a full cleanup is properly done between runs. Only active for the COFF driver for now. Other drivers still use LLD_IN_TEST=1 which executes just one iteration with full cleanup, like before. When the environment variable LLD_IN_TEST is unset, a shortcut is taken, only one iteration is executed, no cleanup for faster exit, like before. A public API, lld::safeLldMain(), is also available when using LLD as a library. Differential Revision: https://reviews.llvm.org/D70378
* [LLD] Allow configuring default ld.lld backendMateusz Mikuła2020-09-151-0/+5
| | | | | | | | | | | | | | | The motivation for this is ld.lld --help targeting MinGW which currently prints help for the ELF backend unless -m i386pe{,p} is added. This confuses build systems that grep through linker help to find supported flags. This matches LD from Binutils which always prints help for MinGW when configured to target it. After this change, the backend can still be overridden to any supported ELF/MinGW target by using correct -m <arch>. Differential Revision: https://reviews.llvm.org/D87418
* Reland D78837 [lld] Remove special cases from default ld driver mode.Fangrui Song2020-04-291-9/+1
| | | | | | | | | | | | Drops the behavior from rL217112. Use the Gnu driver mode by default for all platforms when ld is invoked. Other names for the program (such as link or ld64) continue working as before. Reviewed By: MaskRay, srhines, smeenai, ruiu Differential Revision: https://reviews.llvm.org/D78837
* Revert "[lld] Remove special cases from default ld driver mode."Dan Albert2020-04-291-1/+9
| | | | | | This reverts commit da093c388fc9a559295faa6265cb8b1643ce9eeb. Broke a test on Darwin. Will fix the test and resubmit.
* [lld] Remove special cases from default ld driver mode.Dan Albert2020-04-291-9/+1
| | | | | | | | | | | | | | | | | Summary: Use the Gnu driver mode by default for all platforms when ld is invoked. Other names for the program (such as link or ld64) continue working as before. Reviewers: MaskRay, int3, srhines, smeenai, ruiu Reviewed By: MaskRay, srhines, smeenai, ruiu Subscribers: smeenai, srhines, nickdesaulniers, llvm-commits Tags: #lld, #llvm Differential Revision: https://reviews.llvm.org/D78837
* Enable new passmanager plugin support for LTO.Eli Friedman2020-04-141-1/+0
| | | | | | | | | | | This should make both static and dynamic NewPM plugins work with LTO. And as a bonus, it makes static linking of OldPM plugins more reliable for plugins with both an OldPM and NewPM interface. I only implemented the command-line flag to specify NewPM plugins in llvm-lto2, to show it works. Support can be added for other tools later. Differential Revision: https://reviews.llvm.org/D76866
* Reland D75382 "[lld] Initial commit for new Mach-O backend"Fangrui Song2020-04-022-4/+9
| | | | | | With a fix for http://lab.llvm.org:8011/builders/clang-cmake-armv8-lld/builds/3636 Also trims some unneeded dependencies.
* Revert "[lld] Initial commit for new Mach-O backend"Oliver Stannard2020-04-022-9/+4
| | | | | | | This is causing buildbot failures on 32-bit hosts, for example: http://lab.llvm.org:8011/builders/clang-cmake-armv8-lld/builds/3636 This reverts commit 03f43b3aca363e16c45d8733400fd0083b1af4d8.
* [lld] Initial commit for new Mach-O backendJez Ng2020-03-312-4/+9
| | | | | | | | | | | | | | | | | | | | | Summary: This is the first commit for the new Mach-O backend, designed to roughly follow the architecture of the existing ELF and COFF backends, and building off work that @ruiu and @pcc did in a branch a while back. Note that this is a very stripped-down commit with the bare minimum of functionality for ease of review. We'll be following up with more diffs soon. Currently, we're able to generate a simple "Hello World!" executable that runs on OS X Catalina (and possibly on earlier OS X versions; I haven't tested them). (This executable can be obtained by compiling `test/MachO/relocations.s`.) We're mocking out a few load commands to achieve this -- for example, we can't load dynamic libraries, but Catalina requires binaries to be linked against `dyld`, so we hardcode the emission of a `LC_LOAD_DYLIB` command. Other mocked out load commands include LC_SYMTAB and LC_DYSYMTAB. Differential Revision: https://reviews.llvm.org/D75382
* [lld] Enabling loading LLVM pass pluginsEli Friedman2020-03-232-0/+5
| | | | | | | | | Add the relevant magic bits to allow "-mllvm=-load=plugin.so" etc. This is now using export_executable_symbols_for_plugins, so symbols are only exported if plugins are enabled. Differential Revision: https://reviews.llvm.org/D75879
* Make it possible to redirect not only errs() but also outs()Rui Ueyama2019-11-181-6/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | This change is for those who use lld as a library. Context: https://reviews.llvm.org/D70287 This patch adds a new parmeter to lld::*::link() so that we can pass an raw_ostream object representing stdout. Previously, lld::*::link() took only an stderr object. Justification for making stdoutOS and stderrOS mandatory: I wanted to make link() functions to take stdout and stderr in that order. However, if we change the function signature from bool link(ArrayRef<const char *> args, bool canExitEarly, raw_ostream &stderrOS = llvm::errs()); to bool link(ArrayRef<const char *> args, bool canExitEarly, raw_ostream &stdoutOS = llvm::outs(), raw_ostream &stderrOS = llvm::errs()); , then the meaning of existing code that passes stderrOS silently changes (stderrOS would be interpreted as stdoutOS). So, I chose to make existing code not to compile, so that developers can fix their code. Differential Revision: https://reviews.llvm.org/D70292
* Move endian constant from Host.h to SwapByteOrder.h, prune includeReid Kleckner2019-10-191-0/+1
| | | | | | | | | | | | | | Works on this dependency chain: ArrayRef.h -> Hashing.h -> --CUT-- Host.h -> StringMap.h / StringRef.h ArrayRef is very popular, but Host.h is rarely needed. Move the IsBigEndianHost constant to SwapByteOrder.h. Clients of that header are more likely to need it. llvm-svn: 375316
* Fix build breakage on Darwin.Rui Ueyama2019-07-111-1/+1
| | | | llvm-svn: 365734
* [Coding style change][lld] Rename variables for non-ELF portsRui Ueyama2019-07-111-44/+44
| | | | | | | | | | | This patch does the same thing as r365595 to other subdirectories, which completes the naming style change for the entire lld directory. With this, the naming style conversion is complete for lld. Differential Revision: https://reviews.llvm.org/D64473 llvm-svn: 365730
* Fix -DBUILD_SHARED_LIBS=on build after r362977Fangrui Song2019-06-111-0/+1
| | | | | | | The executable has an undefined reference to lld::Saver, the library should be explicitly linked. llvm-svn: 363023
* [Driver] Look for -m in response files as wellMartin Storsjo2019-06-101-3/+25
| | | | | | | | | | Also expand response files in the MinGW driver. This should fix PR42135. Differential Revision: https://reviews.llvm.org/D63024 llvm-svn: 362977
* Update the file headers across all of the LLVM projects in the monorepoChandler Carruth2019-01-191-4/+3
| | | | | | | | | | | | | | | | | to reflect the new license. We understand that people may be surprised that we're moving the header entirely to discuss the new license. We checked this carefully with the Foundation's lawyer and we believe this is the correct approach. Essentially, all code in the project is now made available by the LLVM project under our new license, so you will see that the license headers include that license only. Some of our contributors have contributed code under our old license, and accordingly, we have retained a copy of our old license notice in the top-level files in each project and repository. llvm-svn: 351636
* Fix typo in error message. NFC.Azharuddin Mohammed2018-09-131-1/+1
| | | | | | | | | | | | | | Summary: It should be "wasm-ld", not "wasm-lld". Reviewers: ruiu Reviewed By: ruiu Subscribers: aheejin, sunfish, llvm-commits Differential Revision: https://reviews.llvm.org/D51767 llvm-svn: 342144
* Add wasm-ld to help text Improve error textSam Clegg2018-07-171-1/+2
| | | | | | Differential Revision: https://reviews.llvm.org/D48838 llvm-svn: 337300
* [Darwin] Use errorHandler from liblldCommonBrian Gesiak2018-06-121-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Summary: Error handling in liblldCore and the Darwin toolchain prints to an output stream. A TODO in the project explained that a diagnostics interface resembling Clang's should be added. For now, the simple diagnostics interface defined in liblldCommon seems like an improvement. It prints colors when they're available, uses locks for thread-safety, and abstracts away the `"error: "` and newline literal strings that litter the Darwin toolchain code. To use the liblldCommon error handler, a link dependency is added to the liblldDriver library. Test Plan: 1. check-lld 2. Invoke `ld64.lld -r` in a terminal that supports color output. Confirm that "ld64.lld: error: -arch not specified and could not be inferred" is output, and that the "error:" is colored red! Reviewers: ruiu, smeenai Reviewed By: ruiu Subscribers: mgorny, llvm-commits Differential Revision: https://reviews.llvm.org/D47998 llvm-svn: 334466
* Expand comments.Rui Ueyama2018-06-081-5/+15
| | | | llvm-svn: 334250