summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZachary Turner <zturner@google.com>2018-08-14 18:54:28 +0000
committerZachary Turner <zturner@google.com>2018-08-14 18:54:28 +0000
commit2bbb23ba3b7fdb825e09aaca9d6b4e72e5dd3eb7 (patch)
tree1f22185b08f3d3d6ad7f32556001ac1d158b45d3
parenta0fd9c3e9a51c84019fca1b3e4917ca96e0e1742 (diff)
downloadbcm5719-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.cpp12
-rw-r--r--llvm/test/Demangle/ms-back-references.test2
-rw-r--r--llvm/test/Demangle/ms-mangle.test18
-rw-r--r--llvm/test/Demangle/ms-return-qualifiers.test6
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)
OpenPOWER on IntegriCloud