Skip to content

Commit eb8dffe

Browse files
committed
Parser.cpp: fix WalkType for clang::Type::TypeClass == clang::Type::DependentTemplateSpecialization
1 parent 9071cd2 commit eb8dffe

File tree

1 file changed

+18
-11
lines changed

1 file changed

+18
-11
lines changed

src/CppParser/Parser.cpp

+18-11
Original file line numberDiff line numberDiff line change
@@ -2681,10 +2681,11 @@ Type* Parser::WalkType(clang::QualType QualType, const clang::TypeLoc* TL,
26812681
if (TS->isSugared())
26822682
TST->desugared = GetQualifiedType(TS->getCanonicalTypeInternal(), TL);
26832683

2684-
TypeLoc UTL, ETL, ITL;
2684+
TemplateArgumentList TArgs(TemplateArgumentList::OnStack, TS->template_arguments());
26852685

26862686
if (LocValid)
26872687
{
2688+
TypeLoc UTL, ETL, ITL;
26882689
auto TypeLocClass = TL->getTypeLocClass();
26892690
if (TypeLocClass == TypeLoc::Qualified)
26902691
{
@@ -2698,20 +2699,26 @@ Type* Parser::WalkType(clang::QualType QualType, const clang::TypeLoc* TL,
26982699
TL = &ITL;
26992700
}
27002701

2701-
assert(TL->getTypeLocClass() == TypeLoc::DependentTemplateSpecialization);
2702+
if (TL->getTypeLocClass() == TypeLoc::DependentTemplateSpecialization)
2703+
{
2704+
DependentTemplateSpecializationTypeLoc TSpecTL = TL->getAs<DependentTemplateSpecializationTypeLoc>();
2705+
TST->Arguments = WalkTemplateArgumentList(&TArgs, &TSpecTL);
2706+
}
2707+
else if (TL->getTypeLocClass() == TypeLoc::TemplateSpecialization)
2708+
{
2709+
TemplateSpecializationTypeLoc TSpecTL = TL->getAs<TemplateSpecializationTypeLoc>();
2710+
TST->Arguments = WalkTemplateArgumentList(&TArgs, &TSpecTL);
2711+
}
2712+
else
2713+
{
2714+
llvm_unreachable("Unexpected semantics");
2715+
}
27022716
}
2703-
2704-
DependentTemplateSpecializationTypeLoc TSpecTL;
2705-
DependentTemplateSpecializationTypeLoc *TSTL = 0;
2706-
if (LocValid)
2717+
else
27072718
{
2708-
TSpecTL = TL->getAs<DependentTemplateSpecializationTypeLoc>();
2709-
TSTL = &TSpecTL;
2719+
TST->Arguments = WalkTemplateArgumentList(&TArgs, (DependentTemplateSpecializationTypeLoc*)nullptr);
27102720
}
27112721

2712-
TemplateArgumentList TArgs(TemplateArgumentList::OnStack, TS->template_arguments());
2713-
TST->Arguments = WalkTemplateArgumentList(&TArgs, TSTL);
2714-
27152722
Ty = TST;
27162723
break;
27172724
}

0 commit comments

Comments
 (0)