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 12:33:05 +0530 |
commit | c2b437d53d40b6dc5603c97f527398f477d9c5f1 (patch) | |
tree | 17c842f8ddbcde00c058dfa88c17f4bb3d313c35 /llvm/lib/Bitcode/Reader/MetadataLoader.cpp | |
parent | daab6ad58d4b2c90126efacb836c9286fd85031f (diff) | |
download | llvm-c2b437d53d40b6dc5603c97f527398f477d9c5f1.zip llvm-c2b437d53d40b6dc5603c97f527398f477d9c5f1.tar.gz llvm-c2b437d53d40b6dc5603c97f527398f477d9c5f1.tar.bz2 |
[DebugInfo][clang][DWARF5]: Added support for debuginfo generation for defaulted parameters
in C++ templates.
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; |