@@ -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