Skip to content

Commit c1a0e6f

Browse files
committed
llvm-undname: More no-op changes to increase test coverage
- Add test coverage around invalid anon namespaces and for error paths in demanglePrimitiveType() and in demangleFullyQualifiedTypeName() - Use DEMANGLE_UNREACHABLE in two more unreachable places llvm-svn: 362514
1 parent 7f31350 commit c1a0e6f

File tree

2 files changed

+30
-6
lines changed

2 files changed

+30
-6
lines changed

llvm/lib/Demangle/MicrosoftDemangle.cpp

+5-6
Original file line numberDiff line numberDiff line change
@@ -238,10 +238,10 @@ demanglePointerCVQualifiers(StringView &MangledName) {
238238
case 'S':
239239
return std::make_pair(Qualifiers(Q_Const | Q_Volatile),
240240
PointerAffinity::Pointer);
241-
default:
242-
assert(false && "Ty is not a pointer type!");
243241
}
244-
return std::make_pair(Q_None, PointerAffinity::Pointer);
242+
// This function is only called if isPointerType() returns true,
243+
// and it only returns true for the six cases listed above.
244+
DEMANGLE_UNREACHABLE;
245245
}
246246

247247
StringView Demangler::copyString(StringView Borrowed) {
@@ -1694,7 +1694,7 @@ CallingConv Demangler::demangleCallingConvention(StringView &MangledName) {
16941694
}
16951695

16961696
StorageClass Demangler::demangleVariableStorageClass(StringView &MangledName) {
1697-
assert(std::isdigit(MangledName.front()));
1697+
assert(MangledName.front() >= '0' && MangledName.front() <= '4');
16981698

16991699
switch (MangledName.popFront()) {
17001700
case '0':
@@ -1708,8 +1708,7 @@ StorageClass Demangler::demangleVariableStorageClass(StringView &MangledName) {
17081708
case '4':
17091709
return StorageClass::FunctionLocalStatic;
17101710
}
1711-
Error = true;
1712-
return StorageClass::None;
1711+
DEMANGLE_UNREACHABLE;
17131712
}
17141713

17151714
std::pair<Qualifiers, bool>

llvm/test/Demangle/invalid-manglings.test

+25
Original file line numberDiff line numberDiff line change
@@ -249,3 +249,28 @@
249249
; CHECK-EMPTY:
250250
; CHECK-NEXT: ?x@@3PEAY02$$CRHEA
251251
; CHECK-NEXT: error: Invalid mangled name
252+
253+
?foo@@3_
254+
; CHECK-EMPTY:
255+
; CHECK-NEXT: ?foo@@3_
256+
; CHECK-NEXT: error: Invalid mangled name
257+
258+
?foo@@3_XA
259+
; CHECK-EMPTY:
260+
; CHECK-NEXT: ?foo@@3_XA
261+
; CHECK-NEXT: error: Invalid mangled name
262+
263+
?foo@@3Vbar
264+
; CHECK-EMPTY:
265+
; CHECK-NEXT: ?foo@@3Vbar
266+
; CHECK-NEXT: error: Invalid mangled name
267+
268+
?foo@@3Vbar@
269+
; CHECK-EMPTY:
270+
; CHECK-NEXT: ?foo@@3Vbar@
271+
; CHECK-NEXT: error: Invalid mangled name
272+
273+
?foo@?A
274+
; CHECK-EMPTY:
275+
; CHECK-NEXT: ?foo@?A
276+
; CHECK-NEXT: error: Invalid mangled name

0 commit comments

Comments
 (0)