summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorZachary Turner <zturner@google.com>2018-08-21 21:23:49 +0000
committerZachary Turner <zturner@google.com>2018-08-21 21:23:49 +0000
commitdf4cd7cbf97c23f363ca07dc4038ecc48c1e6623 (patch)
tree350b2a3bac606c85da2ffce3d9129860f5afcc9f /llvm/test
parent4ca11217fcd6c8892cfb688f5f4fe9588d55dee0 (diff)
downloadbcm5719-llvm-df4cd7cbf97c23f363ca07dc4038ecc48c1e6623.tar.gz
bcm5719-llvm-df4cd7cbf97c23f363ca07dc4038ecc48c1e6623.zip
[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. llvm-svn: 340341
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/Demangle/ms-mangle.test3
-rw-r--r--llvm/test/Demangle/ms-operators.test3
-rw-r--r--llvm/test/Demangle/ms-templates-memptrs.test2
3 files changed, 8 insertions, 0 deletions
diff --git a/llvm/test/Demangle/ms-mangle.test b/llvm/test/Demangle/ms-mangle.test
index 3a87a1e2b7d..cd65d8306a1 100644
--- a/llvm/test/Demangle/ms-mangle.test
+++ b/llvm/test/Demangle/ms-mangle.test
@@ -392,3 +392,6 @@
??0?$L@V?$H@PAH@PR26029@@@PR26029@@QAE@XZ
; CHECK: __thiscall PR26029::L<class PR26029::H<int *>>::L<class PR26029::H<int *>>(void)
+
+; ??$emplace_back@ABH@?$vector@HV?$allocator@H@std@@@std@@QAE?A?<decltype-auto>@@ABH@Z
+<decltype-auto> __thiscall std::vector<int, class std::allocator<int>>::emplace_back<int const &>(int const &) \ No newline at end of file
diff --git a/llvm/test/Demangle/ms-operators.test b/llvm/test/Demangle/ms-operators.test
index 7be3da94cc0..3eb49170b86 100644
--- a/llvm/test/Demangle/ms-operators.test
+++ b/llvm/test/Demangle/ms-operators.test
@@ -140,6 +140,9 @@
??_7Base@@6B@
; CHECK: const Base::`vftable'
+??_7A@B@@6BC@D@@@
+; CHECK: const B::A::`vftable'{for `D::C'}
+
??_8Middle2@@7B@
; CHECK: const Middle2::`vbtable'
diff --git a/llvm/test/Demangle/ms-templates-memptrs.test b/llvm/test/Demangle/ms-templates-memptrs.test
index 3647a898871..88e7c21b33c 100644
--- a/llvm/test/Demangle/ms-templates-memptrs.test
+++ b/llvm/test/Demangle/ms-templates-memptrs.test
@@ -93,3 +93,5 @@
??$ReadField@UV@@$FM@A@@@YAHAAUV@@@Z
; CHECK: int __cdecl ReadField<struct V, {12, 0}>(struct V &)
+?Q@@3$$QEAP8Foo@@EAAXXZEA
+; CHECK: void (__cdecl Foo::*&&Q)(void)
OpenPOWER on IntegriCloud