Browse Source

Parser.cpp: fix WalkType for clang::Type::TypeClass == clang::Type::DependentTemplateSpecialization

pull/1819/head
Deadlocklogic 3 years ago
parent
commit
eb8dffecd1
  1. 29
      src/CppParser/Parser.cpp

29
src/CppParser/Parser.cpp

@ -2681,10 +2681,11 @@ Type* Parser::WalkType(clang::QualType QualType, const clang::TypeLoc* TL,
if (TS->isSugared()) if (TS->isSugared())
TST->desugared = GetQualifiedType(TS->getCanonicalTypeInternal(), TL); TST->desugared = GetQualifiedType(TS->getCanonicalTypeInternal(), TL);
TypeLoc UTL, ETL, ITL; TemplateArgumentList TArgs(TemplateArgumentList::OnStack, TS->template_arguments());
if (LocValid) if (LocValid)
{ {
TypeLoc UTL, ETL, ITL;
auto TypeLocClass = TL->getTypeLocClass(); auto TypeLocClass = TL->getTypeLocClass();
if (TypeLocClass == TypeLoc::Qualified) if (TypeLocClass == TypeLoc::Qualified)
{ {
@ -2698,20 +2699,26 @@ Type* Parser::WalkType(clang::QualType QualType, const clang::TypeLoc* TL,
TL = &ITL; TL = &ITL;
} }
assert(TL->getTypeLocClass() == TypeLoc::DependentTemplateSpecialization); if (TL->getTypeLocClass() == TypeLoc::DependentTemplateSpecialization)
{
DependentTemplateSpecializationTypeLoc TSpecTL = TL->getAs<DependentTemplateSpecializationTypeLoc>();
TST->Arguments = WalkTemplateArgumentList(&TArgs, &TSpecTL);
}
else if (TL->getTypeLocClass() == TypeLoc::TemplateSpecialization)
{
TemplateSpecializationTypeLoc TSpecTL = TL->getAs<TemplateSpecializationTypeLoc>();
TST->Arguments = WalkTemplateArgumentList(&TArgs, &TSpecTL);
}
else
{
llvm_unreachable("Unexpected semantics");
}
} }
else
DependentTemplateSpecializationTypeLoc TSpecTL;
DependentTemplateSpecializationTypeLoc *TSTL = 0;
if (LocValid)
{ {
TSpecTL = TL->getAs<DependentTemplateSpecializationTypeLoc>(); TST->Arguments = WalkTemplateArgumentList(&TArgs, (DependentTemplateSpecializationTypeLoc*)nullptr);
TSTL = &TSpecTL;
} }
TemplateArgumentList TArgs(TemplateArgumentList::OnStack, TS->template_arguments());
TST->Arguments = WalkTemplateArgumentList(&TArgs, TSTL);
Ty = TST; Ty = TST;
break; break;
} }

Loading…
Cancel
Save