diff options
author | Josh Stone <jistone@redhat.com> | 2019-01-23 00:53:22 +0000 |
---|---|---|
committer | Josh Stone <jistone@redhat.com> | 2019-01-23 00:53:22 +0000 |
commit | 7a3108ff0f9a24cb8d80e708371d8520d8af6ab5 (patch) | |
tree | 1a2fe28998abff60b7778e053a6200fb61ecee30 /llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp | |
parent | b4465f12dc36ebd51735edc5fa3b1567aa4380bf (diff) | |
download | bcm5719-llvm-7a3108ff0f9a24cb8d80e708371d8520d8af6ab5.tar.gz bcm5719-llvm-7a3108ff0f9a24cb8d80e708371d8520d8af6ab5.zip |
[CodeView] Allow empty types in member functions
Summary:
`CodeViewDebug::lowerTypeMemberFunction` used to default to a `Void`
return type if the function's type array was empty. After D54667, it
started blindly indexing the 0th item for the return type, which fails
in `getOperand` for empty arrays if assertions are enabled.
This patch restores the `Void` return type for empty type arrays, and
adds a test generated by Rust in line-only debuginfo mode.
Reviewers: zturner, rnk
Reviewed By: rnk
Subscribers: hiraditya, JDevlieghere, llvm-commits
Differential Revision: https://reviews.llvm.org/D57070
llvm-svn: 351910
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp')
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp index 75ecd81f210..60731f1e676 100644 --- a/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp @@ -1835,7 +1835,10 @@ TypeIndex CodeViewDebug::lowerTypeMemberFunction(const DISubroutineType *Ty, unsigned Index = 0; SmallVector<TypeIndex, 8> ArgTypeIndices; - TypeIndex ReturnTypeIndex = getTypeIndex(ReturnAndArgs[Index++]); + TypeIndex ReturnTypeIndex = TypeIndex::Void(); + if (ReturnAndArgs.size() > Index) { + ReturnTypeIndex = getTypeIndex(ReturnAndArgs[Index++]); + } // If the first argument is a pointer type and this isn't a static method, // treat it as the special 'this' parameter, which is encoded separately from |