diff options
| author | Zachary Turner <zturner@google.com> | 2018-08-14 18:54:28 +0000 |
|---|---|---|
| committer | Zachary Turner <zturner@google.com> | 2018-08-14 18:54:28 +0000 |
| commit | 2bbb23ba3b7fdb825e09aaca9d6b4e72e5dd3eb7 (patch) | |
| tree | 1f22185b08f3d3d6ad7f32556001ac1d158b45d3 | |
| parent | a0fd9c3e9a51c84019fca1b3e4917ca96e0e1742 (diff) | |
| download | bcm5719-llvm-2bbb23ba3b7fdb825e09aaca9d6b4e72e5dd3eb7.tar.gz bcm5719-llvm-2bbb23ba3b7fdb825e09aaca9d6b4e72e5dd3eb7.zip | |
[MS Demangler] Fix some minor formatting bugs.
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
| -rw-r--r-- | llvm/lib/Demangle/MicrosoftDemangle.cpp | 12 | ||||
| -rw-r--r-- | llvm/test/Demangle/ms-back-references.test | 2 | ||||
| -rw-r--r-- | llvm/test/Demangle/ms-mangle.test | 18 | ||||
| -rw-r--r-- | llvm/test/Demangle/ms-return-qualifiers.test | 6 |
4 files changed, 17 insertions, 21 deletions
diff --git a/llvm/lib/Demangle/MicrosoftDemangle.cpp b/llvm/lib/Demangle/MicrosoftDemangle.cpp index cab662f98e8..0af93e1519b 100644 --- a/llvm/lib/Demangle/MicrosoftDemangle.cpp +++ b/llvm/lib/Demangle/MicrosoftDemangle.cpp @@ -815,8 +815,6 @@ void MemberPointerType::outputPre(OutputStream &OS, NameResolver &Resolver) { // FIXME: We should output this, but it requires updating lots of tests. // if (Ty.Quals & Q_Pointer64) // OS << " __ptr64"; - if (Quals & Q_Restrict) - OS << " __restrict"; } void MemberPointerType::outputPost(OutputStream &OS, NameResolver &Resolver) { @@ -2028,12 +2026,12 @@ ArrayType *Demangler::demangleArrayType(StringView &MangledName) { } if (MangledName.consumeFront("$$C")) { - if (MangledName.consumeFront("B")) - ATy->Quals = Q_Const; - else if (MangledName.consumeFront("C") || MangledName.consumeFront("D")) - ATy->Quals = Qualifiers(Q_Const | Q_Volatile); - else if (!MangledName.consumeFront("A")) + bool IsMember = false; + std::tie(ATy->Quals, IsMember) = demangleQualifiers(MangledName); + if (IsMember) { Error = true; + return nullptr; + } } ATy->ElementType = demangleType(MangledName, QualifierMangleMode::Drop); diff --git a/llvm/test/Demangle/ms-back-references.test b/llvm/test/Demangle/ms-back-references.test index ade9dd28481..553d2ff6292 100644 --- a/llvm/test/Demangle/ms-back-references.test +++ b/llvm/test/Demangle/ms-back-references.test @@ -23,8 +23,6 @@ ?f7@@YAXHPAHH0_N1PA_N@Z ; CHECK: void __cdecl f7(int, int *, int, int *, bool, bool, bool *) -; FIXME: tests for more than 10 types? - ?g1@@YAXUS@@@Z ; CHECK: void __cdecl g1(struct S) diff --git a/llvm/test/Demangle/ms-mangle.test b/llvm/test/Demangle/ms-mangle.test index b3fe67f4759..3a87a1e2b7d 100644 --- a/llvm/test/Demangle/ms-mangle.test +++ b/llvm/test/Demangle/ms-mangle.test @@ -12,9 +12,10 @@ ?anonymous@?A@N@@3HA ; CHECK: int N::`anonymous namespace'::anonymous -; FIXME: Reference Temporaries -; ?$RT1@NeedsReferenceTemporary@@3ABHB -; ?$RT1@NeedsReferenceTemporary@@3AEBHEB +?$RT1@NeedsReferenceTemporary@@3ABHB +; CHECK: int const &NeedsReferenceTemporary::$RT1 +?$RT1@NeedsReferenceTemporary@@3AEBHEB +; CHECK: int const &NeedsReferenceTemporary::$RT1 ?_c@@YAHXZ ; CHECK: int __cdecl _c(void) @@ -181,12 +182,13 @@ ?color2@@3QBNB ; CHECK: double const *const color2 -; FIXME-EXTRACONST: These tests fails because we print an extra const inside the parens. -; ?color3@@3QAY02$$CBNA -; FIXME-EXTRACONST: double const (*color3)[3] +; undname prints `double const (* color3)[3]`, but this is a bug in undname. +?color3@@3QAY02$$CBNA +; CHECK: double const (*const color3)[3] -; ?color4@@3QAY02$$CBNA -; FIXME-EXTRACONST: double const (*color4)[3] +; undname prints `double const (* color4)[3]`, but this is a bug in undname. +?color4@@3QAY02$$CBNA +; CHECK: double const (*const color4)[3] ?memptr1@@3RESB@@HES1@ ; CHECK: int volatile B::*volatile memptr1 diff --git a/llvm/test/Demangle/ms-return-qualifiers.test b/llvm/test/Demangle/ms-return-qualifiers.test index 7fedf6c03a1..bad181e7f13 100644 --- a/llvm/test/Demangle/ms-return-qualifiers.test +++ b/llvm/test/Demangle/ms-return-qualifiers.test @@ -160,13 +160,11 @@ ?f9@@YAQQS@@HXZ ; CHECK: int S::*const __cdecl f9(void) -; We print __restrict twice here. ?f10@@YAPIQS@@HXZ -; FIXME: int S::* __restrict __cdecl f10(void) +; CHECK: int S::*__restrict __cdecl f10(void) -; We print __restrict twice here. ?f11@@YAQIQS@@HXZ -; FIXME: int S::* __restrict __cdecl f11(void) +; CHECK: int S::*const __restrict __cdecl f11(void) ?g1@@YAP6AHH@ZXZ ; CHECK: int (__cdecl * __cdecl g1(void))(int) |

