@@ -2681,10 +2681,11 @@ Type* Parser::WalkType(clang::QualType QualType, const clang::TypeLoc* TL,
2681
2681
if (TS->isSugared ())
2682
2682
TST->desugared = GetQualifiedType (TS->getCanonicalTypeInternal (), TL);
2683
2683
2684
- TypeLoc UTL, ETL, ITL ;
2684
+ TemplateArgumentList TArgs (TemplateArgumentList::OnStack, TS-> template_arguments ()) ;
2685
2685
2686
2686
if (LocValid)
2687
2687
{
2688
+ TypeLoc UTL, ETL, ITL;
2688
2689
auto TypeLocClass = TL->getTypeLocClass ();
2689
2690
if (TypeLocClass == TypeLoc::Qualified)
2690
2691
{
@@ -2698,20 +2699,26 @@ Type* Parser::WalkType(clang::QualType QualType, const clang::TypeLoc* TL,
2698
2699
TL = &ITL;
2699
2700
}
2700
2701
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
+ }
2702
2716
}
2703
-
2704
- DependentTemplateSpecializationTypeLoc TSpecTL;
2705
- DependentTemplateSpecializationTypeLoc *TSTL = 0 ;
2706
- if (LocValid)
2717
+ else
2707
2718
{
2708
- TSpecTL = TL->getAs <DependentTemplateSpecializationTypeLoc>();
2709
- TSTL = &TSpecTL;
2719
+ TST->Arguments = WalkTemplateArgumentList (&TArgs, (DependentTemplateSpecializationTypeLoc*)nullptr );
2710
2720
}
2711
2721
2712
- TemplateArgumentList TArgs (TemplateArgumentList::OnStack, TS->template_arguments ());
2713
- TST->Arguments = WalkTemplateArgumentList (&TArgs, TSTL);
2714
-
2715
2722
Ty = TST;
2716
2723
break ;
2717
2724
}
0 commit comments