Index: lib/Sema/Sema.cpp =================================================================== --- lib/Sema/Sema.cpp +++ lib/Sema/Sema.cpp @@ -545,7 +545,8 @@ if (const CXXMethodDecl *M = dyn_cast(*I)) Complete = M->isDefined() || (M->isPure() && !isa(M)); else if (const FunctionTemplateDecl *F = dyn_cast(*I)) - Complete = F->getTemplatedDecl()->isDefined(); + Complete = !F->getTemplatedDecl()->isLateTemplateParsed() && + F->getTemplatedDecl()->isDefined(); else if (const CXXRecordDecl *R = dyn_cast(*I)) { if (R->isInjectedClassName()) continue; Index: test/SemaCXX/warn-unused-private-field-delayed-template.cpp =================================================================== --- /dev/null +++ test/SemaCXX/warn-unused-private-field-delayed-template.cpp @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 -fsyntax-only -fdelayed-template-parsing -Wunused-private-field -Wused-but-marked-unused -Wno-uninitialized -verify -std=c++11 %s +// expected-no-diagnostics + +class EverythingMayBeUsed { + int x; +public: + template + void f() { + x = 0; + } +};