150 Commits

Author SHA1 Message Date
Nico Weber
42f5049fce llvm-undname: Use UNREACHABLE after exhaustive switch returning everywhere
No behavior change.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@358241 91177308-0d34-0410-b5e6-96231b3b80d8
2019-04-11 23:23:00 +00:00
Nico Weber
0c94d6f746 llvm-undname: Name a bool param, no behavior change
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@358240 91177308-0d34-0410-b5e6-96231b3b80d8
2019-04-11 23:20:18 +00:00
Nico Weber
4b4fd781e2 llvm-undname: Fix out-of-bounds read on invalid intrinsic function code
Found by inspection.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@358239 91177308-0d34-0410-b5e6-96231b3b80d8
2019-04-11 23:11:33 +00:00
Nico Weber
54ee04c709 llvm-undname: Don't crash on incomplete enum tag manglings
Found by inspection.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@358238 91177308-0d34-0410-b5e6-96231b3b80d8
2019-04-11 22:59:25 +00:00
Nico Weber
65c0092a7b llvm-undname: Fix crash on incomplete virtual this adjusts
Found by oss-fuzz.

Also remove an else-after-return, this part has no behavior change.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@358237 91177308-0d34-0410-b5e6-96231b3b80d8
2019-04-11 22:47:18 +00:00
Nico Weber
0907e8aafa llvm-undname: Fix crash on invalid name in a template parameter pointer to member arg
Found by oss-fuzz.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@358234 91177308-0d34-0410-b5e6-96231b3b80d8
2019-04-11 22:23:35 +00:00
Nico Weber
12041c1bc8 llvm-undname: Fix another crash-on-invalid
This fixes a regression from https://reviews.llvm.org/D60354. We used to

  SymbolNode *Symbol = demangleEncodedSymbol(MangledName, QN);
  if (Symbol) {
    Symbol->Name = QN;
  }

but changed that to
  SymbolNode *Symbol = demangleEncodedSymbol(MangledName, QN);
  if (Error)
    return nullptr;
  Symbol->Name = QN;

and one branch somewhere returned a nullptr without setting Error.

Looking at the code changed in r340083 and r340710 that branch looks
like a remnant from an earlier attempt to demangle RTTI descriptors
that has since been rewritten -- so just remove this branch. It
shouldn't change behavior for correctly mangled symbols.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@358112 91177308-0d34-0410-b5e6-96231b3b80d8
2019-04-10 17:31:34 +00:00
Nico Weber
5388309387 llvm-undname: Fix more crashes and asserts on invalid inputs
For functions whose callers don't check that enough input is present,
add checks at the start of the function that enough input is there and
set Error otherwise.

For functions that return AST objects, return nullptr instead of
incomplete AST objects with nullptr fields if an error occurred during
the function.

Introduce a new function demangleDeclarator() for the sequence
demangleFullyQualifiedSymbolName(); demangleEncodedSymbol() and
use it in the two places that had this sequence. Let this new function
check that ConversionOperatorIdentifiers have a valid TargetType.

Some of the bad inputs found by oss-fuzz, others by inspection.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@357936 91177308-0d34-0410-b5e6-96231b3b80d8
2019-04-08 19:46:53 +00:00
Nico Weber
21c63d584f llvm-undname: Name a pair. No behavior change.
Differential Revision: https://reviews.llvm.org/D60210

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@357653 91177308-0d34-0410-b5e6-96231b3b80d8
2019-04-03 23:29:05 +00:00
Nico Weber
c8d28c5350 llvm-undname: Fix a crash-on-invalid
Found by oss-fuzz, fixes issue 13260 on oss-fuzz.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@357649 91177308-0d34-0410-b5e6-96231b3b80d8
2019-04-03 23:27:18 +00:00
Nico Weber
79f7028ca6 llvm-undame: Fix an assert-on-invalid
Found by oss-fuzz, fixes issue 12432 on os-fuzz.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@357648 91177308-0d34-0410-b5e6-96231b3b80d8
2019-04-03 23:23:32 +00:00
Nico Weber
d05c59d5f9 llvm-undname: Fix an assert-on-invalid
Found by oss-fuzz, fixes issues 12428 and 12429 on oss-fuzz.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@357647 91177308-0d34-0410-b5e6-96231b3b80d8
2019-04-03 23:19:39 +00:00
Nico Weber
61d2657ecc llvm-undname: Fix a crash-on-invalid
Found by oss-fuzz, fixes issues 12435 and 12438 on oss-fuzz.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@357646 91177308-0d34-0410-b5e6-96231b3b80d8
2019-04-03 23:15:56 +00:00
Konstantin Zhuravlyov
8f914744dc Add missing include (cstdlib) to Demangle.h
Differential Revision: https://reviews.llvm.org/D57035


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351861 91177308-0d34-0410-b5e6-96231b3b80d8
2019-01-22 19:18:18 +00:00
Chandler Carruth
438784aaf3 Update more file headers across all of the LLVM projects in the monorepo
to reflect the new license. These used slightly different spellings that
defeated my regular expressions.

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.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351648 91177308-0d34-0410-b5e6-96231b3b80d8
2019-01-19 10:56:40 +00:00
Chandler Carruth
6b547686c5 Update the file headers across all of the LLVM projects in the monorepo
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.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351636 91177308-0d34-0410-b5e6-96231b3b80d8
2019-01-19 08:50:56 +00:00
James Henderson
c020a4b755 Add __[_[_]]Z demangling to new common demangle function
This is a follow-up to r351448. It adds support for other _*Z extensions
of the Itanium demanling, to the newly available demangle function
heuristic.

Reviewed by: erik.pilkington, rupprecht, grimar

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351551 91177308-0d34-0410-b5e6-96231b3b80d8
2019-01-18 13:58:41 +00:00
Erik Pilkington
cc6eedfcf3 NFC: Make the copies of the demangler byte-for-byte identical
With this patch, the copies of the files ItaniumDemangle.h,
StringView.h, and Utility.h are kept byte-for-byte in sync between
libcxxabi and llvm. All differences (namespaces, fallthrough, and
unreachable macros) are defined in each copies' DemanglerConfig.h.

This patch also adds a script to copy changes from libcxxabi
(cp-to-llvm.sh), and a README.txt explaining the situation.

Differential revision: https://reviews.llvm.org/D53538

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351474 91177308-0d34-0410-b5e6-96231b3b80d8
2019-01-17 20:37:51 +00:00
James Henderson
bc34da10fa Move demangling function from llvm-objdump to Demangle library
This allows it to be used in an upcoming llvm-readobj change.

A small change in internal behaviour of the function is to always call
the microsoftDemangle function if the string does not have an itanium
encoding prefix, rather than only if it starts with '?'. This is
harmless because the microsoftDemangle function does the same check
already.

Reviewed by: grimar, erik.pilkington

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351448 91177308-0d34-0410-b5e6-96231b3b80d8
2019-01-17 15:18:44 +00:00
Zachary Turner
f4448ba208 [llvm-undname] Add support for demangling msvc's noexcept types.
Starting in C++17, MSVC introduced a new mangling for function
parameters that are themselves noexcept functions.  This patch
makes llvm-undname properly demangle them.

Patch by Zachary Henkel
Differential Revision: https://reviews.llvm.org/D55769

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350656 91177308-0d34-0410-b5e6-96231b3b80d8
2019-01-08 21:05:51 +00:00
Zachary Turner
ed72a6443a [MS Demangler] Add a flag for dumping types without tag specifier.
Sometimes it's useful to be able to output demangled names without
tag specifiers like "struct", "class", etc.  This patch adds a
flag enabling this.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@350241 91177308-0d34-0410-b5e6-96231b3b80d8
2019-01-02 18:33:12 +00:00
Zachary Turner
785589d499 Add missing include file.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@349363 91177308-0d34-0410-b5e6-96231b3b80d8
2018-12-17 16:42:26 +00:00
Zachary Turner
18f6a2ac13 [MS Demangler] Add a helper function to print a Node as a string.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@349359 91177308-0d34-0410-b5e6-96231b3b80d8
2018-12-17 16:14:50 +00:00
Zachary Turner
d7f1cd2c3f [MS Demangler] Fail gracefully on invalid pointer types.
Once we detect a 'P', we know we a pointer type is upcoming, so
we make some assumptions about the output that follows.  If those
assumptions didn't hold, we would assert.  Instead, we should
fail gracefully and propagate the error up.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@349169 91177308-0d34-0410-b5e6-96231b3b80d8
2018-12-14 18:10:13 +00:00
Zachary Turner
2b3b9e148b Fix a crash in llvm-undname with invalid types.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@349165 91177308-0d34-0410-b5e6-96231b3b80d8
2018-12-14 17:43:56 +00:00
Pavel Labath
07b822e4d4 [Demangle] remove itaniumFindTypesInMangledName
Summary:
This (very specialized) function was added to enable an LLDB use case.
Now that a more generic interface (overriding of parser functions -
D52992)  is available, and LLDB has been converted to use that (D54074),
the function is unused and can be removed.

Reviewers: erik.pilkington, sgraenitz, rsmith

Subscribers: mgorny, hiraditya, christof, libcxx-commits, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@347670 91177308-0d34-0410-b5e6-96231b3b80d8
2018-11-27 16:11:24 +00:00
Nico Weber
65bbccae60 [MS Demangler] Print public:, protected:, private: if set in FunctionClass or a variable's StorageClass.
undname prints them, and the information is in the decorated name, so we probably shouldn't lose it when undecorating.

I spot-checked a few of the funnier-looking outputs, and undname has the same output.

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@346791 91177308-0d34-0410-b5e6-96231b3b80d8
2018-11-13 20:18:26 +00:00
Nico Weber
ac4b70f746 Make initializeOutputStream() return false on error and true on success.
As discussed in https://reviews.llvm.org/D52104

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@346606 91177308-0d34-0410-b5e6-96231b3b80d8
2018-11-11 10:04:00 +00:00
Nico Weber
86c04a0332 [MS demangler] Use a slightly shorter unmangling for mangled strings.
Before: const wchar_t * {L"%"}
Now: L"%"

See also PR39593.
Differential Revision: https://reviews.llvm.org/D54294


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@346544 91177308-0d34-0410-b5e6-96231b3b80d8
2018-11-09 19:28:50 +00:00
Reid Kleckner
b7d45e1d88 Fix clang -Wimplicit-fallthrough warnings across llvm, NFC
This patch should not introduce any behavior changes. It consists of
mostly one of two changes:
1. Replacing fall through comments with the LLVM_FALLTHROUGH macro
2. Inserting 'break' before falling through into a case block consisting
   of only 'break'.

We were already using this warning with GCC, but its warning behaves
slightly differently. In this patch, the following differences are
relevant:
1. GCC recognizes comments that say "fall through" as annotations, clang
   doesn't
2. GCC doesn't warn on "case N: foo(); default: break;", clang does
3. GCC doesn't warn when the case contains a switch, but falls through
   the outer case.

I will enable the warning separately in a follow-up patch so that it can
be cleanly reverted if necessary.

Reviewers: alexfh, rsmith, lattner, rtrieu, EricWF, bollu

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345882 91177308-0d34-0410-b5e6-96231b3b80d8
2018-11-01 19:54:45 +00:00
Zachary Turner
c35d5db855 [MS Demangler] Expose the Demangler AST publicly.
LLDB would like to use this in order to build a clang AST from
a mangled name.

This is NFC otherwise.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@345837 91177308-0d34-0410-b5e6-96231b3b80d8
2018-11-01 15:07:32 +00:00
Pavel Labath
97b215a773 Port libcxxabi r344607 into llvm
Summary:
The original commit message was:
    This uses CRTP (for performance reasons) to allow a user the override
    demangler functions to implement custom parsing logic. The motivation
    for this is LLDB, which needs to occasionaly modify the mangled names.
    One such instance is already implemented via the TypeCallback member,
    but this is very specific functionality which does not help with any
    other use case. Currently we have a use case for modifying the
    constructor flavours, which would require adding another callback. This
    approach does not scale.

    With CRTP, the user (LLDB) can override any function it needs without
    any special support from the demangler library. After LLDB is ported to
    use this instead of the TypeCallback mechanism, the callback can be
    removed.

The only difference here is the addition of a unit test which exercises
the CRTP mechanism to override a function in the parser.

Reviewers: erik.pilkington, rsmith, EricWF

Subscribers: mgorny, kristina, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@344703 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-17 18:50:25 +00:00
Erik Pilkington
726b0ec498 NFC: Fix a -Wsign-conversion warning
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@344564 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-15 22:03:53 +00:00
Benjamin Kramer
3898e47d1e Move some helpers from the global namespace into anonymous ones.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@344468 91177308-0d34-0410-b5e6-96231b3b80d8
2018-10-13 22:18:22 +00:00
Nico Weber
53bb7b2cc4 Update microsoftDemangle() to work more like itaniumDemangle().
* Use same method of initializing the output stream and its buffer
* Allow a nullptr Status pointer
* Don't print the mangled name on demangling error
* Write to N (if it is non-nullptr)

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@342330 91177308-0d34-0410-b5e6-96231b3b80d8
2018-09-15 18:24:20 +00:00
Zachary Turner
4ed0bf2194 Remove some debugging code that was accidentally left in.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341122 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-30 21:00:57 +00:00
Zachary Turner
25cfd0d86e [MS Demangler] Add support for $$Z parameter pack separator.
$$Z appears between adjacent expanded parameter packs in the
same template instantiation.  We don't need to print it, it's
only there to disambiguate between manglings that would otherwise
be ambiguous.  So we just need to parse it and throw it away.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341119 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-30 20:53:29 +00:00
Zachary Turner
6568fb5f19 [MS Demangler] Fix several crashes and demangling bugs.
These bugs were found by writing a Python script which spidered
the entire Chromium build directory tree demangling every symbol
in every object file.  At the start, the tool printed:

  Processed 27443 object files.
  2926377/2936108 symbols successfully demangled (99.6686%)
  9731 symbols could not be demangled (0.3314%)
  14589 files crashed while demangling (53.1611%)

After this patch, it prints:

  Processed 27443 object files.
  41295518/41295617 symbols successfully demangled (99.9998%)
  99 symbols could not be demangled (0.0002%)
  0 files crashed while demangling (0.0000%)

The issues fixed in this patch are:

  * Ignore empty parameter packs.  Previously we would encounter
    a mangling for an empty parameter pack and add a null node
    to the AST.  Since we don't print these anyway, we now just
    don't add anything to the AST and ignore it entirely.  This
    fixes some of the crashes.

  * Account for "incorrect" string literal demanglings.  Apparently
    an older version of clang would not truncate mangled string
    literals to 32 bytes of encoded character data.  The demangling
    code however would allocate a 32 byte buffer thinking that it
    would not encounter more than this, and overrun the buffer.
    We now demangle up to 128 bytes of data, since the buggy
    clang would encode up to 32 *characters* of data.

  * Extended support for demangling init-fini stubs.  If you had
    something like
      struct Foo {
        static vector<string> S;
      };
    this would generate a dynamic atexit initializer *for the
    variable*.  We didn't handle this, but now we print something
    nice.  This is actually an improvement over undname, which will
    fail to demangle this at all.

  * Fixed one case of static this adjustment.  We weren't handling
    several thunk codes so we didn't recognize the mangling.  These
    are now handled.

  * Fixed a back-referencing problem.  Member pointer templates
    should have their components considered for back-referencing

The remaining 99 symbols which can't be demangled are all symbols
which are compiler-generated and undname can't demangle either.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@341000 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-29 23:56:09 +00:00
Zachary Turner
ef6d9043af Add support for various C++14 demanglings.
Mostly this includes <auto> and <decltype-auto> return values.
Additionally, this fixes a fairly obscure back-referencing bug
that was encountered in one of the C++14 tests, which is that
if you have something like Foo<&bar, &bar> then the `bar`
forms a backreference.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340896 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-29 04:12:44 +00:00
Zachary Turner
2e2b1e2608 [MS Demangler] Add output flags to all function calls.
Previously we had a FunctionSigFlags, but it's more flexible
to just have one set of output flags that apply to the entire
process and just pipe the entire set of flags through the
output process.

This will be useful when we start allowing the user to customize
the outputting behavior.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340894 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-29 03:59:17 +00:00
Chandler Carruth
b19b37f8f0 Fix this file to have the necessary standard library includes and use
the `std::` namespace. Should fix a number of build bots as well.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340721 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-27 06:52:14 +00:00
Zachary Turner
4d181be379 [MS Demangler] Add virtual destructor.
Silence -Wnon-virtual-dtor.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340711 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-27 04:04:41 +00:00
Zachary Turner
6e3e8a765e [MS Demangler] Re-write the Microsoft demangler.
This is a pretty large refactor / re-write of the Microsoft
demangler.  The previous one was a little hackish because it
evolved as I was learning about all the various edge cases,
exceptions, etc.  It didn't have a proper AST and so there was
lots of custom handling of things that should have been much
more clean.

Taking what was learned from that experience, it's now
re-written with a completely redesigned and much more sensible
AST.  It's probably still not perfect, but at least it's
comprehensible now to someone else who wants to come along
and make some modifications or read the code.

Incidentally, this fixed a couple of bugs, so I've enabled
the tests which now pass.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340710 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-27 03:48:03 +00:00
Simon Pilgrim
42d60835b5 Fix -Wunused-function warning. NFCI.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340687 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-25 17:11:11 +00:00
Zachary Turner
5249baad0e [MS Demangler] Print template constructor args.
Previously if you had something like this:

template<typename T>
struct Foo {
  template<typename U>
  Foo(U);
};

Foo F(3.7);

this would mangle as ??$?0N@?$Foo@H@@QEAA@N@Z

and this would be demangled as:

undname:      __cdecl Foo<int>::Foo<int><double>(double)
llvm-undname: __cdecl Foo<int>::Foo<int>(double)

Note the lack of the constructor template parameter in our
demangling.

This patch makes it so we print the constructor argument list.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340356 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-21 22:52:52 +00:00
Zachary Turner
da9501c5e5 [MS Demangler] Fix a few more edge cases.
I found these by running llvm-undname over a couple hundred
megabytes of object files generated as part of building chromium.
The issues fixed in this patch are:

  1) decltype-auto return types.
  2) Indirect vtables (e.g. const A::`vftable'{for `B'})
  3) Pointers, references, and rvalue-references to member pointers.

I have exactly one remaining symbol out of a few hundred MB of object
files that produces a name we can't demangle, and it's related to
back-referencing.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340341 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-21 21:23:49 +00:00
Zachary Turner
ac46986ee7 [MS Demangler] Demangle special operator 'dynamic initializer'.
This is encoded as __E and should print something like
"dynamic initializer for 'Foo'(void)"

This also adds support for dynamic atexit destructor, which is
basically identical but encoded as __F with slightly different
description.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340239 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-20 23:59:21 +00:00
Zachary Turner
b6b924e475 [MS Demangler] Anonymous namespace hashes can be backreferenced.
Previously we were not remembering the key values of anonymous
namespaces, but we need to do this.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340238 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-20 23:58:58 +00:00
Zachary Turner
797795774f [MS Demangler] Properly demangle anonymous namespaces.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340237 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-20 23:58:35 +00:00
David Blaikie
edb7976f97 Add missing include (<functional> for std::ref)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@340205 91177308-0d34-0410-b5e6-96231b3b80d8
2018-08-20 20:02:29 +00:00