Skip to content

Commit 880d21d

Browse files
committed
llvm-undname: Several behavior-preserving changes to increase coverage
- Replace `Error = true` in a few branches that are truly unreachable with DEMANGLE_UNREACHABLE - Remove early return early in startsWithLocalScopePattern() because it's redundant with the next two early returns - Remove unreachable `case '0'` (it's handled in the branch below) - Remove an unused bool return - Add test coverage for several early error returns, mostly in array type parsing llvm-svn: 362506
1 parent c5fe030 commit 880d21d

File tree

4 files changed

+38
-16
lines changed

4 files changed

+38
-16
lines changed

llvm/lib/Demangle/MicrosoftDemangle.cpp

+6-11
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,9 @@ static bool isMemberPointer(StringView MangledName, bool &Error) {
5858
// what.
5959
break;
6060
default:
61-
Error = true;
62-
return false;
61+
// isMemberPointer() is called only if isPointerType() returns true,
62+
// and it rejects other prefixes.
63+
DEMANGLE_UNREACHABLE;
6364
}
6465

6566
// If it starts with a number, then 6 indicates a non-member function
@@ -141,8 +142,6 @@ consumeSpecialIntrinsicKind(StringView &MangledName) {
141142
static bool startsWithLocalScopePattern(StringView S) {
142143
if (!S.consumeFront('?'))
143144
return false;
144-
if (S.size() < 2)
145-
return false;
146145

147146
size_t End = S.find('?');
148147
if (End == StringView::npos)
@@ -2197,7 +2196,7 @@ Demangler::demangleTemplateParameterList(StringView &MangledName) {
21972196
MangledName = MangledName.dropFront();
21982197
// 1 - single inheritance <name>
21992198
// H - multiple inheritance <name> <number>
2200-
// I - virtual inheritance <name> <number> <number> <number>
2199+
// I - virtual inheritance <name> <number> <number>
22012200
// J - unspecified inheritance <name> <number> <number> <number>
22022201
char InheritanceSpecifier = MangledName.popFront();
22032202
SymbolNode *S = nullptr;
@@ -2226,8 +2225,7 @@ Demangler::demangleTemplateParameterList(StringView &MangledName) {
22262225
case '1':
22272226
break;
22282227
default:
2229-
Error = true;
2230-
break;
2228+
DEMANGLE_UNREACHABLE;
22312229
}
22322230
TPRN->Affinity = PointerAffinity::Pointer;
22332231
TPRN->Symbol = S;
@@ -2254,12 +2252,9 @@ Demangler::demangleTemplateParameterList(StringView &MangledName) {
22542252
demangleSigned(MangledName);
22552253
TPRN->ThunkOffsets[TPRN->ThunkOffsetCount++] =
22562254
demangleSigned(MangledName);
2257-
DEMANGLE_FALLTHROUGH;
2258-
case '0':
22592255
break;
22602256
default:
2261-
Error = true;
2262-
break;
2257+
DEMANGLE_UNREACHABLE;
22632258
}
22642259
TPRN->IsMemberPointer = true;
22652260

llvm/lib/Demangle/MicrosoftDemangleNodes.cpp

+4-5
Original file line numberDiff line numberDiff line change
@@ -34,21 +34,20 @@ static void outputSpaceIfNecessary(OutputStream &OS) {
3434
OS << " ";
3535
}
3636

37-
static bool outputSingleQualifier(OutputStream &OS, Qualifiers Q) {
37+
static void outputSingleQualifier(OutputStream &OS, Qualifiers Q) {
3838
switch (Q) {
3939
case Q_Const:
4040
OS << "const";
41-
return true;
41+
break;
4242
case Q_Volatile:
4343
OS << "volatile";
44-
return true;
44+
break;
4545
case Q_Restrict:
4646
OS << "__restrict";
47-
return true;
47+
break;
4848
default:
4949
break;
5050
}
51-
return false;
5251
}
5352

5453
static bool outputQualifierIfPresent(OutputStream &OS, Qualifiers Q,

llvm/test/Demangle/invalid-manglings.test

+25
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,32 @@
220220
; CHECK-NEXT: ??_C@_0101234567@?$az
221221
; CHECK-NEXT: error: Invalid mangled name
222222

223+
??_C@_1201234567@a?$az
224+
; CHECK-EMPTY:
225+
; CHECK-NEXT: ??_C@_1201234567@a?$az
226+
; CHECK-NEXT: error: Invalid mangled name
227+
223228
??@foo
224229
; CHECK-EMPTY:
225230
; CHECK-NEXT: ??@foo
226231
; CHECK-NEXT: error: Invalid mangled name
232+
233+
?foo@@3YA@A
234+
; CHECK-EMPTY:
235+
; CHECK-NEXT: ?foo@@3YA@A
236+
; CHECK-NEXT: error: Invalid mangled name
237+
238+
?foo@@3Y~01KA
239+
; CHECK-EMPTY:
240+
; CHECK-NEXT: ?foo@@3Y~01KA
241+
; CHECK-NEXT: error: Invalid mangled name
242+
243+
?foo@@3Y0~1KA
244+
; CHECK-EMPTY:
245+
; CHECK-NEXT: ?foo@@3Y0~1KA
246+
; CHECK-NEXT: error: Invalid mangled name
247+
248+
?x@@3PEAY02$$CRHEA
249+
; CHECK-EMPTY:
250+
; CHECK-NEXT: ?x@@3PEAY02$$CRHEA
251+
; CHECK-NEXT: error: Invalid mangled name

llvm/test/Demangle/ms-basic.test

+3
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111
?x@@3PEAPEAHEA
1212
; CHECK: int **x
1313

14+
?foo@@3Y123KA
15+
; CHECK: unsigned long foo[3][4]
16+
1417
?x@@3PEAY02HEA
1518
; CHECK: int (*x)[3]
1619

0 commit comments

Comments
 (0)