diff --git a/clang/lib/Sema/SemaCXXScopeSpec.cpp b/clang/lib/Sema/SemaCXXScopeSpec.cpp index 17ae7ca5627a9..e21f15bea576e 100644 --- a/clang/lib/Sema/SemaCXXScopeSpec.cpp +++ b/clang/lib/Sema/SemaCXXScopeSpec.cpp @@ -33,7 +33,7 @@ static CXXRecordDecl *getCurrentInstantiationOf(QualType T, return nullptr; auto *RD = cast(TagTy->getDecl())->getDefinitionOrSelf(); if (isa(TagTy) || - RD->isCurrentInstantiation(CurContext)) + (RD->isDependentContext() && RD->isCurrentInstantiation(CurContext))) return RD; return nullptr; } diff --git a/clang/test/SemaTemplate/dependent-names.cpp b/clang/test/SemaTemplate/dependent-names.cpp index d6bd670841c08..332c4a3342fd2 100644 --- a/clang/test/SemaTemplate/dependent-names.cpp +++ b/clang/test/SemaTemplate/dependent-names.cpp @@ -1,4 +1,5 @@ // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s +// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 -fms-extensions %s typedef double A; template class B { @@ -481,3 +482,17 @@ namespace TransformNestedName { template ::State::kA>> inline void N::F() {} } // namespace TransformNestedName + +namespace GH133610 { + struct a { + using e = int; + }; + +#ifdef _MSC_EXTENSIONS + void current(const char * = __builtin_FUNCSIG()); + template void c() { + decltype(a(current()))::e; + } +#endif +} +