summaryrefslogtreecommitdiffstats
path: root/llvm/test/Demangle/ms-mangle.test
Commit message (Collapse)AuthorAgeFilesLines
* llvm-undname; Add more test coverage for demangleFunctionClass()Nico Weber2019-06-021-0/+28
| | | | | | | | Also add two FC_Far that seem to be missing, by symmetry from the public and protected cases. (But FC_Far isn't really a thing anymore, so this doesn't really have an observable effect.) llvm-svn: 362344
* Add mangling test coverage for non-volatile const member pointersNico Weber2019-06-021-2/+8
| | | | llvm-svn: 362331
* [MS Demangler] Fix a few more edge cases.Zachary Turner2018-08-211-0/+3
| | | | | | | | | | | | | | | | 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. llvm-svn: 340341
* [MS Demangler] Fix some minor formatting bugs.Zachary Turner2018-08-141-8/+10
| | | | | | | | | | | | | | | | 1) We print __restrict twice on member pointers. This is fixed and relevant tests are re-enabled. 2) Several tests were disabled because of printing slightly different output than undname. These were confirmed to be bugs in undname, so we just re-enable the tests. 3) The test for printing reference temporaries is re-enabled. This is a clang mangling extension, so we have some flexibility with how we demangle it. The output currently looks fine, so we just re-enable the test with no fixes. llvm-svn: 339708
* [MS Demangler] Support extern "C" functions.Zachary Turner2018-08-101-10/+8
| | | | | | | | | | | | | | There are two cases we need to support with extern "C" functions. The first is the case of a '9' indicating that the function has no prototype. This occurs when we mangle a symbol inside of an extern "C" function, but not the function itself. The second case is when we have an overloaded extern "C" functions. In this case we emit $$J0 to indicate this. This patch adds support for both of these cases. llvm-svn: 339471
* [MS Demangler] Properly demangle templated operators.Zachary Turner2018-08-011-0/+3
| | | | | | | | | | | | | | | | | | After we detected the presence of a template via ?$ we would proceed by only demangling a simple unqualified name. This means we would fail on templated operators (and perhaps other yet-to-be-determined things) This was discovered while doing some refactoring to store richer semantic information about the demangled types to pave the way for overhauling the way we handle backreferences. (Specifically, we need to defer recording or resolving back-references until a symbol has been completely demangled, because we need to use information that only occurs later in the mangled string to decide whether a back-reference should be recorded.) Differential Revision: https://reviews.llvm.org/D50145 llvm-svn: 338608
* [MS Demangler] Demangle symbols in function scopes.Zachary Turner2018-07-301-7/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There are a couple of issues you run into when you start getting into more complex names, especially with regards to function local statics. When you've got something like: int x() { static int n = 0; return n; } Then this needs to demangle to something like int `int __cdecl x()'::`1'::n The nested mangled symbols (e.g. `int __cdecl x()` in the above example) also share state with regards to back-referencing, so we need to be able to re-use the demangler in the middle of demangling a symbol while sharing back-ref state. To make matters more complicated, there are a lot of ambiguities when demangling a symbol's qualified name, because a function local scope pattern (usually something like `?1??name?`) looks suspiciously like many other possible things that can occur, such as `?1` meaning the second back-ref and disambiguating these cases is rather interesting. The `?1?` in a local scope pattern is actually a special case of the more general pattern of `? + <encoded number> + ?`, where "encoded number" can itself have embedded `@` symbols, which is a common delimeter in mangled names. So we have to take care during the disambiguation, which is the reason for the overly complicated `isLocalScopePattern` function in this patch. I've added some pretty obnoxious tests to exercise all of this, which exposed several other problems related to back-referencing, so those are fixed here as well. Finally, I've uncommented some tests that were previously marked as `FIXME`, since now these work. Differential Revision: https://reviews.llvm.org/D49965 llvm-svn: 338226
* [MS Demangler] Print calling convention inside parentheses.Zachary Turner2018-07-261-18/+18
| | | | | | | | | | | | | | | For function pointers, we would print something like int __cdecl (*)(int) We need to move the calling convention inside, and print int (__cdecl *)(int) This patch implements this change for regular function pointers as well as member function pointers. llvm-svn: 338068
* [MS Demangler] Add ms-arg-qualifiers.testZachary Turner2018-07-261-2/+2
| | | | | | | | | | | This converts the arg qualifier mangling tests from clang/CodeGenCXX/mangle-ms-arg-qualifiers.cpp to demangling tests. Most tests already pass, so this patch doesn't come with any functional change, just the addition of new tests. The few tests that don't pass are left in with a FIXME label so that they don't run but serve as documentation about what still doesn't work. llvm-svn: 338067
* Add missing tests from ms-mangle.cpp.Zachary Turner2018-07-261-5/+36
| | | | | | | | | None of these tests pass yet so they are commented out, but I'm adding them with a FIXME label so that they don't get lost when copying tests over from clang's mangling tests. Currently these tests are all commented out. llvm-svn: 338066
* [MS Demangler] Demangle pointers to member functions.Zachary Turner2018-07-261-44/+45
| | | | | | | | | | | After this patch, we can now properly demangle pointers to member functions. The calling convention is located in the wrong place, but this will be fixed in a followup since it also affects non member function pointers. Differential Revision: https://reviews.llvm.org/D49639 llvm-svn: 338065
* [MS Demangler] Demangle data member pointers.Zachary Turner2018-07-261-7/+6
| | | | | | Differential Revision: https://reviews.llvm.org/D49630 llvm-svn: 338061
* Fix a few warnings and style issues in MS demangler.Zachary Turner2018-07-201-3/+0
| | | | | | Also remove a broken test case. llvm-svn: 337591
* Add a Microsoft Demangler.Zachary Turner2018-07-201-0/+363
This adds initial support for a demangling library (LLVMDemangle) and tool (llvm-undname) for demangling Microsoft names. This doesn't cover 100% of cases and there are some known limitations which I intend to address in followup patches, at least until such time that we have (near) 100% test coverage matching up with all of the test cases in clang/test/CodeGenCXX/mangle-ms-*. Differential Revision: https://reviews.llvm.org/D49552 llvm-svn: 337584
OpenPOWER on IntegriCloud