diff --git a/lib/AST/Decl.cpp b/lib/AST/Decl.cpp
index 7ae7e82..0e8c660 100644
--- a/lib/AST/Decl.cpp
+++ b/lib/AST/Decl.cpp
@@ -1049,8 +1049,12 @@ static LinkageInfo getLVForLocalDecl(const NamedDecl *D,
     return LinkageInfo::none();
 
   const FunctionDecl *FD = getOutermostFunctionContext(D);
-  if (!FD || !FD->isInlined())
+  if (!FD)
+    return LinkageInfo::none();
+
+  if (!FD->isInlined() && FD->getTemplateSpecializationKind() == TSK_Undeclared)
     return LinkageInfo::none();
+
   LinkageInfo LV = getLVForDecl(FD, computation);
   if (!isExternallyVisible(LV.getLinkage()))
     return LinkageInfo::none();
diff --git a/test/CodeGenCXX/linkage.cpp b/test/CodeGenCXX/linkage.cpp
index 7f6188f..314e142 100644
--- a/test/CodeGenCXX/linkage.cpp
+++ b/test/CodeGenCXX/linkage.cpp
@@ -184,3 +184,14 @@ namespace test14 {
   }
   void h() { f(); }
 }
+
+namespace test15 {
+  // CHECK-DAG: define linkonce_odr void @_ZN6test153zedIZNS_3fooIiEEPvvE3bar_9EEvv(
+  template <class T> void zed() {}
+  template <class T> void *foo() {
+    class bar {
+    };
+    return reinterpret_cast<void *>(zed<bar>);
+  }
+  void test() { foo<int>(); }
+}
