llvm-undname: Yet more coverage for error paths
- For error returns in demangleSpecialTableNode(), demangleLocalStaticGuard(), RTTITypeDescriptor, demangleRttiBaseClassDescriptorNode(), demangleUnsigned(), demangleUntypedVariable() (via RttiBaseClassArray) - For ?_A and ?_P which are handled at early levels of the demangler but are not implemented in a later stage; this is now more obvious - Replace a "default:" with an explicit list of cases, to get -Wswitch check we list all cases llvm-svn: 362520
This commit is contained in:
parent
df621bdfc8
commit
d98a0a362f
|
@ -429,10 +429,10 @@ FunctionSymbolNode *Demangler::demangleInitFiniStub(StringView &MangledName,
|
|||
|
||||
SymbolNode *Demangler::demangleSpecialIntrinsic(StringView &MangledName) {
|
||||
SpecialIntrinsicKind SIK = consumeSpecialIntrinsicKind(MangledName);
|
||||
if (SIK == SpecialIntrinsicKind::None)
|
||||
return nullptr;
|
||||
|
||||
switch (SIK) {
|
||||
case SpecialIntrinsicKind::None:
|
||||
return nullptr;
|
||||
case SpecialIntrinsicKind::StringLiteralSymbol:
|
||||
return demangleStringLiteral(MangledName);
|
||||
case SpecialIntrinsicKind::Vftable:
|
||||
|
@ -468,8 +468,13 @@ SymbolNode *Demangler::demangleSpecialIntrinsic(StringView &MangledName) {
|
|||
return demangleInitFiniStub(MangledName, false);
|
||||
case SpecialIntrinsicKind::DynamicAtexitDestructor:
|
||||
return demangleInitFiniStub(MangledName, true);
|
||||
default:
|
||||
case SpecialIntrinsicKind::Typeof:
|
||||
case SpecialIntrinsicKind::UdtReturning:
|
||||
// It's unclear which tools produces these manglings, so demangling
|
||||
// support is not (yet?) implemented.
|
||||
break;
|
||||
case SpecialIntrinsicKind::Unknown:
|
||||
DEMANGLE_UNREACHABLE; // Never returned by consumeSpecialIntrinsicKind.
|
||||
}
|
||||
Error = true;
|
||||
return nullptr;
|
||||
|
|
|
@ -309,3 +309,48 @@
|
|||
; CHECK-EMPTY:
|
||||
; CHECK-NEXT: ?foo@?0?
|
||||
; CHECK-NEXT: error: Invalid mangled name
|
||||
|
||||
??_Sfoo@@1Abar@@
|
||||
; CHECK-EMPTY:
|
||||
; CHECK-NEXT: ??_Sfoo@@1Abar@@
|
||||
; CHECK-NEXT: error: Invalid mangled name
|
||||
|
||||
??_Bfoo@@1
|
||||
; CHECK-EMPTY:
|
||||
; CHECK-NEXT: ??_Bfoo@@1
|
||||
; CHECK-NEXT: error: Invalid mangled name
|
||||
|
||||
??_R0
|
||||
; CHECK-EMPTY:
|
||||
; CHECK-NEXT: ??_R0
|
||||
; CHECK-NEXT: error: Invalid mangled name
|
||||
|
||||
??_R0H
|
||||
; CHECK-EMPTY:
|
||||
; CHECK-NEXT: ??_R0H
|
||||
; CHECK-NEXT: error: Invalid mangled name
|
||||
|
||||
??_R0H@8foo
|
||||
; CHECK-EMPTY:
|
||||
; CHECK-NEXT: ??_R0H@8foo
|
||||
; CHECK-NEXT: error: Invalid mangled name
|
||||
|
||||
??_R1012?3foo@@
|
||||
; CHECK-EMPTY:
|
||||
; CHECK-NEXT: ??_R1012?3foo@@
|
||||
; CHECK-NEXT: error: Invalid mangled name
|
||||
|
||||
??_R2foo@@1
|
||||
; CHECK-EMPTY:
|
||||
; CHECK-NEXT: ??_R2foo@@1
|
||||
; CHECK-NEXT: error: Invalid mangled name
|
||||
|
||||
??_A
|
||||
; CHECK-EMPTY:
|
||||
; CHECK-NEXT: ??_A
|
||||
; CHECK-NEXT: error: Invalid mangled name
|
||||
|
||||
??_P
|
||||
; CHECK-EMPTY:
|
||||
; CHECK-NEXT: ??_P
|
||||
; CHECK-NEXT: error: Invalid mangled name
|
||||
|
|
Loading…
Reference in New Issue