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/class-argument-lookup.cpp =================================================================== --- /dev/null +++ clang/test/SemaCXX/class-argument-lookup.cpp @@ -0,0 +1,17 @@ +// RUN: %clang_cc1 -verify -fsyntax-only -fopenmp %s + +// expected-no-diagnostics + +template +struct z { + static void aj() { + T f; +#pragma omp target map(f) + ; + } +}; + +template class ar {}; +template struct as {}; + +template class z>>;