@@ -2638,10 +2638,11 @@ Type* Parser::WalkType(clang::QualType QualType, const clang::TypeLoc* TL,
2638
2638
if (TS->isSugared ())
2639
2639
TST->desugared = GetQualifiedType (TS->getCanonicalTypeInternal (), TL);
2640
2640
2641
- TypeLoc UTL, ETL, ITL ;
2641
+ TemplateArgumentList TArgs (TemplateArgumentList::OnStack, TS-> template_arguments ()) ;
2642
2642
2643
2643
if (LocValid)
2644
2644
{
2645
+ TypeLoc UTL, ETL, ITL;
2645
2646
auto TypeLocClass = TL->getTypeLocClass ();
2646
2647
if (TypeLocClass == TypeLoc::Qualified)
2647
2648
{
@@ -2655,20 +2656,26 @@ Type* Parser::WalkType(clang::QualType QualType, const clang::TypeLoc* TL,
2655
2656
TL = &ITL;
2656
2657
}
2657
2658
2658
- assert (TL->getTypeLocClass () == TypeLoc::TemplateSpecialization);
2659
+ if (TL->getTypeLocClass () == TypeLoc::DependentTemplateSpecialization)
2660
+ {
2661
+ DependentTemplateSpecializationTypeLoc TSpecTL = TL->getAs <DependentTemplateSpecializationTypeLoc>();
2662
+ TST->Arguments = WalkTemplateArgumentList (&TArgs, &TSpecTL);
2663
+ }
2664
+ else if (TL->getTypeLocClass () == TypeLoc::TemplateSpecialization)
2665
+ {
2666
+ TemplateSpecializationTypeLoc TSpecTL = TL->getAs <TemplateSpecializationTypeLoc>();
2667
+ TST->Arguments = WalkTemplateArgumentList (&TArgs, &TSpecTL);
2668
+ }
2669
+ else
2670
+ {
2671
+ llvm_unreachable (" Unexpected semantics" );
2672
+ }
2659
2673
}
2660
-
2661
- TemplateSpecializationTypeLoc TSpecTL;
2662
- TemplateSpecializationTypeLoc *TSTL = 0 ;
2663
- if (LocValid)
2674
+ else
2664
2675
{
2665
- TSpecTL = TL->getAs <TemplateSpecializationTypeLoc>();
2666
- TSTL = &TSpecTL;
2676
+ TST->Arguments = WalkTemplateArgumentList (&TArgs, (TemplateSpecializationTypeLoc*)nullptr );
2667
2677
}
2668
2678
2669
- TemplateArgumentList TArgs (TemplateArgumentList::OnStack, TS->template_arguments ());
2670
- TST->Arguments = WalkTemplateArgumentList (&TArgs, TSTL);
2671
-
2672
2679
Ty = TST;
2673
2680
break ;
2674
2681
}
0 commit comments