[clang] ecae672 - [ASTImporter] Fix AST import crash for a friend decl
via cfe-commits
cfe-commits at lists.llvm.org
Tue Jun 30 13:57:24 PDT 2020
Author: Vince Bridgers
Date: 2020-06-30T15:57:01-05:00
New Revision: ecae672ac2ac42bc15bdc794cc56ddccadec9e4f
URL: https://github.com/llvm/llvm-project/commit/ecae672ac2ac42bc15bdc794cc56ddccadec9e4f
DIFF: https://github.com/llvm/llvm-project/commit/ecae672ac2ac42bc15bdc794cc56ddccadec9e4f.diff
LOG: [ASTImporter] Fix AST import crash for a friend decl
Summary:
Running CTU testing, we found that VisitFriendDecl in
ASTImporterLookup.cpp was not handling a particular non-dependent case,
so we reached the llvm_unreachable case.
The FriendDecl and QualType not handled were:
(gdb) p D->dump()
FriendDecl 0x7ffff5cf1958
< <<srcfile>>, 'nlohmann::basic_json<std::map, std::vector,
std::basic_string<char>, bool, long long, unsigned long long, double,
std::allocator, adl_serializer, std::vector<unsigned char,
std::allocator<unsigned char>>>':'nlohmann::basic_json<std::map,
std::vector, std::basic_string<char>, bool, long long, unsigned long
long, double, std::allocator, adl_serializer, std::vector<unsigned char,
std::allocator<unsigned char>>>'
(gdb) p Ty->dump()
SubstTemplateTypeParmType 0x7ffff5cf0df0 'class
nlohmann::basic_json<std::map, std::vector, class
std::basic_string<char>, _Bool, long long, unsigned long long, double,
std::allocator, adl_serializer, class std::vector<unsigned char, class
std::allocator<unsigned char> > >' sugar
|-TemplateTypeParmType 0x7ffff643ea40 'BasicJsonType' dependent depth 0
index 0
| `-TemplateTypeParm 0x7ffff643e9e8 'BasicJsonType'
`-RecordType 0x1012ad20 'class nlohmann::basic_json<std::map,
std::vector, class std::basic_string<char>, _Bool, long long, unsigned
long long, double, std::allocator, adl_serializer, class
std::vector<unsigned char, class std::allocator<unsigned char> > >'
`-ClassTemplateSpecialization 0x1012ab68 'basic_json'
Reviewers: martong, a.sidorin
Reviewed By: martong
Subscribers: kristof.beyls, rnkovacs, teemperor, cfe-commits, dkrupp
Tags: #clang
Differential Revision: https://reviews.llvm.org/D82882
Added:
Modified:
clang/lib/AST/ASTImporterLookupTable.cpp
Removed:
################################################################################
diff --git a/clang/lib/AST/ASTImporterLookupTable.cpp b/clang/lib/AST/ASTImporterLookupTable.cpp
index 7390329d4ed8..4d6fff8f3419 100644
--- a/clang/lib/AST/ASTImporterLookupTable.cpp
+++ b/clang/lib/AST/ASTImporterLookupTable.cpp
@@ -45,7 +45,11 @@ struct Builder : RecursiveASTVisitor<Builder> {
LT.add(RTy->getAsCXXRecordDecl());
else if (const auto *SpecTy = dyn_cast<TemplateSpecializationType>(Ty))
LT.add(SpecTy->getAsCXXRecordDecl());
- else if (isa<TypedefType>(Ty)) {
+ else if (const auto *SubstTy =
+ dyn_cast<SubstTemplateTypeParmType>(Ty)) {
+ if (SubstTy->getAsCXXRecordDecl())
+ LT.add(SubstTy->getAsCXXRecordDecl());
+ } else if (isa<TypedefType>(Ty)) {
// We do not put friend typedefs to the lookup table because
// ASTImporter does not organize typedefs into redecl chains.
} else {
More information about the cfe-commits
mailing list