Index: clang/lib/Sema/SemaLookup.cpp =================================================================== --- clang/lib/Sema/SemaLookup.cpp +++ clang/lib/Sema/SemaLookup.cpp @@ -2723,8 +2723,10 @@ if (!Result.addClassTransitive(Class)) return; - // Only recurse into base classes for complete types. - if (!Result.S.isCompleteType(Result.InstantiationLoc, + // Only recurse into base classes for complete types and for class templates + // that that have been instantiated. + if (!Result.InstantiationLoc.getPtrEncoding() || + !Result.S.isCompleteType(Result.InstantiationLoc, Result.S.Context.getRecordType(Class))) return; Index: clang/test/SemaCXX/template-specialization.cpp =================================================================== --- clang/test/SemaCXX/template-specialization.cpp +++ clang/test/SemaCXX/template-specialization.cpp @@ -19,3 +19,16 @@ B::foo<4>(); // expected-note {{in instantiation of function template specialization 'B::foo<4>'}} return 0; } + +template +struct z { + static void aj() { + T f; +#pragma omp target map(f) + ; + } +}; + +template class ar {}; +template struct as {}; +template class z>>;