 +
 +   // class Redecl;
 +
-+   // template <typename T> int fwddeclThenDefinedInLeftRight(T);
-+
-+   // int usesfwddeclThenDefinedInLeftRight() {
-+   //    return fwddeclThenDefinedInLeftRight((char)1); }
++   //template <typename T> int fwddeclThenDefinedInLeftRight(T);
++
++   //int usesfwddeclThenDefinedInLeftRight() {
++   //  return fwddeclThenDefinedInLeftRight((char)1); 
++   //}
 +
 +   // template <typename T> int fwddeclThenDefinedInLeftRight(T) { return 0; }
 +

+   class AB: public virtual AA<char> {};
+   */
+
+   // template <typename T> int fwddeclThenDefinedInLeftRight(T);
+
+   // int usesfwddeclThenDefinedInLeftRightToo() {
+   //    return fwddeclThenDefinedInLeftRight((float)1); }
+
+   // template <typename T> int fwddeclThenDefinedInLeftRight(T) { return 0; }
+
+  template <typename T> int definedInLeft(T);
+
+   // template <typename T> int definedInLeftSpecializedInRight(T);
+   // template <> int definedInLeftSpecializedInRight<char>(char) { return 1; }
+   // int usesdefinedInLeftSpecializedInRightChar() {
+   //    return definedInLeftSpecializedInRight((char)0); }
+//}
Index: tools/clang/test/Modules/Inputs/redecl_templates_left.h
===================================================================

   }
 }
 
@@ -1846,9 +1890,11 @@
                                                    cast<NamespaceDecl>(Latest));
   } else {
     RedeclarableTemplateDecl *TD = cast<RedeclarableTemplateDecl>(D);
