diff options
author | Awanish Pandey <Awanish.Pandey@amd.com> | 2020-03-02 10:52:12 +0530 |
---|---|---|
committer | Sourabh Singh Tomar <SourabhSingh.Tomar@amd.com> | 2020-03-02 16:45:48 +0530 |
commit | 7a42babeb83e3927e89e72a0e7e45be9d41b6c23 (patch) | |
tree | 86ba127e5bd1ddac9d8ef52d63c35748d023bdac /llvm/lib/Bitcode/Reader/MetadataLoader.cpp | |
parent | e4380b07cca81fcb9c5c10883fc309d8f7c3f7ab (diff) | |
download | llvm-7a42babeb83e3927e89e72a0e7e45be9d41b6c23.zip llvm-7a42babeb83e3927e89e72a0e7e45be9d41b6c23.tar.gz llvm-7a42babeb83e3927e89e72a0e7e45be9d41b6c23.tar.bz2 |
Reland "[DebugInfo][clang][DWARF5]: Added support for debuginfo generation for defaulted parameters
in C++ templates."
This was reverted in 802b22b5c8c30bebc1695a217478be02653c6b53 due to
missing .bc file and a chromium bot failure.
https://bugs.chromium.org/p/chromium/issues/detail?id=1057559#c1
This revision address both of them.
Summary:
This patch adds support for debuginfo generation for defaulted
parameters in clang and also extends corresponding DebugMetadata/IR to support this feature.
Reviewers: probinson, aprantl, dblaikie
Reviewed By: aprantl, dblaikie
Differential Revision: https://reviews.llvm.org/D73462
Diffstat (limited to 'llvm/lib/Bitcode/Reader/MetadataLoader.cpp')
-rw-r--r-- | llvm/lib/Bitcode/Reader/MetadataLoader.cpp | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp index 3cff468..9a78a2b 100644 --- a/llvm/lib/Bitcode/Reader/MetadataLoader.cpp +++ b/llvm/lib/Bitcode/Reader/MetadataLoader.cpp @@ -1668,27 +1668,34 @@ Error MetadataLoader::MetadataLoaderImpl::parseOneMetadata( break; } case bitc::METADATA_TEMPLATE_TYPE: { - if (Record.size() != 3) + if (Record.size() < 3 || Record.size() > 4) return error("Invalid record"); IsDistinct = Record[0]; - MetadataList.assignValue(GET_OR_DISTINCT(DITemplateTypeParameter, - (Context, getMDString(Record[1]), - getDITypeRefOrNull(Record[2]))), - NextMetadataNo); + MetadataList.assignValue( + GET_OR_DISTINCT(DITemplateTypeParameter, + (Context, getMDString(Record[1]), + getDITypeRefOrNull(Record[2]), + (Record.size() == 4) ? getMDOrNull(Record[3]) + : getMDOrNull(false))), + NextMetadataNo); NextMetadataNo++; break; } case bitc::METADATA_TEMPLATE_VALUE: { - if (Record.size() != 5) + if (Record.size() < 5 || Record.size() > 6) return error("Invalid record"); IsDistinct = Record[0]; + MetadataList.assignValue( - GET_OR_DISTINCT(DITemplateValueParameter, - (Context, Record[1], getMDString(Record[2]), - getDITypeRefOrNull(Record[3]), - getMDOrNull(Record[4]))), + GET_OR_DISTINCT( + DITemplateValueParameter, + (Context, Record[1], getMDString(Record[2]), + getDITypeRefOrNull(Record[3]), + (Record.size() == 6) ? getMDOrNull(Record[4]) : getMDOrNull(false), + (Record.size() == 6) ? getMDOrNull(Record[5]) + : getMDOrNull(Record[4]))), NextMetadataNo); NextMetadataNo++; break; |