diff --git a/clang/lib/AST/Decl.cpp b/clang/lib/AST/Decl.cpp index 4ecb41b3f0b7..772f7353c362 100644 --- a/clang/lib/AST/Decl.cpp +++ b/clang/lib/AST/Decl.cpp @@ -1959,7 +1959,10 @@ TemplateSpecializationKind VarDecl::getTemplateSpecializationKind() const { } MemberSpecializationInfo *VarDecl::getMemberSpecializationInfo() const { - return getASTContext().getInstantiatedFromStaticDataMember(this); + if (isStaticDataMember()) + return getASTContext().getInstantiatedFromStaticDataMember(this); + + return 0; } void VarDecl::setTemplateSpecializationKind(TemplateSpecializationKind TSK, diff --git a/clang/test/Modules/Inputs/cxx-templates-a.h b/clang/test/Modules/Inputs/cxx-templates-a.h index cc83d7bc0340..aaafc1b1bdb4 100644 --- a/clang/test/Modules/Inputs/cxx-templates-a.h +++ b/clang/test/Modules/Inputs/cxx-templates-a.h @@ -20,3 +20,5 @@ template void PerformDelayedLookup(T &t) { typename T::Inner inner; FoundByADL(t); } + +template void PerformDelayedLookupInDefaultArgument(T &t, int a = (FoundByADL(T()), 0)) {} diff --git a/clang/test/Modules/cxx-templates.cpp b/clang/test/Modules/cxx-templates.cpp index bb8ba034be17..79052dd34bb1 100644 --- a/clang/test/Modules/cxx-templates.cpp +++ b/clang/test/Modules/cxx-templates.cpp @@ -51,6 +51,9 @@ void g() { // 'common'. That type is not visible here. PerformDelayedLookup(defined_in_common); + // Likewise, but via a default argument. + PerformDelayedLookupInDefaultArgument(defined_in_common); + // Trigger the instantiation of a template in 'b' that uses a type defined in // 'b_impl'. That type is not visible here. UseDefinedInBImpl();