]> granicus.if.org Git - llvm/commitdiff
llvm-undname: Add test coverage for demangleInitFiniStub()
authorNico Weber <nicolasweber@gmx.de>
Tue, 4 Jun 2019 18:06:28 +0000 (18:06 +0000)
committerNico Weber <nicolasweber@gmx.de>
Tue, 4 Jun 2019 18:06:28 +0000 (18:06 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@362536 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Demangle/MicrosoftDemangle.cpp
test/Demangle/invalid-manglings.test
test/Demangle/ms-operators.test

index 450c95ff8a100e166fcefbdbbc1c51a219515d25..c8f7502ce2c092d0eee38223448ff17566e02b23 100644 (file)
@@ -465,9 +465,9 @@ SymbolNode *Demangler::demangleSpecialIntrinsic(StringView &MangledName) {
   case SpecialIntrinsicKind::RttiBaseClassDescriptor:
     return demangleRttiBaseClassDescriptorNode(Arena, MangledName);
   case SpecialIntrinsicKind::DynamicInitializer:
-    return demangleInitFiniStub(MangledName, false);
+    return demangleInitFiniStub(MangledName, /*IsDestructor=*/false);
   case SpecialIntrinsicKind::DynamicAtexitDestructor:
-    return demangleInitFiniStub(MangledName, true);
+    return demangleInitFiniStub(MangledName, /*IsDestructor=*/true);
   case SpecialIntrinsicKind::Typeof:
   case SpecialIntrinsicKind::UdtReturning:
     // It's unclear which tools produces these manglings, so demangling
index 1cc192601a4839a1d00af453eccd4b150836d617..8887b2cd20c7982051b05ca35b9789968bfb2c94 100644 (file)
 ; CHECK-NEXT: ??__E?Foo@@0HA@@
 ; CHECK-NEXT: error: Invalid mangled name
 
+??__E?i@C@@0HA@
+; CHECK-EMPTY:
+; CHECK-NEXT: ??__E?i@C@@0HA@
+; CHECK-NEXT: error: Invalid mangled name
+
+??__E?Foo@@YAXXZ
+; CHECK-EMPTY:
+; CHECK-NEXT: ??__E?Foo@@YAXXZ
+; CHECK-NEXT: error: Invalid mangled name
+
 ??8@8
 ; CHECK-EMPTY:
 ; CHECK-NEXT: ??8@8
index 6a22ebda1714515c050fe4658e05fe4a593b1ef1..71a3a1305b4569ed7f33498673795d8b0df48eb3 100644 (file)
 ??_R4Base@@6B@
 ; CHECK: const Base::`RTTI Complete Object Locator'
 
+; Generated for `int Foo = f(4);` at global scope.
 ??__EFoo@@YAXXZ
 ; CHECK: void __cdecl `dynamic initializer for 'Foo''(void)
 
+; Generated for
+;   class C {  static int i; };
+;   int C::i = f(5);
+??__E?i@C@@0HA@@YAXXZ
+; CHECK: void __cdecl `dynamic initializer for `private: static int C::i''(void)
+
 ??__FFoo@@YAXXZ
 ; CHECK: void __cdecl `dynamic atexit destructor for 'Foo''(void)