Repository: kythe/kythe
Pull request #5407 (2022-10-25 22:29:25)

chore(cxx): remove support for abs nodes


Patch:
diff --git a/kythe/cxx/indexer/cxx/GraphObserver.h b/kythe/cxx/indexer/cxx/GraphObserver.h
index 64aec65c9..06b80e73e 100644
--- a/kythe/cxx/indexer/cxx/GraphObserver.h
+++ b/kythe/cxx/indexer/cxx/GraphObserver.h
@@ -586,38 +586,10 @@ class GraphObserver {
     Unscoped  ///< This enum is unscoped (a plain `enum`).
   };
 
-  /// \brief Records a node representing a dependent type abstraction, like
-  /// a template.
-  ///
-  /// Abstraction nodes are used to represent the binding sites of compile-time
-  /// variables. Consider the following class template definition:
-  ///
-  /// ~~~
-  /// template <typename T> class C { T m; };
-  /// ~~~
-  ///
-  /// Here, the `GraphObserver` will be notified of a single abstraction
-  /// node. This node will have a single parameter, recorded with
-  /// `recordAbsVarNode`. The abstraction node will have a child record
-  /// node, which in turn will have a field `m` with a type that depends on
-  /// the abstraction variable parameter.
-  ///
-  /// \param Node The NodeId of the abstraction.
-  /// \sa recordAbsVarNode
-  virtual void recordAbsNode(const NodeId& Node) {}
-
   /// \brief Explicitly record marked source for some `Node`.
   virtual void recordMarkedSource(
       const NodeId& Node, const absl::optional<MarkedSource>& MarkedSource) {}
 
-  /// \brief Records a node representing a variable in a dependent type
-  /// abstraction.
-  /// \param Node The `NodeId` of the variable.
-  /// \param MarkedSource marked source for this variable.
-  /// \sa recordAbsNode
-  virtual void recordAbsVarNode(
-      const NodeId& Node, const absl::optional<MarkedSource>& MarkedSource) {}
-
   /// \brief Records a node representing a variable in a dependent type
   /// abstraction.
   /// \param Node The `NodeId` of the variable.
diff --git a/kythe/cxx/indexer/cxx/IndexerASTHooks.cc b/kythe/cxx/indexer/cxx/IndexerASTHooks.cc
index 02cd19989..e18ade10c 100644
--- a/kythe/cxx/indexer/cxx/IndexerASTHooks.cc
+++ b/kythe/cxx/indexer/cxx/IndexerASTHooks.cc
@@ -243,9 +243,9 @@ bool ConstructorOverridesInitializer(const clang::CXXConstructorDecl* Ctor,
 
 /// \return true if `D` should not be visited because its name will never be
 /// uttered due to aliasing rules.
-bool SkipAliasedDecl(const clang::Decl* D, bool absnodes) {
+bool SkipAliasedDecl(const clang::Decl* D) {
   return absl::GetFlag(FLAGS_experimental_alias_template_instantiations) &&
-         (FindSpecializedTemplate(D, !absnodes) != D);
+         (FindSpecializedTemplate(D) != D);
 }
 
 bool IsObjCForwardDecl(const clang::ObjCInterfaceDecl* decl) {
@@ -1059,42 +1059,7 @@ bool IndexerASTVisitor::VisitDecl(const clang::Decl* Decl) {
         VisitComment(CommentOrNull, DCxt, DCID.value());
       }
     }
-    if (options_.AbsNodes) {
-      if (const auto* CTPSD =
-              dyn_cast_or_null<clang::ClassTemplatePartialSpecializationDecl>(
-                  Decl)) {
-        auto NodeId = BuildNodeIdForDecl(CTPSD);
-        VisitAttributes(Decl, NodeId);
-        if (CommentOrNull != nullptr) VisitComment(CommentOrNull, DCxt, NodeId);
-      }
-      if (const auto* FD = dyn_cast_or_null<clang::FunctionDecl>(Decl)) {
-        if (const auto* FTD = FD->getDescribedFunctionTemplate()) {
-          auto NodeId = BuildNodeIdForDecl(FTD);
-          VisitAttributes(Decl, NodeId);
-          if (CommentOrNull != nullptr)
-            VisitComment(CommentOrNull, DCxt, NodeId);
-        }
-      }
-    }
   } else {
-    if (options_.AbsNodes) {
-      if (const auto* VD = dyn_cast_or_null<clang::VarDecl>(Decl)) {
-        if (const auto* VTD = VD->getDescribedVarTemplate()) {
-          auto NodeId = BuildNodeIdForDecl(VTD);
-          VisitAttributes(VTD, NodeId);
-          if (CommentOrNull != nullptr)
-            VisitComment(CommentOrNull, DCxt, NodeId);
-        }
-      } else if (const auto* AD =
-                     dyn_cast_or_null<clang::TypeAliasDecl>(Decl)) {
-        if (const auto* TATD = AD->getDescribedAliasTemplate()) {
-          auto NodeId = BuildNodeIdForDecl(TATD);
-          VisitAttributes(TATD, NodeId);
-          if (CommentOrNull != nullptr)
-            VisitComment(CommentOrNull, DCxt, NodeId);
-        }
-      }
-    }
     auto NodeId = BuildNodeIdForDecl(Decl);
     VisitAttributes(Decl, NodeId);
     if (CommentOrNull != nullptr) VisitComment(CommentOrNull, DCxt, NodeId);
@@ -1944,19 +1909,6 @@ IndexerASTVisitor::BuildNodeIdForDeclContext(const clang::DeclContext* DC) {
     if (llvm::isa<clang::TranslationUnitDecl>(DCDecl)) {
       return absl::nullopt;
     }
-    if (options_.AbsNodes) {
-      if (llvm::isa<clang::ClassTemplatePartialSpecializationDecl>(DCDecl)) {
-        return BuildNodeIdForDecl(DCDecl, 0);
-      } else if (auto* CRD = dyn_cast<const clang::CXXRecordDecl>(DCDecl)) {
-        if (const auto* CTD = CRD->getDescribedClassTemplate()) {
-          return BuildNodeIdForDecl(DCDecl, 0);
-        }
-      } else if (auto* FD = dyn_cast<const clang::FunctionDecl>(DCDecl)) {
-        if (FD->getDescribedFunctionTemplate()) {
-          return BuildNodeIdForDecl(DCDecl, 0);
-        }
-      }
-    }
     return BuildNodeIdForDecl(DCDecl);
   }
   return absl::nullopt;
@@ -2588,7 +2540,7 @@ IndexerASTVisitor::BuildTemplateArgumentList(
 }
 
 bool IndexerASTVisitor::VisitVarDecl(const clang::VarDecl* Decl) {
-  if (SkipAliasedDecl(Decl, options_.AbsNodes)) {
+  if (SkipAliasedDecl(Decl)) {
     return true;
   }
   if (isa<clang::ParmVarDecl>(Decl)) {
@@ -2611,8 +2563,7 @@ bool IndexerASTVisitor::VisitVarDecl(const clang::VarDecl* Decl) {
   if (const auto* VTPSD =
           dyn_cast<const clang::VarTemplatePartialSpecializationDecl>(Decl)) {
     ArgsAsWritten = VTPSD->getTemplateArgsAsWritten();
-    BodyDeclNode = options_.AbsNodes ? BuildNodeIdForDecl(Decl, 0)
-                                     : BuildNodeIdForDecl(Decl);
+    BodyDeclNode = BuildNodeIdForDecl(Decl);
     DeclNode = RecordTemplate(VTPSD, BodyDeclNode);
   } else if (const auto* VTD = Decl->getDescribedVarTemplate()) {
     CHECK(!isa<clang::VarTemplateSpecializationDecl>(VTD));
@@ -2704,8 +2655,7 @@ bool IndexerASTVisitor::VisitVarDecl(const clang::VarDecl* Decl) {
       FileID NextDeclFile =
           Observer.getSourceManager()->getFileID(NextDecl->getLocation());
       // We should not point a completes edge from an abs node to a var node.
-      GraphObserver::NodeId TargetDecl = BuildNodeIdForDecl(
-          OuterTemplate && options_.AbsNodes ? OuterTemplate : NextDecl);
+      GraphObserver::NodeId TargetDecl = BuildNodeIdForDecl(NextDecl);
       if (NameRangeInContext) {
         Observer.recordCompletionRange(
             NameRangeInContext.value(), TargetDecl,
@@ -3109,11 +3059,6 @@ GraphObserver::NodeId IndexerASTVisitor::RecordGenericClass(
     const clang::ObjCInterfaceDecl* IDecl, const clang::ObjCTypeParamList* TPL,
     const GraphObserver::NodeId& BodyId) {
   GraphObserver::NodeId AbsId = BodyId;
-  if (options_.AbsNodes) {
-    AbsId = BuildNodeIdForDecl(IDecl);
-    Observer.recordAbsNode(AbsId);
-    Observer.recordChildOfEdge(BodyId, AbsId);
-  }
 
   for (const clang::ObjCTypeParamDecl* TP : *TPL) {
     GraphObserver::NodeId TypeParamId = BuildNodeIdForDecl(TP);
@@ -3122,10 +3067,7 @@ GraphObserver::NodeId IndexerASTVisitor::RecordGenericClass(
     // specific to this context, which is how it interacts with the generic type
     // (BodyID). See VisitObjCTypeParamDecl for where we record this other
     // information.
-    if (options_.AbsNodes)
-      Observer.recordParamEdge(AbsId, TP->getIndex(), TypeParamId);
-    else
-      Observer.recordTParamEdge(AbsId, TP->getIndex(), TypeParamId);
+    Observer.recordTParamEdge(AbsId, TP->getIndex(), TypeParamId);
   }
   return AbsId;
 }
@@ -3134,11 +3076,6 @@ template <typename TemplateDeclish>
 GraphObserver::NodeId IndexerASTVisitor::RecordTemplate(
     const TemplateDeclish* Decl, const GraphObserver::NodeId& BodyDeclNode) {
   auto DeclNode = BodyDeclNode;
-  if (options_.AbsNodes) {
-    DeclNode = BuildNodeIdForDecl(Decl);
-    Observer.recordChildOfEdge(BodyDeclNode, DeclNode);
-    Observer.recordAbsNode(DeclNode);
-  }
   for (const auto* ND : *Decl->getTemplateParameters()) {
     GraphObserver::NodeId ParamId =
         Observer.MakeNodeId(Observer.getDefaultClaimToken(), "");
@@ -3146,33 +3083,21 @@ GraphObserver::NodeId IndexerASTVisitor::RecordTemplate(
     auto Marks = MarkedSources.Generate(ND);
     if (const auto* TTPD = dyn_cast<clang::TemplateTypeParmDecl>(ND)) {
       ParamId = BuildNodeIdForDecl(ND);
-      if (options_.AbsNodes)
-        Observer.recordAbsVarNode(ParamId, Marks.GenerateMarkedSource(ParamId));
-      else
-        Observer.recordTVarNode(ParamId, Marks.GenerateMarkedSource(ParamId));
+      Observer.recordTVarNode(ParamId, Marks.GenerateMarkedSource(ParamId));
       ParamIndex = TTPD->getIndex();
     } else if (const auto* NTTPD =
                    dyn_cast<clang::NonTypeTemplateParmDecl>(ND)) {
       ParamId = BuildNodeIdForDecl(ND);
-      if (options_.AbsNodes)
-        Observer.recordAbsVarNode(ParamId, Marks.GenerateMarkedSource(ParamId));
-      else
-        Observer.recordTVarNode(ParamId, Marks.GenerateMarkedSource(ParamId));
+      Observer.recordTVarNode(ParamId, Marks.GenerateMarkedSource(ParamId));
       ParamIndex = NTTPD->getIndex();
     } else if (const auto* TTPD =
                    dyn_cast<clang::TemplateTemplateParmDecl>(ND)) {
       // We make the external Abs the primary node for TTPD so that
       // uses of the ParmDecl later on point at the Abs and not the wrapped
       // AbsVar.
-      GraphObserver::NodeId ParamBodyId = options_.AbsNodes
-                                              ? BuildNodeIdForDecl(ND, 0)
-                                              : BuildNodeIdForDecl(ND);
-      if (options_.AbsNodes)
-        Observer.recordAbsVarNode(ParamBodyId,
-                                  Marks.GenerateMarkedSource(ParamBodyId));
-      else
-        Observer.recordTVarNode(ParamBodyId,
-                                Marks.GenerateMarkedSource(ParamBodyId));
+      GraphObserver::NodeId ParamBodyId = BuildNodeIdForDecl(ND);
+      Observer.recordTVarNode(ParamBodyId,
+                              Marks.GenerateMarkedSource(ParamBodyId));
       ParamId = RecordTemplate(TTPD, ParamBodyId);
       ParamIndex = TTPD->getIndex();
     } else {
@@ -3182,16 +3107,13 @@ GraphObserver::NodeId IndexerASTVisitor::RecordTemplate(
     MaybeRecordDefinitionRange(
         RangeInCurrentContext(Decl->isImplicit(), ParamId, Range), ParamId,
         absl::nullopt);
-    if (options_.AbsNodes)
-      Observer.recordParamEdge(DeclNode, ParamIndex, ParamId);
-    else
-      Observer.recordTParamEdge(DeclNode, ParamIndex, ParamId);
+    Observer.recordTParamEdge(DeclNode, ParamIndex, ParamId);
   }
   return DeclNode;
 }
 
 bool IndexerASTVisitor::VisitRecordDecl(const clang::RecordDecl* Decl) {
-  if (SkipAliasedDecl(Decl, options_.AbsNodes)) {
+  if (SkipAliasedDecl(Decl)) {
     return true;
   }
   if (Decl->isInjectedClassName()) {
@@ -3214,14 +3136,12 @@ bool IndexerASTVisitor::VisitRecordDecl(const clang::RecordDecl* Decl) {
   if (const auto* CTPSD =
           dyn_cast<const clang::ClassTemplatePartialSpecializationDecl>(Decl)) {
     ArgsAsWritten = CTPSD->getTemplateArgsAsWritten();
-    BodyDeclNode = options_.AbsNodes ? BuildNodeIdForDecl(Decl, 0)
-                                     : BuildNodeIdForDecl(Decl);
+    BodyDeclNode = BuildNodeIdForDecl(Decl);
     DeclNode = RecordTemplate(CTPSD, BodyDeclNode);
   } else if (auto* CRD = dyn_cast<const clang::CXXRecordDecl>(Decl)) {
     if (const auto* CTD = CRD->getDescribedClassTemplate()) {
       CHECK(!isa<clang::ClassTemplateSpecializationDecl>(CRD));
-      BodyDeclNode = options_.AbsNodes ? BuildNodeIdForDecl(Decl, 0)
-                                       : BuildNodeIdForDecl(Decl);
+      BodyDeclNode = BuildNodeIdForDecl(Decl);
       DeclNode = RecordTemplate(CTD, BodyDeclNode);
     } else {
       BodyDeclNode = BuildNodeIdForDecl(Decl);
@@ -3308,8 +3228,7 @@ bool IndexerASTVisitor::VisitRecordDecl(const clang::RecordDecl* Decl) {
             Observer.getSourceManager()->getFileID(NextDecl->getLocation());
         // We should not point a completes edge from an abs node to a record
         // node.
-        GraphObserver::NodeId TargetDecl = BuildNodeIdForDecl(
-            OuterTemplate && options_.AbsNodes ? OuterTemplate : NextDecl);
+        GraphObserver::NodeId TargetDecl = BuildNodeIdForDecl(NextDecl);
         Observer.recordCompletionRange(
             NameRangeInContext.value(), TargetDecl,
             NextDeclFile == DeclFile
@@ -3336,7 +3255,7 @@ bool IndexerASTVisitor::VisitRecordDecl(const clang::RecordDecl* Decl) {
 }
 
 bool IndexerASTVisitor::VisitFunctionDecl(clang::FunctionDecl* Decl) {
-  if (SkipAliasedDecl(Decl, options_.AbsNodes)) {
+  if (SkipAliasedDecl(Decl)) {
     return true;
   }
   // Add the decl to the cache. This helps if a declaration is annotated, its
@@ -3358,8 +3277,7 @@ bool IndexerASTVisitor::VisitFunctionDecl(clang::FunctionDecl* Decl) {
   SourceLocation TemplateKeywordLoc;
   if (auto* FTD = Decl->getDescribedFunctionTemplate()) {
     // Function template (inc. overloads)
-    InnerNode = options_.AbsNodes ? BuildNodeIdForDecl(Decl, 0)
-                                  : BuildNodeIdForDecl(Decl);
+    InnerNode = BuildNodeIdForDecl(Decl);
     OuterNode = RecordTemplate(FTD, InnerNode);
     TemplateKeywordLoc = FTD->getSourceRange().getBegin();
   } else if (auto* MSI = Decl->getMemberSpecializationInfo()) {
@@ -3635,8 +3553,7 @@ bool IndexerASTVisitor::VisitFunctionDecl(clang::FunctionDecl* Decl) {
             NextDecl->getDescribedFunctionTemplate();
         FileID NextDeclFile =
             Observer.getSourceManager()->getFileID(NextDecl->getLocation());
-        GraphObserver::NodeId TargetDecl = BuildNodeIdForDecl(
-            OuterTemplate && options_.AbsNodes ? OuterTemplate : NextDecl);
+        GraphObserver::NodeId TargetDecl = BuildNodeIdForDecl(NextDecl);
 
         Observer.recordCompletionRange(
             NameRangeInContext.value(), TargetDecl,
@@ -3674,12 +3591,7 @@ bool IndexerASTVisitor::VisitObjCTypeParamDecl(
     const clang::ObjCTypeParamDecl* Decl) {
   auto Marks = MarkedSources.Generate(Decl);
   GraphObserver::NodeId TypeParamId = BuildNodeIdForDecl(Decl);
-  if (options_.AbsNodes)
-    Observer.recordAbsVarNode(TypeParamId,
-                              Marks.GenerateMarkedSource(TypeParamId));
-  else
-    Observer.recordTVarNode(TypeParamId,
-                            Marks.GenerateMarkedSource(TypeParamId));
+  Observer.recordTVarNode(TypeParamId, Marks.GenerateMarkedSource(TypeParamId));
   SourceRange TypeSR = RangeForNameOfDeclaration(Decl);
   MaybeRecordDefinitionRange(
       RangeInCurrentContext(Decl->isImplicit(), TypeParamId, TypeSR),
@@ -3992,7 +3904,7 @@ GraphObserver::NodeId IndexerASTVisitor::BuildNodeIdForDecl(
   // the IDs given to class definitions (in part because of the language rules).
 
   if (absl::GetFlag(FLAGS_experimental_alias_template_instantiations)) {
-    Decl = FindSpecializedTemplate(Decl, !options_.AbsNodes);
+    Decl = FindSpecializedTemplate(Decl);
   }
 
   if (const auto* IFD = dyn_cast<clang::IndirectFieldDecl>(Decl)) {
@@ -4259,12 +4171,7 @@ IndexerASTVisitor::BuildNodeIdForTemplateName(const clang::TemplateName& Name) {
         } else if (const auto* FD =
                        dyn_cast<clang::FunctionDecl>(UnderlyingDecl)) {
           const clang::NamedDecl* decl = FD;
-          if (options_.AbsNodes) {
-            // Direct references to function templates to the outer function
-            // template shell.
-            decl = Name.getAsTemplateDecl();
-          } else if (absl::GetFlag(
-                         FLAGS_experimental_alias_template_instantiations)) {
+          if (absl::GetFlag(FLAGS_experimental_alias_template_instantiations)) {
             // Point to the original member function template.
             // This solves problems with aliasing when dealing with nested
             // templates.
@@ -4282,7 +4189,6 @@ IndexerASTVisitor::BuildNodeIdForTemplateName(const clang::TemplateName& Name) {
           // template decl (may be a partial specialization or the
           // primary template).
           const clang::NamedDecl* decl = VD;
-          if (options_.AbsNodes) decl = Name.getAsTemplateDecl();
           return BuildNodeIdForDecl(decl);
         } else {
           LOG(FATAL) << "Unexpected UnderlyingDecl";
@@ -4626,12 +4532,10 @@ NodeSet IndexerASTVisitor::BuildNodeSetForRecord(const clang::RecordType& T) {
     }
     const auto* SpecDecl = Spec->getSpecializedTemplate();
     const clang::NamedDecl* SpecFocus = SpecDecl;
-    if (!options_.AbsNodes) {
-      if (SpecDecl->getTemplatedDecl()->getDefinition())
-        SpecFocus = SpecDecl->getTemplatedDecl()->getDefinition();
-      else
-        SpecFocus = SpecDecl->getTemplatedDecl();
-    }
+    if (SpecDecl->getTemplatedDecl()->getDefinition())
+      SpecFocus = SpecDecl->getTemplatedDecl()->getDefinition();
+    else
+      SpecFocus = SpecDecl->getTemplatedDecl();
     NodeId DeclId =
         Observer.recordTappNode(BuildNodeIdForDecl(SpecFocus), TemplateArgs);
     if (SpecDecl->getTemplatedDecl()->getDefinition()) {
@@ -4649,9 +4553,7 @@ NodeSet IndexerASTVisitor::BuildNodeSetForRecord(const clang::RecordType& T) {
 NodeSet IndexerASTVisitor::BuildNodeSetForInjectedClassName(
     const clang::InjectedClassNameType& T) {
   // TODO(zarko): Replace with logic that uses InjectedType.
-  return options_.AbsNodes
-             ? BuildNodeSetForNonSpecializedRecordDecl(T.getDecl())
-             : BuildNodeIdForDecl(T.getDecl());
+  return BuildNodeIdForDecl(T.getDecl());
 }
 
 NodeSet IndexerASTVisitor::BuildNodeSetForTemplateTypeParm(
@@ -5484,8 +5386,7 @@ bool IndexerASTVisitor::VisitObjCInterfaceDecl(
   // If we have type arguments, treat this as a generic type and indirect
   // through an abs node.
   if (const auto* TPL = Decl->getTypeParamList()) {
-    BodyDeclNode = options_.AbsNodes ? BuildNodeIdForDecl(Decl, 0)
-                                     : BuildNodeIdForDecl(Decl);
+    BodyDeclNode = BuildNodeIdForDecl(Decl);
     DeclNode = RecordGenericClass(Decl, TPL, BodyDeclNode);
   } else {
     BodyDeclNode = BuildNodeIdForDecl(Decl);
diff --git a/kythe/cxx/indexer/cxx/IndexerASTHooks.h b/kythe/cxx/indexer/cxx/IndexerASTHooks.h
index baad34915..402ed897d 100644
--- a/kythe/cxx/indexer/cxx/IndexerASTHooks.h
+++ b/kythe/cxx/indexer/cxx/IndexerASTHooks.h
@@ -81,12 +81,6 @@ enum EmitDataflowEdges : bool {
   Yes = true   ///< Emit dataflow edges.
 };
 
-/// \brief Specifies whether to use abs nodes.
-enum UseAbsNodes : bool {
-  Abs = true,    ///< Use abs nodes.
-  NoAbs = false  ///< Don't use abs nodes.
-};
-
 /// Adds brackets to Text to define anchor locations (escaping existing ones)
 /// and sorts Anchors such that the ith Anchor corresponds to the ith opening
 /// bracket. Drops empty or negative-length spans.
@@ -127,8 +121,6 @@ struct IndexerOptions {
   int UsrByteSize = 0;
   /// \brief Controls whether dataflow edges are emitted.
   EmitDataflowEdges DataflowEdges = EmitDataflowEdges::No;
-  /// \brief Controls whether abs nodes are emitted.
-  UseAbsNodes AbsNodes = UseAbsNodes::Abs;
   /// \brief if nonempty, the pattern to match a path against to see whether
   /// it should be excluded from template instance indexing.
   std::shared_ptr<re2::RE2> TemplateInstanceExcludePathPattern = nullptr;
diff --git a/kythe/cxx/indexer/cxx/KytheGraphObserver.cc b/kythe/cxx/indexer/cxx/KytheGraphObserver.cc
index 89b27b11d..ace120c3c 100644
--- a/kythe/cxx/indexer/cxx/KytheGraphObserver.cc
+++ b/kythe/cxx/indexer/cxx/KytheGraphObserver.cc
@@ -955,23 +955,12 @@ void KytheGraphObserver::assignUsr(const NodeId& node, llvm::StringRef usr,
   recorder_->AddEdge(usr_vname, EdgeKindID::kClangUsr, node_vname);
 }
 
-void KytheGraphObserver::recordAbsNode(const NodeId& node_id) {
-  recorder_->AddProperty(VNameRefFromNodeId(node_id), NodeKindID::kAbs);
-}
-
 void KytheGraphObserver::recordMarkedSource(
     const NodeId& node_id, const absl::optional<MarkedSource>& marked_source) {
   VNameRef node_vname = VNameRefFromNodeId(node_id);
   AddMarkedSource(node_vname, marked_source);
 }
 
-void KytheGraphObserver::recordAbsVarNode(
-    const NodeId& node_id, const absl::optional<MarkedSource>& marked_source) {
-  auto node_vname = VNameRefFromNodeId(node_id);
-  recorder_->AddProperty(node_vname, NodeKindID::kAbsVar);
-  AddMarkedSource(node_vname, marked_source);
-}
-
 void KytheGraphObserver::recordTVarNode(
     const NodeId& node_id, const absl::optional<MarkedSource>& marked_source) {
   auto node_vname = VNameRefFromNodeId(node_id);
diff --git a/kythe/cxx/indexer/cxx/KytheGraphObserver.h b/kythe/cxx/indexer/cxx/KytheGraphObserver.h
index 27e38db38..48ed82273 100644
--- a/kythe/cxx/indexer/cxx/KytheGraphObserver.h
+++ b/kythe/cxx/indexer/cxx/KytheGraphObserver.h
@@ -214,16 +214,10 @@ class KytheGraphObserver : public GraphObserver {
   void assignUsr(const NodeId& node, llvm::StringRef usr,
                  int byte_size) override;
 
-  void recordAbsVarNode(
-      const NodeId& node,
-      const absl::optional<MarkedSource>& marked_source) override;
-
   void recordTVarNode(
       const NodeId& node,
       const absl::optional<MarkedSource>& marked_source) override;
 
-  void recordAbsNode(const NodeId& node) override;
-
   void recordMarkedSource(
       const NodeId& node,
       const absl::optional<MarkedSource>& marked_source) override;
diff --git a/kythe/cxx/indexer/cxx/KytheIndexerMain.cc b/kythe/cxx/indexer/cxx/KytheIndexerMain.cc
index 4480a5dbc..95fc52f63 100644
--- a/kythe/cxx/indexer/cxx/KytheIndexerMain.cc
+++ b/kythe/cxx/indexer/cxx/KytheIndexerMain.cc
@@ -61,7 +61,6 @@ ABSL_FLAG(bool, experimental_record_dataflow_edges, false,
           "Emit experimental dataflow edges.");
 ABSL_FLAG(bool, experimental_guess_proto_semantics, false,
           "Guess proto semantics.");
-ABSL_FLAG(bool, experimental_use_abs_nodes, true, "Use abs nodes.");
 ABSL_FLAG(kythe::RE2Flag, template_instance_exclude_path_pattern,
           kythe::RE2Flag{},
           "If nonempty, a regex that matches files to be excluded from "
@@ -106,9 +105,6 @@ int main(int argc, char* argv[]) {
       absl::GetFlag(FLAGS_experimental_record_dataflow_edges)
           ? kythe::EmitDataflowEdges::Yes
           : kythe::EmitDataflowEdges::No;
-  options.AbsNodes = absl::GetFlag(FLAGS_experimental_use_abs_nodes)
-                         ? kythe::UseAbsNodes::Abs
-                         : kythe::UseAbsNodes::NoAbs;
   options.UseCompilationCorpusAsDefault =
       absl::GetFlag(FLAGS_use_compilation_corpus_as_default);
   options.DropInstantiationIndependentData =
diff --git a/kythe/cxx/indexer/cxx/clang_utils.cc b/kythe/cxx/indexer/cxx/clang_utils.cc
index 9806a6a09..ba6415600 100644
--- a/kythe/cxx/indexer/cxx/clang_utils.cc
+++ b/kythe/cxx/indexer/cxx/clang_utils.cc
@@ -103,17 +103,15 @@ class DereferenceMemberTemplatesDeclVisitor
 
 }  // anonymous namespace
 
-const clang::Decl* DereferenceMemberTemplates(const clang::Decl* decl,
-                                              bool use_mts) {
-  return use_mts ? DereferenceMemberTemplatesDeclVisitor().Visit(decl) : decl;
+const clang::Decl* DereferenceMemberTemplates(const clang::Decl* decl) {
+  return DereferenceMemberTemplatesDeclVisitor().Visit(decl);
 }
 
-const clang::Decl* FindSpecializedTemplate(const clang::Decl* decl,
-                                           bool use_mts) {
+const clang::Decl* FindSpecializedTemplate(const clang::Decl* decl) {
   if (const auto* FD = llvm::dyn_cast<const clang::FunctionDecl>(decl)) {
     if (auto* ftsi = FD->getTemplateSpecializationInfo()) {
       if (!ftsi->isExplicitInstantiationOrSpecialization()) {
-        return DereferenceMemberTemplates(ftsi->getTemplate(), use_mts);
+        return DereferenceMemberTemplates(ftsi->getTemplate());
       }
     }
   } else if (const auto* ctsd =
@@ -124,10 +122,10 @@ const clang::Decl* FindSpecializedTemplate(const clang::Decl* decl,
       if (const auto* partial =
               primary_or_partial
                   .dyn_cast<clang::ClassTemplatePartialSpecializationDecl*>()) {
-        return DereferenceMemberTemplates(partial, use_mts);
+        return DereferenceMemberTemplates(partial);
       } else if (const auto* primary =
                      primary_or_partial.dyn_cast<clang::ClassTemplateDecl*>()) {
-        return DereferenceMemberTemplates(primary, use_mts);
+        return DereferenceMemberTemplates(primary);
       }
     }
   } else if (const auto* vtsd =
@@ -138,14 +136,14 @@ const clang::Decl* FindSpecializedTemplate(const clang::Decl* decl,
       if (const auto* partial =
               primary_or_partial
                   .dyn_cast<clang::VarTemplatePartialSpecializationDecl*>()) {
-        return DereferenceMemberTemplates(partial, use_mts);
+        return DereferenceMemberTemplates(partial);
       } else if (const auto* primary =
                      primary_or_partial.dyn_cast<clang::VarTemplateDecl*>()) {
-        return DereferenceMemberTemplates(primary, use_mts);
+        return DereferenceMemberTemplates(primary);
       }
     }
   }
-  return DereferenceMemberTemplates(decl, use_mts);
+  return DereferenceMemberTemplates(decl);
 }
 
 bool ShouldHaveBlameContext(const clang::Decl* decl) {
diff --git a/kythe/cxx/indexer/cxx/clang_utils.h b/kythe/cxx/indexer/cxx/clang_utils.h
index a79cbd65e..d75387a43 100644
--- a/kythe/cxx/indexer/cxx/clang_utils.h
+++ b/kythe/cxx/indexer/cxx/clang_utils.h
@@ -30,10 +30,7 @@ bool isObjCSelector(const clang::DeclarationName& DN);
 /// \brief If `decl` is an implicit template instantiation or specialization,
 /// returns the primary template or the partial specialization being
 /// instantiated. Otherwise, returns `decl`.
-/// \param use_mts If true, also dereference member templates.
-/// (This parameter is temporary and is used for the abs deprecation.)
-const clang::Decl* FindSpecializedTemplate(const clang::Decl* decl,
-                                           bool use_mts);
+const clang::Decl* FindSpecializedTemplate(const clang::Decl* decl);
 
 /// \brief Finds the root member template starting at `decl` (which can be
 /// any decl; if it's not a member template, returns `decl`).
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_alias_tvar.cc b/kythe/cxx/indexer/cxx/testdata/tvar_template/template_alias_tvar.cc
similarity index 100%
rename from kythe/cxx/indexer/cxx/testdata/template/template_alias_tvar.cc
rename to kythe/cxx/indexer/cxx/testdata/tvar_template/template_alias_tvar.cc
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_alias_tvar_alias.cc b/kythe/cxx/indexer/cxx/testdata/tvar_template/template_alias_tvar_alias.cc
similarity index 100%
rename from kythe/cxx/indexer/cxx/testdata/template/template_alias_tvar_alias.cc
rename to kythe/cxx/indexer/cxx/testdata/tvar_template/template_alias_tvar_alias.cc
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_alias_tvar_class.cc b/kythe/cxx/indexer/cxx/testdata/tvar_template/template_alias_tvar_class.cc
similarity index 100%
rename from kythe/cxx/indexer/cxx/testdata/template/template_alias_tvar_class.cc
rename to kythe/cxx/indexer/cxx/testdata/tvar_template/template_alias_tvar_class.cc
diff --git a/kythe/docs/schema/schema.txt b/kythe/docs/schema/schema.txt
index f2b92b41b..08afc1f58 100644
--- a/kythe/docs/schema/schema.txt
+++ b/kythe/docs/schema/schema.txt
@@ -293,13 +293,11 @@ Ordinals are used::
 //- CTemplateBody childof CTemplate
 template <typename T> struct C {
 //- @x=AnchorX defines/binding XBinding
-//- XBinding childof CTemplateBody
 //- @x=AnchorCX defines/binding CXBinding
   int x;
 };
 //- @C defines/binding CInst
 //- AnchorCX childof/context CInst
-//- CXBinding childof CInst
 //- !{ AnchorX childof/context CInst }
 template struct C<int>;
 --------------------------------------------------------------------------------
@@ -400,15 +398,13 @@ class C;
 class C { };
 --------------------------------------------------------------------------------
 
-[kythe,C++,"Completeness links abs nodes for function templates."]
+[kythe,C++,"Completeness links nodes for function templates."]
 --------------------------------------------------------------------------------
 //- @id defines/binding Decl
 template <typename T> T id(T x);
 //- @id defines/binding Defn
 //- @id completes/uniquely Decl
 template <typename T> T id(T x) { return x; }
-//- Defn.node/kind abs
-//- Decl.node/kind abs
 --------------------------------------------------------------------------------
 
 [[defines]]
@@ -1576,7 +1572,6 @@ template <> class C<int> { };
 //- SpecializedClassC specializes TAppCInt
 //- TAppCInt.node/kind tapp
 //- TAppCInt param.0 TemplateClassC
-//- TemplateClassC.node/kind abs
 --------------------------------------------------------------------------------
 
 [kythe,C++,"Function templates specialize."]
@@ -1820,23 +1815,6 @@ the one documented for <<tparam>>.
 It is not necessarily the case that the child of the abs node be a type;
 for example, in $$C++$$, it may be a variable or a function.
 
-[kythe,C++,"Templates are abs nodes."]
---------------------------------------------------------------------------------
-//- @C defines/binding TemplateC
-//- TemplateC.node/kind abs
-//- TemplateCBody childof TemplateC
-//- TemplateCBody.node/kind record
-template <typename T, typename S> class C { };
-
-//- @C defines/binding PartialSpecializationC
-//- PartialSpecializationC.node/kind abs
-template <typename U> class C<int, U> { };
-
-//- @C defines/binding TotalSpecializationC
-//- TotalSpecializationC.node/kind record
-template <> class C<int, float> { };
---------------------------------------------------------------------------------
-
 [kythe,Java,"Generic classes are abs nodes."]
 --------------------------------------------------------------------------------
 public class E {
@@ -1862,18 +1840,6 @@ See also::
 WARNING: *absvar* nodes are deprecated.  They should be replaced with <<tvar>>
 nodes.
 
-[kythe,C++,"Type variables are absvars."]
---------------------------------------------------------------------------------
-//- @C defines/binding TemplateC
-//- @T defines/binding AbsVarT
-//- AbsVarT.node/kind absvar
-//- TemplateC param.0 AbsVarT
-template <typename T> class C {
-//- @T ref AbsVarT
-  using S = T;
-};
---------------------------------------------------------------------------------
-
 [[anchor]]
 anchor
 ~~~~~~
@@ -2582,6 +2548,18 @@ type Container[T any] struct {
 }
 --------------------------------------------------------------------------------
 
+[kythe,C++,"Type variables are tvars."]
+--------------------------------------------------------------------------------
+//- @C defines/binding TemplateC
+//- @T defines/binding TVarT
+//- TVarT.node/kind tvar
+//- TemplateC tparam.0 TVarT
+template <typename T> class C {
+//- @T ref TVarT
+  using S = T;
+};
+--------------------------------------------------------------------------------
+
 [[variable]]
 variable
 ~~~~~~~~
@@ -2702,21 +2680,17 @@ The variance fact can be omitted, in which case covariance is assumed.
 
 //- @Type defines/binding TypeVar1
 //- @G1 defines/binding G1Abs
-//- TypeVar1.node/kind absvar
+//- TypeVar1.node/kind tvar
 //- TypeVar1.variance covariant
-//- G1Decl childof G1Abs
-//- G1Abs.node/kind abs
-//- G1Abs param.0 TypeVar1
+//- G1Abs tparam.0 TypeVar1
 @interface G1<__covariant Type> : Root
 @end
 
 //- @Type defines/binding TypeVar2
 //- @G2 defines/binding G2Abs
-//- TypeVar2.node/kind absvar
+//- TypeVar2.node/kind tvar
 //- TypeVar2.variance contravariant
-//- G2Decl childof G2Abs
-//- G2Abs.node/kind abs
-//- G2Abs param.0 TypeVar2
+//- G2Abs tparam.0 TypeVar2
 @interface G2<__contravariant Type> : Root
 @end
 
@@ -3006,10 +2980,8 @@ parameter is given to the inner <<abs>>.
 //- @B defines/binding NestedAbs
 //- @C defines/binding TemplateC
 template <template <typename A> class B> class C;
-//- TemplateC param.0 NestedAbs
-//- NestedAbs.node/kind abs
-//- NestedAbsvar childof NestedAbs
-//- NestedAbs param.0 AbsvarA
+//- TemplateC tparam.0 NestedAbs
+//- NestedAbs tparam.0 AbsvarA
 --------------------------------------------------------------------------------
 
 Special values for dependent lookups


Test patch:
diff --git a/kythe/cxx/indexer/cxx/testdata/BUILD b/kythe/cxx/indexer/cxx/testdata/BUILD
index 16e85948f..2a6cdc75a 100644
--- a/kythe/cxx/indexer/cxx/testdata/BUILD
+++ b/kythe/cxx/indexer/cxx/testdata/BUILD
@@ -281,7 +281,6 @@ cc_indexer_test(
     name = "tvar_auto_zoo",
     srcs = ["basic/tvar_auto_zoo.cc"],
     check_for_singletons = True,
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     std = "c++14",
     tags = [
@@ -1509,54 +1508,38 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_docs_template_alias",
     srcs = ["docs/tvar_docs_template_alias.cc"],
-    experimental_use_abs_nodes = False,
+    ignore_dups = True,
     tags = ["docs"],
 )
 
 cc_indexer_test(
     name = "tvar_docs_template_function",
     srcs = ["docs/tvar_docs_template_function.cc"],
-    experimental_use_abs_nodes = False,
     tags = ["docs"],
 )
 
 cc_indexer_test(
     name = "tvar_docs_template_record",
     srcs = ["docs/tvar_docs_template_record.cc"],
-    experimental_use_abs_nodes = False,
     tags = ["docs"],
 )
 
 cc_indexer_test(
     name = "tvar_docs_template_var",
     srcs = ["docs/tvar_docs_template_var.cc"],
-    experimental_use_abs_nodes = False,
     tags = ["docs"],
 )
 
 cc_indexer_test(
     name = "tvar_docs_template_partial_spec_record",
     srcs = ["docs/tvar_docs_template_partial_spec_record.cc"],
-    experimental_use_abs_nodes = False,
+    ignore_dups = True,
     tags = ["docs"],
 )
 
 cc_indexer_test(
     name = "tvar_docs_template_partial_spec_var",
     srcs = ["docs/tvar_docs_template_partial_spec_var.cc"],
-    experimental_use_abs_nodes = False,
-    tags = ["docs"],
-)
-
-cc_indexer_test(
-    name = "docs_template_alias",
-    srcs = ["docs/docs_template_alias.cc"],
-    tags = ["docs"],
-)
-
-cc_indexer_test(
-    name = "docs_template_function",
-    srcs = ["docs/docs_template_function.cc"],
     tags = ["docs"],
 )
 
@@ -1566,30 +1549,6 @@ cc_indexer_test(
     tags = ["docs"],
 )
 
-cc_indexer_test(
-    name = "docs_template_record",
-    srcs = ["docs/docs_template_record.cc"],
-    tags = ["docs"],
-)
-
-cc_indexer_test(
-    name = "docs_template_var",
-    srcs = ["docs/docs_template_var.cc"],
-    tags = ["docs"],
-)
-
-cc_indexer_test(
-    name = "docs_template_partial_spec_record",
-    srcs = ["docs/docs_template_partial_spec_record.cc"],
-    tags = ["docs"],
-)
-
-cc_indexer_test(
-    name = "docs_template_partial_spec_var",
-    srcs = ["docs/docs_template_partial_spec_var.cc"],
-    tags = ["docs"],
-)
-
 cc_indexer_test(
     name = "docs_template_total_spec_record",
     srcs = ["docs/docs_template_total_spec_record.cc"],
@@ -1781,7 +1740,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_rec_class_base_dependent",
     srcs = ["rec/tvar_rec_class_base_dependent.cc"],
-    experimental_use_abs_nodes = False,
     tags = ["rec"],
 )
 
@@ -1967,744 +1925,44 @@ test_suite(
     tags = ["rec"],
 )
 
-cc_indexer_test(
-    name = "template_alias",
-    srcs = ["template/template_alias.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_decl_arg",
-    srcs = ["template/template_decl_arg.cc"],
-    ignore_dups = True,
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_alias_naming",
-    srcs = ["template/template_alias_naming.cc"],
-    check_for_singletons = True,
-    experimental_alias_template_instantiations = True,
-    ignore_dups = True,
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_type_alias_param",
-    srcs = ["template/template_type_alias_param.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_alias_implicit_instantiation",
-    srcs = ["template/template_alias_implicit_instantiation.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_alias_implicit_instantiation_decls",
-    srcs = ["template/template_alias_implicit_instantiation_decls.cc"],
+test_suite(
+    name = "indexer_template",
     tags = ["template"],
 )
 
-cc_indexer_test(
-    name = "template_alias_multilevel_abs",
-    srcs = ["template/template_alias_multilevel_abs.cc"],
-    check_for_singletons = True,
-    experimental_alias_template_instantiations = True,
-    ignore_dups = True,
-    ignore_unimplemented = True,  # hash of SubstTemplateTemplateParm
-    tags = ["template"],
-)
+# implies the effects of experimental_alias_template_instantiations = True,
+# leading to more duplicate ("aliased") output.
 
 cc_indexer_test(
-    name = "template_alias_tvar",
-    srcs = ["template/template_alias_tvar.cc"],
+    name = "tvar_template_alias_tvar",
+    srcs = ["tvar_template/template_alias_tvar.cc"],
     check_for_singletons = True,
     experimental_alias_template_instantiations = True,
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["template"],
 )
 
 cc_indexer_test(
-    name = "template_alias_tvar_class",
-    srcs = ["template/template_alias_tvar_class.cc"],
+    name = "tvar_template_alias_tvar_class",
+    srcs = ["tvar_template/template_alias_tvar_class.cc"],
     check_for_singletons = True,
     experimental_alias_template_instantiations = True,
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["template"],
 )
 
 cc_indexer_test(
-    name = "template_alias_tvar_alias",
-    srcs = ["template/template_alias_tvar_alias.cc"],
+    name = "tvar_template_alias_tvar_alias",
+    srcs = ["tvar_template/template_alias_tvar_alias.cc"],
     check_for_singletons = True,
     experimental_alias_template_instantiations = True,
-    experimental_use_abs_nodes = False,
-    ignore_dups = True,
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_arg_multiple_typename",
-    srcs = ["template/template_arg_multiple_typename.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_arg_typename",
-    srcs = ["template/template_arg_typename.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_blame_member",
-    srcs = ["template/template_blame_member.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_blame_spec",
-    srcs = ["template/template_blame_spec.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_blame_pspec_member",
-    srcs = ["template/template_blame_pspec_member.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_blame_spec_member",
-    srcs = ["template/template_blame_spec_member.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_class_template_ctor",
-    srcs = ["template/template_class_template_ctor.cc"],
-    ignore_dups = True,
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_class_ctor_default_and_init",
-    srcs = ["template/template_class_ctor_default_and_init.cc"],
-    ignore_dups = True,
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_class_defn",
-    srcs = ["template/template_class_defn.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_class_fn_spec",
-    srcs = ["template/template_class_fn_spec.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_class_inner",
-    srcs = ["template/template_class_inner.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_class_inst_explicit",
-    srcs = ["template/template_class_inst_explicit.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_class_inst_implicit",
-    srcs = ["template/template_class_inst_implicit.cc"],
-    # Type alias alias inside a class template gets the same documentation text.
-    # TODO(zarko): Should the two aliases be distinctly named?
-    ignore_dups = True,
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_class_inst_implicit_dependent",
-    srcs = ["template/template_class_inst_implicit_dependent.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_class_inst_vs_spec",
-    srcs = ["template/template_class_inst_vs_spec.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_class_ref",
-    srcs = ["template/template_class_ref.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_class_ref_ps",
-    srcs = ["template/template_class_ref_ps.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_class_skip_implicit_on",
-    srcs = ["template/template_class_skip_implicit_on.cc"],
-    index_template_instantiations = False,
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_depbase_field_ref",
-    srcs = ["template/template_depbase_field_ref.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_dependent_ctor",
-    srcs = ["template/template_dependent_ctor.cc"],
-    ignore_dups = True,
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_dependent_ctor_small",
-    srcs = ["template/template_dependent_ctor_small.cc"],
-    ignore_dups = True,
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_dependent_dtor",
-    srcs = ["template/template_dependent_dtor.cc"],
-    ignore_dups = True,
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_dependent_dtor_qualified",
-    srcs = ["template/template_dependent_dtor_qualified.cc"],
-    ignore_dups = True,
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template/template_dependent_name_ref",
-    srcs = ["template/template_dependent_name_ref.cc"],
-    ignore_dups = True,
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_dependent_sized_array",
-    srcs = ["template/template_dependent_sized_array.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_depexpr_field_ref",
-    srcs = ["template/template_depexpr_field_ref.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_depname_field_ref",
-    srcs = ["template/template_depname_field_ref.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_depname_template_field_ref",
-    srcs = ["template/template_depname_template_field_ref.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_depname_class",
-    srcs = ["template/template_depname_class.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_depname_implicit",
-    srcs = ["template/template_depname_implicit.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_depname_inst_class",
-    srcs = ["template/template_depname_inst_class.cc"],
-    ignore_unimplemented = True,
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_depname_path_graph",
-    srcs = ["template/template_depname_path_graph.cc"],
-    ignore_dups = True,
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_drop_redundant_wraiths_off",
-    srcs = ["template/template_drop_redundant_wraiths.cc"],
-    experimental_drop_instantiation_independent_data = False,
-    ignore_dups = True,
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_drop_redundant_wraiths_on",
-    srcs = ["template/template_drop_redundant_wraiths.cc"],
-    experimental_drop_instantiation_independent_data = True,
-    ignore_dups = True,
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_drop_redundant_wraiths_off_expect_fail",
-    srcs = ["template/template_drop_redundant_wraiths_expect_fail.cc"],
-    experimental_drop_instantiation_independent_data = False,
-    ignore_dups = True,
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_drop_redundant_wraiths_on_expect_fail",
-    srcs = ["template/template_drop_redundant_wraiths_expect_fail.cc"],
-    expect_fail_verify = True,
-    experimental_drop_instantiation_independent_data = True,
-    ignore_dups = True,
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_exclude",
-    srcs = ["template/template_exclude.cc"],
-    check_for_singletons = True,
     ignore_dups = True,
     tags = ["template"],
-    template_instance_exclude_path_pattern = ".*/exclude.*",
-    deps = [
-        "template/exclude_this_file.h",
-        "template/include_this_file.h",
-    ],
-)
-
-cc_indexer_test(
-    name = "template_field",
-    srcs = ["template/template_field.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_file_call",
-    srcs = ["template/template_file_call.cc"],
-    check_for_singletons = True,
-    convert_marked_source = True,
-    std = "c++17",
-    tags = [
-        "c++17",
-        "template",
-    ],
-)
-
-cc_indexer_test(
-    name = "template_fn_call",
-    srcs = ["template/template_fn_call.cc"],
-    tags = ["template"],
 )
 
-cc_indexer_test(
-    name = "template_fn_decl",
-    srcs = ["template/template_fn_decl.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_fn_decl_defn",
-    srcs = ["template/template_fn_decl_defn.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_fn_defines",
-    srcs = ["template/template_fn_defines.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_fn_defn",
-    srcs = ["template/template_fn_defn.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_fn_dependent_spec_defn",
-    srcs = ["template/template_fn_dependent_spec_defn.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_fn_explicit_spec_completes",
-    srcs = ["template/template_fn_explicit_spec_completes.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_fn_explicit_spec_with_default_completes",
-    srcs = ["template/template_fn_explicit_spec_with_default_completes.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_fn_implicit_spec",
-    srcs = ["template/template_fn_implicit_spec.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_fn_inst_vs_spec",
-    srcs = ["template/template_fn_inst_vs_spec.cc"],
-    ignore_dups = True,
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_fn_member_spec_defn",
-    srcs = ["template/template_fn_member_spec_defn.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_fn_multi_decl_def",
-    srcs = ["template/template_fn_multi_decl_def.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_fn_multiple_implicit_spec",
-    srcs = ["template/template_fn_multiple_implicit_spec.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_fn_overload",
-    srcs = ["template/template_fn_overload.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_fn_spec",
-    srcs = ["template/template_fn_spec.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_fn_spec_decl",
-    srcs = ["template/template_fn_spec_decl.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_fn_spec_defn_decl",
-    srcs = ["template/template_fn_spec_defn_decl.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_fn_spec_defn_defn_decl_decl",
-    srcs = ["template/template_fn_spec_defn_defn_decl_decl.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_fn_spec_overload",
-    srcs = ["template/template_fn_spec_overload.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_incomplete_array",
-    srcs = ["template/template_incomplete_array.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_instance_type_from_class",
-    srcs = ["template/template_instance_type_from_class.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_nested_name",
-    srcs = ["template/template_nested_name.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_multilevel_argument",
-    srcs = ["template/template_multilevel_argument.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_pack_fn_decl",
-    srcs = ["template/template_pack_fn_decl.cc"],
-    ignore_dups = True,
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_pack_fn_mono_call",
-    srcs = ["template/template_pack_fn_mono_call.cc"],
-    ignore_dups = True,
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_pack_fn_pack_call",
-    srcs = ["template/template_pack_fn_pack_call.cc"],
-    ignore_dups = True,
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_pack_rec_pack_call",
-    srcs = ["template/template_pack_rec_pack_call.cc"],
-    ignore_dups = True,
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_ps_completes",
-    srcs = ["template/template_ps_completes.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_ps_decl",
-    srcs = ["template/template_ps_decl.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_ps_defn",
-    srcs = ["template/template_ps_defn.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_ps_multiple_decl",
-    srcs = ["template/template_ps_multiple_decl.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_ps_twovar_decl",
-    srcs = ["template/template_ps_twovar_decl.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_rec_member_abs",
-    srcs = ["template/template_rec_member_abs.cc"],
-    experimental_alias_template_instantiations = True,
-    ignore_dups = True,
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_rec_override",
-    srcs = ["template/template_rec_override.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_rec_override_root",
-    srcs = ["template/template_rec_override_root.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_rec_override_root_aliasing",
-    srcs = ["template/template_rec_override_root_aliasing.cc"],
-    check_for_singletons = True,
-    experimental_alias_template_instantiations = True,
-    ignore_dups = True,
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_redundant_constituents_anchored",
-    srcs = ["template/template_redundant_constituents_anchored.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_static_member",
-    srcs = ["template/template_static_member.cc"],
-    ignore_dups = True,
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_two_arg_spec",
-    srcs = ["template/template_two_arg_spec.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_ty_typename",
-    srcs = ["template/template_ty_typename.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_unresolved_ctor_expr",
-    srcs = ["template/template_unresolved_ctor_expr.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_var_decl",
-    srcs = ["template/template_var_decl.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_var_defn",
-    srcs = ["template/template_var_defn.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_var_defn_completes",
-    srcs = ["template/template_var_defn_completes.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_var_explicit_spec",
-    srcs = ["template/template_var_explicit_spec.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_var_implicit_spec",
-    srcs = ["template/template_var_implicit_spec.cc"],
-    ignore_dups = True,
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_var_inst_total_spec",
-    srcs = ["template/template_var_inst_total_spec.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_var_ps",
-    srcs = ["template/template_var_ps.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_var_ps_completes",
-    srcs = ["template/template_var_ps_completes.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_var_ps_implicit_spec",
-    srcs = ["template/template_var_ps_implicit_spec.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_var_ref_ps",
-    srcs = ["template/template_var_ref_ps.cc"],
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "template_var_constexpr",
-    srcs = ["template/template_var_constexpr.cc"],
-    ignore_dups = True,
-    std = "c++14",
-    tags = ["template"],
-)
-
-cc_indexer_test(
-    name = "generic_lambda",
-    srcs = ["template/generic_lambda.cc"],
-    ignore_dups = True,
-    std = "c++14",
-    tags = ["template, c++14"],
-)
-
-cc_indexer_test(
-    name = "template_using_pack_expansion",
-    srcs = ["template/template_using_pack_expansion.cc"],
-    std = "c++17",
-    tags = [
-        "c++17",
-        "template",
-    ],
-)
-
-cc_indexer_test(
-    name = "template_auto_parameter",
-    srcs = ["template/template_auto_parameter.cc"],
-    std = "c++17",
-    tags = [
-        "c++17",
-        "template",
-    ],
-)
-
-cc_indexer_test(
-    name = "template_fold_expressions",
-    srcs = ["template/template_fold_expressions.cc"],
-    ignore_dups = True,
-    std = "c++17",
-    tags = [
-        "c++17",
-        "template",
-    ],
-)
-
-cc_indexer_test(
-    name = "template_class_ctor_deduction",
-    srcs = ["template/template_class_ctor_deduction.cc"],
-    ignore_dups = True,
-    ignore_unimplemented = True,
-    std = "c++17",
-    tags = [
-        "c++17",
-        "template",
-    ],
-)
-
-test_suite(
-    name = "indexer_template",
-    tags = ["template"],
-)
-
-# A note on all the ignore_dups = True lines: experimental_use_abs_nodes = False
-# implies the effects of experimental_alias_template_instantiations = True,
-# leading to more duplicate ("aliased") output.
 cc_indexer_test(
     name = "tvar_template_alias",
     srcs = ["tvar_template/template_alias.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -2712,7 +1970,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_decl_arg",
     srcs = ["tvar_template/template_decl_arg.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -2722,7 +1979,6 @@ cc_indexer_test(
     srcs = ["tvar_template/template_alias_naming.cc"],
     check_for_singletons = True,
     experimental_alias_template_instantiations = True,
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -2730,7 +1986,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_type_alias_param",
     srcs = ["tvar_template/template_type_alias_param.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -2738,7 +1993,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_alias_implicit_instantiation",
     srcs = ["tvar_template/template_alias_implicit_instantiation.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -2746,7 +2000,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_alias_implicit_instantiation_decls",
     srcs = ["tvar_template/template_alias_implicit_instantiation_decls.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -2756,7 +2009,6 @@ cc_indexer_test(
     srcs = ["tvar_template/template_alias_multilevel_abs.cc"],
     check_for_singletons = True,
     experimental_alias_template_instantiations = True,
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     ignore_unimplemented = True,  # hash of SubstTemplateTemplateParm
     tags = ["tvar_template"],
@@ -2765,7 +2017,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_arg_multiple_typename",
     srcs = ["tvar_template/template_arg_multiple_typename.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -2773,7 +2024,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_arg_typename",
     srcs = ["tvar_template/template_arg_typename.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -2781,7 +2031,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_blame_member",
     srcs = ["tvar_template/template_blame_member.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -2789,7 +2038,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_blame_spec",
     srcs = ["tvar_template/template_blame_spec.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -2797,7 +2045,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_blame_pspec_member",
     srcs = ["tvar_template/template_blame_pspec_member.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -2805,7 +2052,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_blame_spec_member",
     srcs = ["tvar_template/template_blame_spec_member.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -2813,7 +2059,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_class_template_ctor",
     srcs = ["tvar_template/template_class_template_ctor.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -2821,7 +2066,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_class_ctor_default_and_init",
     srcs = ["tvar_template/template_class_ctor_default_and_init.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -2829,7 +2073,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_class_defn",
     srcs = ["tvar_template/template_class_defn.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -2837,7 +2080,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_class_fn_spec",
     srcs = ["tvar_template/template_class_fn_spec.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -2845,7 +2087,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_class_inner",
     srcs = ["tvar_template/template_class_inner.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -2853,7 +2094,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_class_inst_explicit",
     srcs = ["tvar_template/template_class_inst_explicit.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -2861,7 +2101,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_class_inst_implicit",
     srcs = ["tvar_template/template_class_inst_implicit.cc"],
-    experimental_use_abs_nodes = False,
     # Type alias alias inside a class template gets the same documentation text.
     # TODO(zarko): Should the two aliases be distinctly named?
     ignore_dups = True,
@@ -2871,7 +2110,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_class_inst_implicit_dependent",
     srcs = ["tvar_template/template_class_inst_implicit_dependent.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -2879,7 +2117,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_class_inst_vs_spec",
     srcs = ["tvar_template/template_class_inst_vs_spec.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -2887,7 +2124,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_class_ref",
     srcs = ["tvar_template/template_class_ref.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -2895,7 +2131,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_class_ref_ps",
     srcs = ["tvar_template/template_class_ref_ps.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -2903,7 +2138,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_class_skip_implicit_on",
     srcs = ["tvar_template/template_class_skip_implicit_on.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     index_template_instantiations = False,
     tags = ["tvar_template"],
@@ -2912,7 +2146,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_depbase_field_ref",
     srcs = ["tvar_template/template_depbase_field_ref.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -2920,7 +2153,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_dependent_ctor",
     srcs = ["tvar_template/template_dependent_ctor.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -2928,7 +2160,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_dependent_ctor_small",
     srcs = ["tvar_template/template_dependent_ctor_small.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -2936,7 +2167,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_dependent_dtor",
     srcs = ["tvar_template/template_dependent_dtor.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -2944,7 +2174,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_dependent_dtor_qualified",
     srcs = ["tvar_template/template_dependent_dtor_qualified.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -2952,7 +2181,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template/template_dependent_name_ref",
     srcs = ["tvar_template/template_dependent_name_ref.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -2960,7 +2188,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_dependent_sized_array",
     srcs = ["tvar_template/template_dependent_sized_array.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -2968,7 +2195,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_depexpr_field_ref",
     srcs = ["tvar_template/template_depexpr_field_ref.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -2976,7 +2202,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_depname_field_ref",
     srcs = ["tvar_template/template_depname_field_ref.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -2984,7 +2209,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_depname_template_field_ref",
     srcs = ["tvar_template/template_depname_template_field_ref.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -2992,7 +2216,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_depname_class",
     srcs = ["tvar_template/template_depname_class.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3000,7 +2223,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_depname_implicit",
     srcs = ["tvar_template/template_depname_implicit.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3008,7 +2230,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_depname_inst_class",
     srcs = ["tvar_template/template_depname_inst_class.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     ignore_unimplemented = True,
     tags = ["tvar_template"],
@@ -3017,7 +2238,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_depname_path_graph",
     srcs = ["tvar_template/template_depname_path_graph.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3026,7 +2246,6 @@ cc_indexer_test(
     name = "tvar_template_drop_redundant_wraiths_off",
     srcs = ["tvar_template/template_drop_redundant_wraiths.cc"],
     experimental_drop_instantiation_independent_data = False,
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3035,7 +2254,6 @@ cc_indexer_test(
     name = "tvar_template_drop_redundant_wraiths_on",
     srcs = ["tvar_template/template_drop_redundant_wraiths.cc"],
     experimental_drop_instantiation_independent_data = True,
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3044,7 +2262,6 @@ cc_indexer_test(
     name = "tvar_template_drop_redundant_wraiths_off_expect_fail",
     srcs = ["tvar_template/template_drop_redundant_wraiths_expect_fail.cc"],
     experimental_drop_instantiation_independent_data = False,
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3054,7 +2271,6 @@ cc_indexer_test(
     srcs = ["tvar_template/template_drop_redundant_wraiths_expect_fail.cc"],
     expect_fail_verify = True,
     experimental_drop_instantiation_independent_data = True,
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3063,7 +2279,6 @@ cc_indexer_test(
     name = "tvar_template_exclude",
     srcs = ["tvar_template/template_exclude.cc"],
     check_for_singletons = True,
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
     template_instance_exclude_path_pattern = ".*/exclude.*",
@@ -3076,7 +2291,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_field",
     srcs = ["tvar_template/template_field.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3086,7 +2300,6 @@ cc_indexer_test(
     srcs = ["tvar_template/template_file_call.cc"],
     check_for_singletons = True,
     convert_marked_source = True,
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     std = "c++17",
     tags = [
@@ -3098,7 +2311,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_fn_call",
     srcs = ["tvar_template/template_fn_call.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3106,7 +2318,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_fn_decl",
     srcs = ["tvar_template/template_fn_decl.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3114,7 +2325,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_fn_decl_defn",
     srcs = ["tvar_template/template_fn_decl_defn.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3122,7 +2332,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_fn_defines",
     srcs = ["tvar_template/template_fn_defines.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3130,7 +2339,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_fn_defn",
     srcs = ["tvar_template/template_fn_defn.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3138,7 +2346,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_fn_dependent_spec_defn",
     srcs = ["tvar_template/template_fn_dependent_spec_defn.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3146,7 +2353,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_fn_explicit_spec_completes",
     srcs = ["tvar_template/template_fn_explicit_spec_completes.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3154,7 +2360,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_fn_explicit_spec_with_default_completes",
     srcs = ["tvar_template/template_fn_explicit_spec_with_default_completes.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3162,7 +2367,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_fn_implicit_spec",
     srcs = ["tvar_template/template_fn_implicit_spec.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3170,7 +2374,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_fn_inst_vs_spec",
     srcs = ["tvar_template/template_fn_inst_vs_spec.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3178,7 +2381,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_fn_member_spec_defn",
     srcs = ["tvar_template/template_fn_member_spec_defn.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3186,7 +2388,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_fn_multi_decl_def",
     srcs = ["tvar_template/template_fn_multi_decl_def.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3194,7 +2395,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_fn_multiple_implicit_spec",
     srcs = ["tvar_template/template_fn_multiple_implicit_spec.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3202,7 +2402,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_fn_overload",
     srcs = ["tvar_template/template_fn_overload.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3210,7 +2409,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_fn_spec",
     srcs = ["tvar_template/template_fn_spec.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3218,7 +2416,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_fn_spec_decl",
     srcs = ["tvar_template/template_fn_spec_decl.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3226,7 +2423,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_fn_spec_defn_decl",
     srcs = ["tvar_template/template_fn_spec_defn_decl.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3234,7 +2430,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_fn_spec_defn_defn_decl_decl",
     srcs = ["tvar_template/template_fn_spec_defn_defn_decl_decl.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3242,7 +2437,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_fn_spec_overload",
     srcs = ["tvar_template/template_fn_spec_overload.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3250,7 +2444,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_incomplete_array",
     srcs = ["tvar_template/template_incomplete_array.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3258,7 +2451,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_instance_type_from_class",
     srcs = ["tvar_template/template_instance_type_from_class.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3266,7 +2458,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_nested_name",
     srcs = ["tvar_template/template_nested_name.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3274,7 +2465,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_multilevel_argument",
     srcs = ["tvar_template/template_multilevel_argument.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3282,7 +2472,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_pack_fn_decl",
     srcs = ["tvar_template/template_pack_fn_decl.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3290,7 +2479,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_pack_fn_mono_call",
     srcs = ["tvar_template/template_pack_fn_mono_call.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3298,7 +2486,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_pack_fn_pack_call",
     srcs = ["tvar_template/template_pack_fn_pack_call.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3306,7 +2493,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_pack_rec_pack_call",
     srcs = ["tvar_template/template_pack_rec_pack_call.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3314,7 +2500,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_ps_completes",
     srcs = ["tvar_template/template_ps_completes.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3322,7 +2507,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_ps_decl",
     srcs = ["tvar_template/template_ps_decl.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3330,7 +2514,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_ps_defn",
     srcs = ["tvar_template/template_ps_defn.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3338,7 +2521,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_ps_multiple_decl",
     srcs = ["tvar_template/template_ps_multiple_decl.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3346,7 +2528,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_ps_twovar_decl",
     srcs = ["tvar_template/template_ps_twovar_decl.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3355,7 +2536,6 @@ cc_indexer_test(
     name = "tvar_template_rec_member_abs",
     srcs = ["tvar_template/template_rec_member_abs.cc"],
     experimental_alias_template_instantiations = True,
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3363,7 +2543,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_rec_override",
     srcs = ["tvar_template/template_rec_override.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3371,7 +2550,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_rec_override_root",
     srcs = ["tvar_template/template_rec_override_root.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3381,7 +2559,6 @@ cc_indexer_test(
     srcs = ["tvar_template/template_rec_override_root_aliasing.cc"],
     check_for_singletons = True,
     experimental_alias_template_instantiations = True,
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3389,7 +2566,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_redundant_constituents_anchored",
     srcs = ["tvar_template/template_redundant_constituents_anchored.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3397,7 +2573,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_static_member",
     srcs = ["tvar_template/template_static_member.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3405,7 +2580,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_two_arg_spec",
     srcs = ["tvar_template/template_two_arg_spec.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3413,7 +2587,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_ty_typename",
     srcs = ["tvar_template/template_ty_typename.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3421,7 +2594,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_unresolved_ctor_expr",
     srcs = ["tvar_template/template_unresolved_ctor_expr.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3429,7 +2601,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_var_decl",
     srcs = ["tvar_template/template_var_decl.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3437,7 +2608,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_var_defn",
     srcs = ["tvar_template/template_var_defn.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3445,7 +2615,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_var_defn_completes",
     srcs = ["tvar_template/template_var_defn_completes.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3453,7 +2622,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_var_explicit_spec",
     srcs = ["tvar_template/template_var_explicit_spec.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3461,7 +2629,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_var_implicit_spec",
     srcs = ["tvar_template/template_var_implicit_spec.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3469,7 +2636,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_var_inst_total_spec",
     srcs = ["tvar_template/template_var_inst_total_spec.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3477,7 +2643,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_var_ps",
     srcs = ["tvar_template/template_var_ps.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3485,7 +2650,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_var_ps_completes",
     srcs = ["tvar_template/template_var_ps_completes.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3493,7 +2657,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_var_ps_implicit_spec",
     srcs = ["tvar_template/template_var_ps_implicit_spec.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3501,7 +2664,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_var_ref_ps",
     srcs = ["tvar_template/template_var_ref_ps.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["tvar_template"],
 )
@@ -3509,7 +2671,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_var_constexpr",
     srcs = ["tvar_template/template_var_constexpr.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     std = "c++14",
     tags = ["tvar_template"],
@@ -3518,7 +2679,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_generic_lambda",
     srcs = ["tvar_template/generic_lambda.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     std = "c++14",
     tags = ["tvar_template, c++14"],
@@ -3527,7 +2687,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_using_pack_expansion",
     srcs = ["tvar_template/template_using_pack_expansion.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     std = "c++17",
     tags = [
@@ -3539,7 +2698,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_auto_parameter",
     srcs = ["tvar_template/template_auto_parameter.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     std = "c++17",
     tags = [
@@ -3551,7 +2709,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_fold_expressions",
     srcs = ["tvar_template/template_fold_expressions.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     std = "c++17",
     tags = [
@@ -3563,7 +2720,6 @@ cc_indexer_test(
 cc_indexer_test(
     name = "tvar_template_class_ctor_deduction",
     srcs = ["tvar_template/template_class_ctor_deduction.cc"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     ignore_unimplemented = True,
     std = "c++17",
@@ -3590,7 +2746,6 @@ cc_indexer_test(
     name = "tvar_ms_absvar",
     srcs = ["marked_source/tvar_ms_absvar.cc"],
     convert_marked_source = True,
-    experimental_use_abs_nodes = False,
     std = "c++14",
     tags = ["marked_source"],
 )
@@ -4026,7 +3181,6 @@ objc_indexer_test(
 objc_indexer_test(
     name = "tvar_generic_bound",
     srcs = ["objc/tvar_generics/generic_bound.m"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["objc"],
 )
@@ -4034,14 +3188,12 @@ objc_indexer_test(
 objc_indexer_test(
     name = "tvar_generic_contravariant_decl",
     srcs = ["objc/tvar_generics/generic_contravariant_decl.m"],
-    experimental_use_abs_nodes = False,
     tags = ["objc"],
 )
 
 objc_indexer_test(
     name = "tvar_generic_contravariant_restricted_super_class",
     srcs = ["objc/tvar_generics/generic_contravariant_restricted_super_class.m"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["objc"],
 )
@@ -4049,14 +3201,12 @@ objc_indexer_test(
 objc_indexer_test(
     name = "tvar_generic_covariant_decl",
     srcs = ["objc/tvar_generics/generic_covariant_decl.m"],
-    experimental_use_abs_nodes = False,
     tags = ["objc"],
 )
 
 objc_indexer_test(
     name = "tvar_generic_covariant_restricted_super_class",
     srcs = ["objc/tvar_generics/generic_covariant_restricted_super_class.m"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["objc"],
 )
@@ -4064,7 +3214,6 @@ objc_indexer_test(
 objc_indexer_test(
     name = "tvar_generic_inherited",
     srcs = ["objc/tvar_generics/generic_inherited.m"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["objc"],
 )
@@ -4072,7 +3221,6 @@ objc_indexer_test(
 objc_indexer_test(
     name = "tvar_generic_invariant",
     srcs = ["objc/tvar_generics/generic_invariant.m"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["objc"],
 )
@@ -4080,7 +3228,6 @@ objc_indexer_test(
 objc_indexer_test(
     name = "tvar_generic_instantiation",
     srcs = ["objc/tvar_generics/generic_instantiation.m"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["objc"],
 )
@@ -4088,7 +3235,6 @@ objc_indexer_test(
 objc_indexer_test(
     name = "tvar_generic_method_call",
     srcs = ["objc/tvar_generics/generic_method_call.m"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["objc"],
 )
@@ -4096,7 +3242,6 @@ objc_indexer_test(
 objc_indexer_test(
     name = "tvar_generic_method_type",
     srcs = ["objc/tvar_generics/generic_method_type.m"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["objc"],
 )
@@ -4104,7 +3249,6 @@ objc_indexer_test(
 objc_indexer_test(
     name = "tvar_generic_nested",
     srcs = ["objc/tvar_generics/generic_nested.m"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["objc"],
 )
@@ -4112,7 +3256,6 @@ objc_indexer_test(
 objc_indexer_test(
     name = "tvar_generic_restricted_protocol",
     srcs = ["objc/tvar_generics/generic_restricted_protocol.m"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["objc"],
 )
@@ -4120,7 +3263,6 @@ objc_indexer_test(
 objc_indexer_test(
     name = "tvar_generic_two_args",
     srcs = ["objc/tvar_generics/generic_two_args.m"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["objc"],
 )
@@ -4128,7 +3270,6 @@ objc_indexer_test(
 objc_indexer_test(
     name = "tvar_generic_unbound",
     srcs = ["objc/tvar_generics/generic_unbound.m"],
-    experimental_use_abs_nodes = False,
     ignore_dups = True,
     tags = ["objc"],
 )
diff --git a/kythe/cxx/indexer/cxx/testdata/basic/auto_zoo.cc b/kythe/cxx/indexer/cxx/testdata/basic/auto_zoo.cc
index d9d6f5fbe..9a11b8cc9 100644
--- a/kythe/cxx/indexer/cxx/testdata/basic/auto_zoo.cc
+++ b/kythe/cxx/indexer/cxx/testdata/basic/auto_zoo.cc
@@ -5,7 +5,7 @@
 auto glambda =
 //- @int ref IntType
 //- @auto ref ImplicitTyvar
-//- ImplicitTyvar.node/kind absvar
+//- ImplicitTyvar.node/kind tvar
     [](int i, auto a) { return i; };
 
 //- @auto ref IntType
diff --git a/kythe/cxx/indexer/cxx/testdata/docs/docs_template_alias.cc b/kythe/cxx/indexer/cxx/testdata/docs/docs_template_alias.cc
deleted file mode 100644
index 47446499a..000000000
--- a/kythe/cxx/indexer/cxx/testdata/docs/docs_template_alias.cc
+++ /dev/null
@@ -1,11 +0,0 @@
-// We index documentation for type alias templates.
-
-//- @+3"/// Alias." documents Alias
-//- @+2"/// Alias." documents Abs
-
-/// Alias.
-template<typename U>
-using T = int;
-
-//- Alias.node/kind talias
-//- Abs.node/kind abs
diff --git a/kythe/cxx/indexer/cxx/testdata/docs/docs_template_function.cc b/kythe/cxx/indexer/cxx/testdata/docs/docs_template_function.cc
deleted file mode 100644
index be3a7f1ec..000000000
--- a/kythe/cxx/indexer/cxx/testdata/docs/docs_template_function.cc
+++ /dev/null
@@ -1,10 +0,0 @@
-// We attach documentation to function templates.
-
-//- @+3"/// Empty." documents Fun
-//- @+2"/// Empty." documents Abs
-
-/// Empty.
-template <typename T> void f(T t) { }
-
-//- Fun.node/kind function
-//- Abs.node/kind abs
diff --git a/kythe/cxx/indexer/cxx/testdata/docs/docs_template_partial_spec_record.cc b/kythe/cxx/indexer/cxx/testdata/docs/docs_template_partial_spec_record.cc
deleted file mode 100644
index 341cc2e8c..000000000
--- a/kythe/cxx/indexer/cxx/testdata/docs/docs_template_partial_spec_record.cc
+++ /dev/null
@@ -1,12 +0,0 @@
-// We associate template partial specialization documentation correctly.
-
-template <typename T> struct S { };
-
-//- @+3"/// Special." documents Abs
-//- @+2"/// Special." documents Record
-
-/// Special.
-template <typename T> struct S<T*> { };
-
-//- Abs.node/kind abs
-//- Record.node/kind record
diff --git a/kythe/cxx/indexer/cxx/testdata/docs/docs_template_partial_spec_var.cc b/kythe/cxx/indexer/cxx/testdata/docs/docs_template_partial_spec_var.cc
deleted file mode 100644
index df3801964..000000000
--- a/kythe/cxx/indexer/cxx/testdata/docs/docs_template_partial_spec_var.cc
+++ /dev/null
@@ -1,15 +0,0 @@
-// We associate template partial specialization documentation correctly.
-
-/// Empty.
-template <typename T> int S = 1;
-
-//- @+3"/// Special." documents Abs
-//- @+2"/// Special." documents Var
-
-/// Special.
-template <typename T> int S<T*> = 2;
-
-//- Abs.node/kind abs
-//- // Var.node/kind variable -- should hold; hasn't been a problem in
-//- // production thanks to clustering. Since abs nodes are being deprecated
-//- // this is doubly not an issue.
diff --git a/kythe/cxx/indexer/cxx/testdata/docs/docs_template_record.cc b/kythe/cxx/indexer/cxx/testdata/docs/docs_template_record.cc
deleted file mode 100644
index 1085b3cd5..000000000
--- a/kythe/cxx/indexer/cxx/testdata/docs/docs_template_record.cc
+++ /dev/null
@@ -1,9 +0,0 @@
-// Checks that we associate template documentation correctly.
-//- @+3"/// Empty." documents Abs
-//- @+2"/// Empty." documents Record
-
-/// Empty.
-template <typename T> struct S { };
-
-//- Abs.node/kind abs
-//- Record.node/kind record
\ No newline at end of file
diff --git a/kythe/cxx/indexer/cxx/testdata/docs/docs_template_var.cc b/kythe/cxx/indexer/cxx/testdata/docs/docs_template_var.cc
deleted file mode 100644
index 57b51401b..000000000
--- a/kythe/cxx/indexer/cxx/testdata/docs/docs_template_var.cc
+++ /dev/null
@@ -1,9 +0,0 @@
-// Checks that we associate template documentation correctly.
-//- @+3"/// Empty." documents Abs
-//- @+2"/// Empty." documents Var
-
-/// Empty.
-template <typename T> int V = 1;
-
-//- Abs.node/kind abs
-//- Var.node/kind variable
diff --git a/kythe/cxx/indexer/cxx/testdata/marked_source/ms_absvar.cc b/kythe/cxx/indexer/cxx/testdata/marked_source/ms_absvar.cc
index 950629c24..fb03b8bc4 100644
--- a/kythe/cxx/indexer/cxx/testdata/marked_source/ms_absvar.cc
+++ b/kythe/cxx/indexer/cxx/testdata/marked_source/ms_absvar.cc
@@ -1,6 +1,6 @@
-// We emit MarkedSource for absvars.
-//- @T defines/binding AbsvarT
-//- AbsvarT.node/kind absvar
+// We emit MarkedSource for tvars.
+//- @T defines/binding TvarT
+//- AbsvarT.node/kind tvar
 //- AbsvarT code TRoot
 //- TRoot.kind "IDENTIFIER"
 //- TRoot.pre_text "T"
@@ -8,8 +8,8 @@ template <typename T>
 T t;
 
 namespace ns {
-//- @T defines/binding AbsvarTS
-//- AbsvarTS.node/kind absvar
+//- @T defines/binding TvarTS
+//- AbsvarTS.node/kind tvar
 //- AbsvarTS code TSRoot
 //- TSRoot.kind "IDENTIFIER"
 //- TSRoot.pre_text "T"
diff --git a/kythe/cxx/indexer/cxx/testdata/marked_source/tvar_ms_absvar.cc b/kythe/cxx/indexer/cxx/testdata/marked_source/tvar_ms_absvar.cc
index 84bbb02e3..0b108136b 100644
--- a/kythe/cxx/indexer/cxx/testdata/marked_source/tvar_ms_absvar.cc
+++ b/kythe/cxx/indexer/cxx/testdata/marked_source/tvar_ms_absvar.cc
@@ -1,4 +1,4 @@
-// We emit MarkedSource for absvars.
+// We emit MarkedSource for tvars.
 //- @T defines/binding TvarT
 //- TvarT.node/kind tvar
 //- TvarT code TRoot
diff --git a/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_bound.m b/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_bound.m
index 9712291a3..09dfe17df 100644
--- a/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_bound.m
+++ b/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_bound.m
@@ -19,10 +19,10 @@
 // No source range defines BoxDecl since this is a generic type.
 //- @Type defines/binding TypeVar
 //- @Box defines/binding BoxAbs
-//- TypeVar.node/kind absvar
+//- TypeVar.node/kind tvar
 //- BoxDecl childof BoxAbs
-//- BoxAbs.node/kind abs
-//- BoxAbs param.0 TypeVar
+//- BoxAbs.node/kind record
+//- BoxAbs tparam.0 TypeVar
 //- TypeVar bounded/upper O2Ptr
 //- O2Ptr.node/kind tapp
 //- O2Ptr param.0 vname("ptr#builtin", _, _, _, _)
diff --git a/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_contravariant_decl.m b/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_contravariant_decl.m
index b014858b3..58e589813 100644
--- a/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_contravariant_decl.m
+++ b/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_contravariant_decl.m
@@ -4,11 +4,11 @@
 // No source range defines BoxDecl since this is a generic type.
 //- @Type defines/binding TypeVar
 //- @Box defines/binding BoxAbs
-//- TypeVar.node/kind absvar
+//- TypeVar.node/kind tvar
 //- TypeVar.variance contravariant
 //- BoxDecl childof BoxAbs
-//- BoxAbs.node/kind abs
-//- BoxAbs param.0 TypeVar
+//- BoxAbs.node/kind record
+//- BoxAbs tparam.0 TypeVar
 @interface Box<__contravariant Type>
 -(int) doSomething:(Type)t;
 @end
diff --git a/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_contravariant_restricted_super_class.m b/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_contravariant_restricted_super_class.m
index a533359e3..2851d5dd4 100644
--- a/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_contravariant_restricted_super_class.m
+++ b/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_contravariant_restricted_super_class.m
@@ -35,10 +35,10 @@
 // No source range defines BoxDecl since this is a generic type.
 //- @Type defines/binding TypeVar
 //- @Box defines/binding BoxAbs
-//- TypeVar.node/kind absvar
+//- TypeVar.node/kind tvar
 //- BoxDecl childof BoxAbs
-//- BoxAbs.node/kind abs
-//- BoxAbs param.0 TypeVar
+//- BoxAbs.node/kind record
+//- BoxAbs tparam.0 TypeVar
 //- TypeVar bounded/upper ObjParentDeclPtrType
 //- ObjParentDeclPtrType.node/kind tapp
 //- ObjParentDeclPtrType param.0 vname("ptr#builtin", _, _, _, _)
diff --git a/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_covariant_decl.m b/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_covariant_decl.m
index 5fc19d57b..53f82c352 100644
--- a/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_covariant_decl.m
+++ b/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_covariant_decl.m
@@ -4,11 +4,11 @@
 // No source range defines BoxDecl since this is a generic type.
 //- @Type defines/binding TypeVar
 //- @Box defines/binding BoxAbs
-//- TypeVar.node/kind absvar
+//- TypeVar.node/kind tvar
 //- TypeVar.variance covariant
 //- BoxDecl childof BoxAbs
-//- BoxAbs.node/kind abs
-//- BoxAbs param.0 TypeVar
+//- BoxAbs.node/kind record
+//- BoxAbs tparam.0 TypeVar
 @interface Box<__covariant Type>
 -(int) addToList:(Type)item;
 @end
diff --git a/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_covariant_restricted_super_class.m b/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_covariant_restricted_super_class.m
index b05a286c8..3bcf8389c 100644
--- a/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_covariant_restricted_super_class.m
+++ b/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_covariant_restricted_super_class.m
@@ -30,10 +30,10 @@
 // No source range defines BoxDecl since this is a generic type.
 //- @Type defines/binding TypeVar
 //- @Box defines/binding BoxAbs
-//- TypeVar.node/kind absvar
+//- TypeVar.node/kind tvar
 //- BoxDecl childof BoxAbs
-//- BoxAbs.node/kind abs
-//- BoxAbs param.0 TypeVar
+//- BoxAbs.node/kind record
+//- BoxAbs tparam.0 TypeVar
 //- TypeVar bounded/upper ObjParentDeclPtrType
 //- ObjParentDeclPtrType.node/kind tapp
 //- ObjParentDeclPtrType param.0 vname("ptr#builtin", _, _, _, _)
diff --git a/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_inherited.m b/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_inherited.m
index 8239eaff8..7541cce10 100644
--- a/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_inherited.m
+++ b/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_inherited.m
@@ -24,11 +24,10 @@
 //- @Type defines/binding TypeVar
 //- @Box defines/binding BoxAbs
 //- @O1 ref O1Impl
-//- TypeVar.node/kind absvar
+//- TypeVar.node/kind tvar
 //- TypeVar bounded/upper O1Ptr
-//- BoxDecl childof BoxAbs
-//- BoxAbs.node/kind abs
-//- BoxAbs param.0 TypeVar
+//- BoxAbs.node/kind record
+//- BoxAbs tparam.0 TypeVar
 //- BoxDecl extends O2Impl
 //- @O2 ref O2Impl
 //- @O2 ref O2Decl
@@ -44,11 +43,10 @@
 //- @Type defines/binding PTypeVar
 //- @Package defines/binding PackageAbs
 //- @O1 ref O1Impl
-//- PTypeVar.node/kind absvar
+//- PTypeVar.node/kind tvar
 //- PTypeVar bounded/upper O1Ptr
-//- PackageDecl childof PackageAbs
-//- PackageAbs.node/kind abs
-//- PackageAbs param.0 PTypeVar
+//- PackageAbs.node/kind record
+//- PackageAbs tparam.0 PTypeVar
 @interface Package<Type : O1*>
 //- @Type ref PTypeVar
 //- PackageDecl extends BoxType
diff --git a/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_instantiation.m b/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_instantiation.m
index 4e0e68f59..df461c41d 100644
--- a/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_instantiation.m
+++ b/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_instantiation.m
@@ -19,10 +19,9 @@
 // No source range defines BoxDecl since this is a generic type.
 //- @Type defines/binding TypeVar
 //- @Box defines/binding BoxAbs
-//- TypeVar.node/kind absvar
-//- BoxDecl childof BoxAbs
-//- BoxAbs.node/kind abs
-//- BoxAbs param.0 TypeVar
+//- TypeVar.node/kind tvar
+//- BoxAbs.node/kind record
+//- BoxAbs tparam.0 TypeVar
 @interface Box<Type> : Obj
 -(int) addToList:(Type)item;
 @end
diff --git a/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_invariant.m b/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_invariant.m
index ef86eda90..dc1b42268 100644
--- a/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_invariant.m
+++ b/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_invariant.m
@@ -21,11 +21,10 @@
 // No source range defines BoxDecl since this is a generic type.
 //- @Type defines/binding TypeVar
 //- @Box defines/binding BoxAbs
-//- TypeVar.node/kind absvar
+//- TypeVar.node/kind tvar
 //- TypeVar.variance invariant
-//- BoxDecl childof BoxAbs
-//- BoxAbs.node/kind abs
-//- BoxAbs param.0 TypeVar
+//- BoxAbs.node/kind record
+//- BoxAbs tparam.0 TypeVar
 @interface Box<Type> : O
 -(int) doSomething:(Type)t;
 @end
diff --git a/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_method_call.m b/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_method_call.m
index 2aca12db8..db7d13df7 100644
--- a/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_method_call.m
+++ b/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_method_call.m
@@ -26,10 +26,9 @@
 // No source range defines BoxDecl since this is a generic type.
 //- @Type defines/binding TypeVar
 //- @Box defines/binding BoxAbs
-//- TypeVar.node/kind absvar
-//- BoxDecl childof BoxAbs
-//- BoxAbs.node/kind abs
-//- BoxAbs param.0 TypeVar
+//- TypeVar.node/kind tvar
+//- BoxAbs.node/kind record
+//- BoxAbs tparam.0 TypeVar
 @interface Box<Type> : Obj
 //- @addToList defines/binding FuncDecl
 -(int) addToList:(Type)item;
diff --git a/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_method_type.m b/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_method_type.m
index 488671626..09787f6b5 100644
--- a/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_method_type.m
+++ b/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_method_type.m
@@ -23,10 +23,9 @@
 // No source range defines BoxDecl since this is a generic type.
 //- @Type defines/binding TypeVar
 //- @Box defines/binding BoxAbs
-//- TypeVar.node/kind absvar
-//- BoxDecl childof BoxAbs
-//- BoxAbs.node/kind abs
-//- BoxAbs param.0 TypeVar
+//- TypeVar.node/kind tvar
+//- BoxAbs.node/kind record
+//- BoxAbs tparam.0 TypeVar
 @interface Box<Type> : Obj
 
 //- @addToList defines/binding FuncDecl
diff --git a/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_nested.m b/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_nested.m
index a8f74fb02..d08c41e7a 100644
--- a/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_nested.m
+++ b/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_nested.m
@@ -36,10 +36,9 @@
 // No source range defines BoxDecl since this is a generic type.
 //- @Type defines/binding TypeVar
 //- @Box defines/binding BoxAbs
-//- TypeVar.node/kind absvar
-//- BoxDecl childof BoxAbs
-//- BoxAbs.node/kind abs
-//- BoxAbs param.0 TypeVar
+//- TypeVar.node/kind tvar
+//- BoxAbs.node/kind record
+//- BoxAbs tparam.0 TypeVar
 //- @Cup ref CupImpl
 //- @Drink ref DrinkImpl
 //- @Fizzy ref FizzyImpl
diff --git a/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_restricted_protocol.m b/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_restricted_protocol.m
index ca3ec4863..d10610668 100644
--- a/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_restricted_protocol.m
+++ b/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_restricted_protocol.m
@@ -24,10 +24,9 @@
 // No source range defines BoxDecl since this is a generic type.
 //- @Type defines/binding TypeVar
 //- @Box defines/binding BoxAbs
-//- TypeVar.node/kind absvar
-//- BoxDecl childof BoxAbs
-//- BoxAbs.node/kind abs
-//- BoxAbs param.0 TypeVar
+//- TypeVar.node/kind tvar
+//- BoxAbs.node/kind record
+//- BoxAbs tparam.0 TypeVar
 //- TypeVar bounded/upper ProtoDeclType
 //- ProtoDeclType.node/kind tapp
 //- ProtoDeclType param.0 vname("ptr#builtin", _, _, _, _)
diff --git a/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_two_args.m b/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_two_args.m
index efa97e6a2..ed5244929 100644
--- a/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_two_args.m
+++ b/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_two_args.m
@@ -7,14 +7,13 @@
 
 // No source range defines BoxDecl since this is a generic type.
 //- @Box defines/binding BoxAbs
-//- BoxDecl childof BoxAbs
 //- @FooType defines/binding FooTypeVar
 //- @BarType defines/binding BarTypeVar
-//- FooTypeVar.node/kind absvar
-//- BarTypeVar.node/kind absvar
-//- BoxAbs.node/kind abs
-//- BoxAbs param.0 FooTypeVar
-//- BoxAbs param.1 BarTypeVar
+//- FooTypeVar.node/kind tvar
+//- BarTypeVar.node/kind tvar
+//- BoxAbs.node/kind record
+//- BoxAbs tparam.0 FooTypeVar
+//- BoxAbs tparam.1 BarTypeVar
 @interface Box<FooType, BarType> : O
 
 //- @BarType ref BarTypeVar
diff --git a/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_unbound.m b/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_unbound.m
index 1dfbad2f1..15ee71811 100644
--- a/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_unbound.m
+++ b/kythe/cxx/indexer/cxx/testdata/objc/generics/generic_unbound.m
@@ -12,10 +12,9 @@
 // No source range defines BoxDecl since this is a generic type.
 //- @Type defines/binding TypeVar
 //- @Box defines/binding BoxAbs
-//- TypeVar.node/kind absvar
-//- BoxDecl childof BoxAbs
-//- BoxAbs.node/kind abs
-//- BoxAbs param.0 TypeVar
+//- TypeVar.node/kind tvar
+//- BoxAbs.node/kind record
+//- BoxAbs tparam.0 TypeVar
 @interface Box<Type> : O
 -(int) doSomething:(Type)t;
 @end
diff --git a/kythe/cxx/indexer/cxx/testdata/rec/rec_class_base_dependent.cc b/kythe/cxx/indexer/cxx/testdata/rec/rec_class_base_dependent.cc
index 56ceeda6c..4831a044d 100644
--- a/kythe/cxx/indexer/cxx/testdata/rec/rec_class_base_dependent.cc
+++ b/kythe/cxx/indexer/cxx/testdata/rec/rec_class_base_dependent.cc
@@ -1,8 +1,8 @@
 // We index dependent base classes.
 //- @T defines/binding TyvarT
 template <typename T>
-//- @A defines/binding AbsA
-//- ClassA childof AbsA
+//- @A defines/binding ClassA
+//- ClassA.node/kind record
 //- ClassA extends/public TyvarT
 //- ClassA extends/private DepTS
 //- DepTS.node/kind lookup
diff --git a/kythe/cxx/indexer/cxx/testdata/template/exclude_this_file.h b/kythe/cxx/indexer/cxx/testdata/template/exclude_this_file.h
deleted file mode 100644
index a898af519..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/exclude_this_file.h
+++ /dev/null
@@ -1,4 +0,0 @@
-template <typename T> class Excluded { };
-template <typename T> void EF(T t) { }
-template <typename T> T exc_var = 0;
-#define EXC_MACRO template <typename T> class ExcludedMacro { };
diff --git a/kythe/cxx/indexer/cxx/testdata/template/generic_lambda.cc b/kythe/cxx/indexer/cxx/testdata/template/generic_lambda.cc
deleted file mode 100644
index 80e13cf1c..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/generic_lambda.cc
+++ /dev/null
@@ -1,13 +0,0 @@
-
-void fn() {
-  //- @outer defines/binding OuterVar
-  int outer = 0;
-  //- @var defines/binding VarArg
-  //- @capture defines/binding CaptureBinding
-  //- @outer ref OuterVar
-  auto lambda = [capture=&outer] (const auto& var) {
-    //- @capture ref CaptureBinding
-    //- @var ref VarArg
-    return capture + var;
-  };
-};
diff --git a/kythe/cxx/indexer/cxx/testdata/template/include_this_file.h b/kythe/cxx/indexer/cxx/testdata/template/include_this_file.h
deleted file mode 100644
index d3de6989e..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/include_this_file.h
+++ /dev/null
@@ -1,4 +0,0 @@
-template <typename T> class Included { };
-template <typename T> void IF(T t) { }
-template <typename T> T inc_var = 0;
-#define INC_MACRO template <typename T> class IncludedMacro { };
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_alias.cc b/kythe/cxx/indexer/cxx/testdata/template/template_alias.cc
deleted file mode 100644
index adf5550f4..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_alias.cc
+++ /dev/null
@@ -1,13 +0,0 @@
-// We index type alias templates.
-
-//- @U defines/binding TyvarU
-template<typename U>
-//- @T defines/binding AliasTemplate
-//- @U ref TyvarU
-using T = U;
-
-//- AliasTemplate.node/kind abs
-//- TyvarU.node/kind absvar
-//- AliasTemplate param.0 TyvarU
-//- Alias childof AliasTemplate
-//- Alias.node/kind talias
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_alias_implicit_instantiation.cc b/kythe/cxx/indexer/cxx/testdata/template/template_alias_implicit_instantiation.cc
deleted file mode 100644
index 024f9ec85..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_alias_implicit_instantiation.cc
+++ /dev/null
@@ -1,11 +0,0 @@
-// Checks that specialization decls (not defns) generate specializes edges.
-template <typename T> struct S { };
-//- @T defines/binding TAlias
-using T = S<float>;
-//- TAlias aliases SFloatTy
-//- SFloatSpec specializes SFloatTy
-//- SFloatTy.node/kind tapp
-//- SFloatSpec.node/kind record
-// NB: T aliases the type application of S to float, _not_ the record that
-// results from the implicit instantiation of S<float>. Is this the behavior
-// we want?
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_alias_implicit_instantiation_decls.cc b/kythe/cxx/indexer/cxx/testdata/template/template_alias_implicit_instantiation_decls.cc
deleted file mode 100644
index b4e4f7bb4..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_alias_implicit_instantiation_decls.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Checks that specialization decls are given the right names.
-//- @S defines/binding TemplateS
-template <typename T> struct S;
-//- @T defines/binding NominalAlias
-using T = S<float>;
-//- NominalAlias aliases TApp
-//- TApp param.0 TNominal
-//- TNominal.node/kind tnominal
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_alias_multilevel_abs.cc b/kythe/cxx/indexer/cxx/testdata/template/template_alias_multilevel_abs.cc
deleted file mode 100644
index e3eeb157a..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_alias_multilevel_abs.cc
+++ /dev/null
@@ -1,35 +0,0 @@
-// With aliasing on, we don't record childof edges to abs nodes, even under
-// multiple layers of implicit template expansion.
-template <template <typename T> class Tmpl>
-struct TemplateSel { };
-
-template <template <typename T> class Tv1>
-struct Templates1 {
-  typedef TemplateSel<Tv1> Box;
-};
-
-template <class TestSel>
-//- @T1 defines/binding AbsT1
-//- RecT1 childof AbsT1
-//- RecT1.node/kind record
-class T1 {
- public:
-//- @f defines/binding FnF
-//- FnF childof RecT1
-//- !{FnF childof AbsT1}
-  static bool f() {
-    return true;
-  }
-};
-
-template <typename T2V>
-class T2 {
- public:
-  static bool g() {
-    T1<typename T2V::Box>::f();
-    return true;
-  }
-};
-
-template <typename T> struct Content { };
-bool b = T2<Templates1<Content>>::g();
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_alias_naming.cc b/kythe/cxx/indexer/cxx/testdata/template/template_alias_naming.cc
deleted file mode 100644
index 4b05a7e54..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_alias_naming.cc
+++ /dev/null
@@ -1,9 +0,0 @@
-// Other flavors of template arguments don't confuse aliasing.
-
-//- @C defines/binding AbsC
-//- ClassC childof AbsC
-//- ClassC.node/kind record
-//- @f defines/binding FnF
-//- FnF childof ClassC
-template <void*> class C { public: void f() { } };
-void g() { typedef C<nullptr> I; I i; i.f(); }
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_arg_multiple_typename.cc b/kythe/cxx/indexer/cxx/testdata/template/template_arg_multiple_typename.cc
deleted file mode 100644
index d1b523107..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_arg_multiple_typename.cc
+++ /dev/null
@@ -1,31 +0,0 @@
-// Checks that templates can accept multiple typename arguments.
-
-template
-//- @T defines/binding AbsT
-//- @S defines/binding AbsS
-<typename T, typename S>
-//- @C defines/binding CDecl1
-class C;
-
-template
-//- @N defines/binding AbsN
-//- @V defines/binding AbsV
-<typename N, typename V>
-//- @C defines/binding CDecl2
-class C;
-
-template
-//- @W defines/binding AbsW
-//- @X defines/binding AbsX
-<typename W, typename X>
-//- @C defines/binding CDefn
-//- @C completes/uniquely CDecl2
-//- @C completes/uniquely CDecl1
-class C { };
-
-//- CDecl1 param.0 AbsT
-//- CDecl1 param.1 AbsS
-//- CDecl2 param.0 AbsN
-//- CDecl2 param.1 AbsV
-//- CDefn param.0 AbsW
-//- CDefn param.1 AbsX
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_arg_typename.cc b/kythe/cxx/indexer/cxx/testdata/template/template_arg_typename.cc
deleted file mode 100644
index 86f88afa2..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_arg_typename.cc
+++ /dev/null
@@ -1,28 +0,0 @@
-// Checks that templates can accept typename arguments.
-
-template
-//- @T defines/binding AbsT
-<typename T>
-//- @C defines/binding CDecl1
-class C;
-
-template
-//- @S defines/binding AbsS
-<typename S>
-//- @C defines/binding CDecl2
-class C;
-
-template
-//- @V defines/binding AbsV
-<typename V>
-//- @C defines/binding CDefn
-//- @C completes/uniquely CDecl1
-//- @C completes/uniquely CDecl2
-class C { };
-
-//- AbsT.node/kind absvar
-//- AbsS.node/kind absvar
-//- AbsV.node/kind absvar
-//- CDefn param.0 AbsV
-//- CDecl2 param.0 AbsS
-//- CDecl1 param.0 AbsT
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_auto_parameter.cc b/kythe/cxx/indexer/cxx/testdata/template/template_auto_parameter.cc
deleted file mode 100644
index 638d60746..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_auto_parameter.cc
+++ /dev/null
@@ -1,16 +0,0 @@
-// Verifies that Kythe references auto template type parameters
-// as it would any other non-type template parameter.
-
-//- @N defines/binding TemplateParamN
-template <auto N>
-struct S {
-  //- @#0N ref TemplateParamN
-  //- @#1N ref TemplateParamN
-  //- @values defines/binding FieldArr
-  decltype(N) values[N];
-};
-
-void f() {
- S<10> ints;
- S<'a'> chars;
-}
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_blame_member.cc b/kythe/cxx/indexer/cxx/testdata/template/template_blame_member.cc
deleted file mode 100644
index e62d6767c..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_blame_member.cc
+++ /dev/null
@@ -1,18 +0,0 @@
-// We blame member functions of class templates.
-//- @g defines/binding FnG
-bool g() { return false; }
-//- @f defines/binding AbsF
-//- PtCall=@"g()" ref/call FnG
-//- PtCall childof FnF  // We should collapse K in abs(K) into cluster abs(K)
-//- FnF childof CBody
-//- CBody childof AbsC
-//- @C defines/binding AbsC
-//- FImp instantiates TUnaryAppAbsF
-//- FImpCall=@"g()" ref/call/implicit FnG
-//- FImpCall childof FImp
-template <typename T> struct C { bool f(T* t) { return g(); } };
-//- TheCall=@"j->f(nullptr)" ref/call TUnaryAppAbsF
-//- @h defines/binding FnH
-//- TheCall childof FnH
-//- TUnaryAppAbsF param.0 AbsF  // Until we record the whole type context: #1879
-bool h(C<int>* j) { return j->f(nullptr); }
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_blame_pspec_member.cc b/kythe/cxx/indexer/cxx/testdata/template/template_blame_pspec_member.cc
deleted file mode 100644
index 0f94996db..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_blame_pspec_member.cc
+++ /dev/null
@@ -1,25 +0,0 @@
-// We blame member functions of partial specializations.
-//- @g defines/binding FnG
-bool g() { return false; }
-//- PtCall=@"g()" ref/call FnG
-//- PtCall childof FnF  // We should collapse K in abs(K) into cluster abs(K)
-//- FnF childof CBody
-//- CBody childof AbsC
-//- @C defines/binding AbsC
-template <typename T, typename S> struct C { bool f(T* t) { return g(); } };
-
-//- TsCall childof SpecF
-//- TsCall=@"g()" ref/call FnG
-//- SpecF.code _
-//- @f defines/binding SpecF
-//- TsImp instantiates TAppUnarySpecF
-//- TsImpCall=@"g()" ref/call/implicit FnG
-//- TsImpCall childof TsImp  // Aliasing is off by default
-template <typename T> struct C<T, int> { bool f(T* t) { return g(); } };
-
-// Until type contexts: #1879
-//- TheCall=@"j->f(nullptr)" ref/call TAppUnarySpecF
-//- @h defines/binding FnH
-//- TheCall childof FnH
-//- TAppUnarySpecF param.0 SpecF
-bool h(C<int, int>* j) { return j->f(nullptr); }
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_blame_spec.cc b/kythe/cxx/indexer/cxx/testdata/template/template_blame_spec.cc
deleted file mode 100644
index 9535a7a62..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_blame_spec.cc
+++ /dev/null
@@ -1,18 +0,0 @@
-// We blame function specializations.
-//- @g defines/binding FnG
-bool g() { return false; }
-//- @f defines/binding AbsF
-//- PtCall=@"g()" ref/call FnG
-//- PtCall childof FnF  // We should collapse K in abs(K) into cluster abs(K)
-//- FnF childof AbsF
-//- FIntImp instantiates TAppAbsFInt
-//- FIntImpCall=@"g()" ref/call/implicit FnG  // Aliasing is off by default.
-//- FIntImpCall childof FIntImp
-template <typename T> bool f(T* t) { return g(); }
-//- TheCall=@"f(&i)" ref/call TAppAbsFInt
-//- @h defines/binding FnH
-//- TheCall childof FnH
-//- TAppAbsFInt param.0 AbsF
-//- TAppAbsFInt param.1 Int
-//- @int ref Int
-bool h(int i) { return f(&i); }
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_blame_spec_member.cc b/kythe/cxx/indexer/cxx/testdata/template/template_blame_spec_member.cc
deleted file mode 100644
index db47b8fbe..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_blame_spec_member.cc
+++ /dev/null
@@ -1,20 +0,0 @@
-// We blame member functions of total specializations.
-//- @g defines/binding FnG
-bool g() { return false; }
-//- PtCall=@"g()" ref/call FnG
-//- PtCall childof FnF  // We should collapse K in abs(K) into cluster abs(K)
-//- FnF childof CBody
-//- CBody childof AbsC
-//- @C defines/binding AbsC
-template <typename T> struct C { bool f(T* t) { return g(); } };
-
-//- @f defines/binding SpecF
-//- TsCall=@"g()" ref/call FnG
-//- TsCall childof SpecF
-//- SpecF.code _
-template <> struct C<int> { bool f(int* t) { return g(); } };
-
-//- TheCall=@"j->f(nullptr)" ref/call SpecF
-//- @h defines/binding FnH
-//- TheCall childof FnH
-bool h(C<int>* j) { return j->f(nullptr); }
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_class_ctor_deduction.cc b/kythe/cxx/indexer/cxx/testdata/template/template_class_ctor_deduction.cc
deleted file mode 100644
index 755ea2890..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_class_ctor_deduction.cc
+++ /dev/null
@@ -1,43 +0,0 @@
-// Checks that we correctly attribute class template instantiation
-// via C++17 constructor argument deduction and guides.
-
-//- @S defines/binding StructS
-struct S {};
-
-template <typename T>
-//- @C defines/binding TemplC
-struct C {
-
-  //- @C defines/binding Ctor0
-  C() { }
-
-  //- @C defines/binding CtorT
-  C(T) { }
-
-  template <typename U>
-  //- @C defines/binding CtorU
-  C(U, U) { }
-};
-
-//- @#1C ref TemplC
-//- @S ref StructS
-C() -> C<S>;
-
-// TODO(shahms): This should not be considered an implicit ref.
-//- @#1C ref/implicit TemplC
-template <typename U> C(U, U) -> C<U>;
-
-void f() {
-  //- @C ref TemplC
-  //- @cz ref/call Ctor0App
-  //- Ctor0App param.0 Ctor0
-  C cz;
-  //- @C ref TemplC
-  //- @"ct(S{})" ref/call CtorTApp
-  //- CtorTApp param.0 CtorT
-  C ct(S{});
-  //- @C ref TemplC
-  //- @"cu(S{}, S{})" ref/call CtorUApp
-  //- CtorUApp param.0 CtorU
-  C cu(S{}, S{});
-}
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_class_ctor_default_and_init.cc b/kythe/cxx/indexer/cxx/testdata/template/template_class_ctor_default_and_init.cc
deleted file mode 100644
index 69c83eeac..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_class_ctor_default_and_init.cc
+++ /dev/null
@@ -1,63 +0,0 @@
-// Checks that we correctly attribute initialization calls to templates.
-// (This is the same as function_ctor_default_and_init, except we check that
-// we do the right thing inside template bodies.)
-//- @foo defines/binding FnFoo
-int foo() { return 0; }
-//- @bar defines/binding FnBar
-int bar() { return 0; }
-template <typename T>
-class C {
-  //- @C defines/binding CtorC0
-  //- FooCall=@"foo()" ref/call FnFoo
-  //- FooCall childof CtorC0
-  //- !{ BarCall childof CtorC0 }
-  C() : i(foo()) { }
-  //- @C defines/binding CtorC1
-  //- !{ FooCall childof CtorC1 }
-  //- BarCall childof CtorC1
-  C(int) { }
-  //- @C defines/binding CtorC2
-  //- !{ FooCall childof CtorC2 }
-  //- BarCall childof CtorC2
-  C(float) { }
-  //- BarCall=@"bar()" ref/call FnBar
-  int i = bar();
-};
-
-template <typename T>
-class C<T*> {
-  //- @C defines/binding CtorCP0
-  //- FooCallP=@"foo()" ref/call FnFoo
-  //- FooCallP childof CtorCP0
-  //- !{ BarCallP childof CtorCP0 }
-  C() : i(foo()) { }
-  //- @C defines/binding CtorCP1
-  //- !{ FooCallP childof CtorCP1 }
-  //- BarCallP childof CtorCP1
-  C(int) { }
-  //- @C defines/binding CtorCP2
-  //- !{ FooCallP childof CtorCP2 }
-  //- BarCallP childof CtorCP2
-  C(float) { }
-  //- BarCallP=@"bar()" ref/call FnBar
-  int i = bar();
-};
-
-template <>
-class C<int> {
-  //- @C defines/binding CtorCT0
-  //- FooCallT=@"foo()" ref/call FnFoo
-  //- FooCallT childof CtorCT0
-  //- !{ BarCallT childof CtorCT0 }
-  C() : i(foo()) { }
-  //- @C defines/binding CtorCT1
-  //- !{ FooCallT childof CtorCT1 }
-  //- BarCallT childof CtorCT1
-  C(int) { }
-  //- @C defines/binding CtorCT2
-  //- !{ FooCallT childof CtorCT2 }
-  //- BarCallT childof CtorCT2
-  C(float) { }
-  //- BarCallT=@"bar()" ref/call FnBar
-  int i = bar();
-};
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_class_defn.cc b/kythe/cxx/indexer/cxx/testdata/template/template_class_defn.cc
deleted file mode 100644
index e635ab68b..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_class_defn.cc
+++ /dev/null
@@ -1,15 +0,0 @@
-// Checks that references to a complete template class point to the right node.
-template
-<typename X>
-//- @C defines/binding Abs
-class C {};
-
-//- @U defines/binding AliasNode
-using U =
-C<int>;
-
-//- AliasNode aliases TApp
-//- TApp param.0 Abs
-//- Abs.node/kind abs
-//- ClassC childof Abs
-//- ClassC.node/kind record
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_class_fn_spec.cc b/kythe/cxx/indexer/cxx/testdata/template/template_class_fn_spec.cc
deleted file mode 100644
index 92734285a..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_class_fn_spec.cc
+++ /dev/null
@@ -1,18 +0,0 @@
-// Checks that we get edges for member function specialization and calls
-// thereto.
-//- @F defines/binding _MemDecl
-//- @C defines/binding TmplDefn
-template <typename T> struct C { static void F(); };
-
-//- @F defines/binding IntMemDefn
-//- @F completes/uniquely IntMemDecl
-template <> void C<int>::F() {}
-//- IntMemDecl.complete incomplete
-//- IntMemDefn.complete definition
-//- IntMemDefn.code _
-//- IntMemDecl childof _IntTmplSpec
-//- _IntTmpl specializes TApp
-//- TApp param.0 TmplDefn
-
-//- @"C<int>::F()" ref/call IntMemDefn
-void dummy() { C<int>::F(); }
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_class_inner.cc b/kythe/cxx/indexer/cxx/testdata/template/template_class_inner.cc
deleted file mode 100644
index ee220e2fd..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_class_inner.cc
+++ /dev/null
@@ -1,17 +0,0 @@
-// Checks that inner defns are children of outer classes.
-template <typename T>
-//- @C defines/binding AbsC
-//- ClassC childof AbsC
-class C {
-  //- @R defines/binding EnumR
-  //- EnumR childof ClassC
-  enum R : T {
-  };
-};
-//- @cshort defines/binding CShort
-//- CShort typed CShortAbs
-//- CShortAbsInst specializes CShortAbs
-//- CShortAbsEnum childof CShortAbsInst
-//- CShortAbsEnum.node/kind sum
-//- !{ CShortAbsEnum childof ClassC }
-C<short> cshort;
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_class_inst_explicit.cc b/kythe/cxx/indexer/cxx/testdata/template/template_class_inst_explicit.cc
deleted file mode 100644
index 7658d8133..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_class_inst_explicit.cc
+++ /dev/null
@@ -1,14 +0,0 @@
-// Checks the behavior of explicit class template instantiations.
-using ExternalDef = int;
-//- @C defines/binding TemplateC
-template <typename T> struct C {
-  using X = ExternalDef;
-};
-//- @C defines/binding ExplicitC
-//- @C ref ExplicitC
-template struct C<int>;
-//- ExplicitC.node/kind record
-//- XAnchor childof/context ExplicitC
-//- XAnchor.node/kind anchor
-//- XAnchor defines/binding ExternalDefAlias
-//- ExternalDefAlias.node/kind talias
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_class_inst_implicit.cc b/kythe/cxx/indexer/cxx/testdata/template/template_class_inst_implicit.cc
deleted file mode 100644
index 11cb7d4d1..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_class_inst_implicit.cc
+++ /dev/null
@@ -1,29 +0,0 @@
-// Checks the behavior of implicit class template instantiations.
-using ExternalDef = int;
-//- @C defines/binding TemplateC
-//- @T defines/binding AbsvarT
-template <typename T> struct C {
-//- @X defines/binding ExternalDefAlias
-//- @X.loc/start XStart
-//- @X.loc/end XEnd
-  using X = ExternalDef;
-//- @Y defines/binding AbsvarAlias
-//- @Y.loc/start YStart
-//- @Y.loc/end YEnd
-  using Y = T;
-};
-C<int> x;
-//- ImpX specializes TAppCInt
-//- TAppCInt.node/kind tapp
-//- TAppCInt param.0 TemplateC
-//- WraithXAnchor childof/context ImpX
-//- WraithXAnchor.node/kind anchor
-//- WraithXAnchor.loc/start XStart
-//- WraithXAnchor.loc/end XEnd
-//- WraithXAnchor defines/binding ExternalDefAlias
-//- AbsvarAlias aliases AbsvarT
-//- WraithYAnchor childof/context ImpX
-//- WraithYAnchor.loc/start YStart
-//- WraithYAnchor.loc/end YEnd
-//- WraithYAnchor defines/binding WraithAlias
-//- WraithAlias aliases vname("int#builtin",_,_,_,"c++")
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_class_inst_implicit_dependent.cc b/kythe/cxx/indexer/cxx/testdata/template/template_class_inst_implicit_dependent.cc
deleted file mode 100644
index e1d6c2230..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_class_inst_implicit_dependent.cc
+++ /dev/null
@@ -1,12 +0,0 @@
-// Checks the behavior of implicit class template instantiations.
-//- @T defines/binding TemplateT
-template <typename C> struct T {
-//- @X defines/binding XAlias
-//- XAlias aliases Lookup
-//- Lookup.node/kind lookup
-  using X = typename C::Y;
-};
-struct S { using Y = int; }; T<S>::X x;
-//- ImpX specializes TAppCS
-//- TAppCS.node/kind tapp
-//- TAppCS param.0 TemplateT
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_class_inst_vs_spec.cc b/kythe/cxx/indexer/cxx/testdata/template/template_class_inst_vs_spec.cc
deleted file mode 100644
index f5b32b209..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_class_inst_vs_spec.cc
+++ /dev/null
@@ -1,34 +0,0 @@
-// Checks that instantiates/specializes are applied to class templates.
-//- @C defines/binding PrimaryT
-template<typename T, typename S> class C {};
-//- @C defines/binding PartialT
-template<typename S> class C<int, S> {};
-//- @C defines/binding TotalT
-template<> class C<float, double> {};
-
-// Specializes and instantiates primary
-//- @Primary defines/binding APrimary
-//- APrimary typed PrimaryLongShort
-//- PrimaryLongShort param.0 PrimaryT
-//- PrimaryImp specializes PrimaryLongShort
-//- PrimaryImp instantiates PrimaryLongShort
-C<long, short> Primary;
-
-// Specializes primary and instantiates partial
-// NB: the type is still PrimaryT<int, short>.
-//- @PartialSpec defines/binding APartialSpec
-//- APartialSpec typed PrimaryIntShort
-//- ImpPartialSpec specializes PrimaryIntShort
-//- PrimaryIntShort param.0 PrimaryT
-//- ImpPartialSpec instantiates PartialIntShort
-//- PartialIntShort param.0 PartialT
-//- PartialIntShort param.1 TShort
-//- @short ref TShort
-C<int, short> PartialSpec;
-
-// Specializes primary and instantiates primary
-//- @TotalSpec defines/binding ATotalSpec
-//- ATotalSpec typed PrimaryFloatDouble
-//- TotalT instantiates PrimaryFloatDouble
-//- TotalT specializes PrimaryFloatDouble
-C<float, double> TotalSpec;
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_class_ref.cc b/kythe/cxx/indexer/cxx/testdata/template/template_class_ref.cc
deleted file mode 100644
index 33246fb7d..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_class_ref.cc
+++ /dev/null
@@ -1,31 +0,0 @@
-//- @S defines/binding SPrim
-//- @S defines/binding S1
-template <typename T, typename U> struct S {};
-//- @S defines/binding S2
-template <typename T> struct S<T, int> {};
-//- @S defines/binding S3
-template <typename T> struct S<T, float> {};
-//- @S defines/binding S4
-template <typename U> struct S<int, U> {};
-//- @S defines/binding S5
-template <typename U> struct S<float, U> {};
-//- @S defines/binding S6
-template <> struct S<char, char> {};
-
-//- @S ref S1
-S<void *, void *> s1;
-//- @S ref S2
-S<void *, int> s2;
-//- @S ref S3
-S<void *, float> s3;
-//- @S ref S4
-S<int, void *> s4;
-//- @S ref S5
-S<float, void *> s5;
-//- @S ref S6
-S<char, char> s6;
-
-template <typename T, typename U> void f() {
-  //- @S ref SPrim
-  S<T, U> s;
-}
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_class_ref_ps.cc b/kythe/cxx/indexer/cxx/testdata/template/template_class_ref_ps.cc
deleted file mode 100644
index b4f3b84c1..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_class_ref_ps.cc
+++ /dev/null
@@ -1,9 +0,0 @@
-// Tests that references to ps class templates go to the ps via `specializes`.
-//- @V defines/binding VPrim
-template <typename T, typename S> struct V { S m; };
-//- @V defines/binding VInt
-//- VInt specializes TAppVIntInt
-template <typename S> struct V<int, S> { S mm; };
-//- @x defines/binding VarX
-//- VarX typed TAppVIntInt
-V<int, int> x;
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_class_skip_implicit_on.cc b/kythe/cxx/indexer/cxx/testdata/template/template_class_skip_implicit_on.cc
deleted file mode 100644
index 55778dc38..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_class_skip_implicit_on.cc
+++ /dev/null
@@ -1,10 +0,0 @@
-// Checks that we still perform reasonably when skipping template instantations.
-// Run with --index_template_instantiations=false
-//- @vector defines/binding VectorAbs
-template <typename T> class vector { };
-//- @ty defines/binding TyAlias
-//- TyAlias aliases Tau
-//- Tau.node/kind tapp
-//- Tau param.0 VectorAbs
-using ty = vector<int>;
-ty var;
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_class_template_ctor.cc b/kythe/cxx/indexer/cxx/testdata/template/template_class_template_ctor.cc
deleted file mode 100644
index 82fa84516..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_class_template_ctor.cc
+++ /dev/null
@@ -1,29 +0,0 @@
-// Checks that we properly handle classes with constructor templates.
-//- @foo defines/binding FnFoo
-int foo() { return 0; }
-//- @bar defines/binding FnBar
-int bar() { return 0; }
-class C {
- public:
-  template <typename T>
-  //- FooCall=@"foo()" ref/call FnFoo
-  //- FooCall childof CtorC
-  //- @C defines/binding AbsCtorC
-  //- CtorC childof AbsCtorC
-  //- !{ BarCall childof CtorC }
-  //- BarCallJ childof CtorC
-  C(T) : i(foo()) { }
-
-  //- BarCall=@"bar()" ref/call FnBar
-  int i = bar();
-  //- BarCallJ=@"bar()" ref/call FnBar
-  int j = bar();
-};
-
-template <> C::
-//- FooCall2=@"foo()" ref/call FnFoo
-//- FooCall2 childof CtorC2
-//- @C defines/binding CtorC2
-//- !{ BarCall childof CtorC2 }
-//- BarCallJ childof CtorC2
-C(float) : i(foo()) { }
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_decl_arg.cc b/kythe/cxx/indexer/cxx/testdata/template/template_decl_arg.cc
deleted file mode 100644
index 5d964585c..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_decl_arg.cc
+++ /dev/null
@@ -1,38 +0,0 @@
-// Verify that we support using pointers, references and pointer-to-members in
-// non-type template parameters.
-
-template <typename Type, Type Value>
-struct Pair {
-  using type = Type;
-  static constexpr type value() { return Value; }
-};
-
-//- @Value defines/binding ValueType
-struct Value {
-  //- @member defines/binding ValueMember
-  int member;
-};
-
-//- @fn defines/binding FnDecl
-void fn();
-
-//- @Alias defines/binding AliasDecl
-//- @Value ref ValueType
-//- @member ref ValueMember
-using Alias = Pair<decltype(&Value::member),
-  //- @Value ref ValueType
-  //- @member ref ValueMember
-  &Value::member>;
-
-
-//- @FnPtrAlias defines/binding FnPtrAliasType
-//- @fn ref FnDecl
-using FnPtrAlias = Pair<decltype(&fn),
-//- @fn ref FnDecl
-      &fn>;
-
-//- @FnRefAlias defines/binding FnRefAliasType
-//- @fn ref FnDecl
-using FnRefAlias = Pair<decltype(*fn),
-//- @fn ref FnDecl
-      fn>;
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_depbase_field_ref.cc b/kythe/cxx/indexer/cxx/testdata/template/template_depbase_field_ref.cc
deleted file mode 100644
index 8ce463747..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_depbase_field_ref.cc
+++ /dev/null
@@ -1,13 +0,0 @@
-// Checks that we can refer to dependent fields.
-//- @T defines/binding TyvarT
-template <typename T> struct S {
-  T t;
-  //- @f ref DepF
-  //- DepF.node/kind lookup
-  //- DepF.text f
-  //- DepF param.0 DepBase
-  //- DepBase.node/kind lookup
-  //- DepBase.text "Base"
-  //- DepBase param.0 TyvarT
-  int i = t.Base::f;
-};
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_dependent_ctor.cc b/kythe/cxx/indexer/cxx/testdata/template/template_dependent_ctor.cc
deleted file mode 100644
index 13c1e3203..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_dependent_ctor.cc
+++ /dev/null
@@ -1,29 +0,0 @@
-// Checks indexing dependent constructors.
-template <typename T>
-struct M {
-  M() { }
-  M(int) { }
-};
-
-template <typename T>
-struct S {
-  S(M<T>) { }
-};
-
-template <typename T>
-//- @L defines/binding AbsL
-struct L : S<T> {
-  //- StCall=@"S<T>(M<T>())" ref/call/implicit St
-  //- MtCall=@"M<T>()" ref/call/implicit Mt
-  //- @L defines/binding CtorL
-  //- StCall childof CtorL
-  //- MtCall childof CtorL
-  L() : S<T>(M<T>()) {}
-};
-
-//- @l defines/binding VarL
-//- VarL typed TAppLInt
-//- TAppLInt param.0 AbsL
-//- LInt specializes TAppLInt
-//- CtorL childof LInt
-L<int> l;
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_dependent_ctor_small.cc b/kythe/cxx/indexer/cxx/testdata/template/template_dependent_ctor_small.cc
deleted file mode 100644
index 979a0142f..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_dependent_ctor_small.cc
+++ /dev/null
@@ -1,12 +0,0 @@
-// Checks indexing dependent constructors.
-//- @T defines/binding TyvarT
-template <typename T>
-struct S : T::Q {
-  //- @"T::Q()" ref/call LookupTQCtor
-  //- LookupTQCtor.node/kind lookup
-  //- LookupTQCtor.text "#ctor"
-  //- LookupTQCtor param.0 LookupTQ
-  //- LookupTQ.text "Q"
-  //- LookupTQ param.0 TyvarT
-  S() : T::Q() { }
-};
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_dependent_dtor.cc b/kythe/cxx/indexer/cxx/testdata/template/template_dependent_dtor.cc
deleted file mode 100644
index 736f28339..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_dependent_dtor.cc
+++ /dev/null
@@ -1,19 +0,0 @@
-// Checks that we index explicit calls to a dependent dtor.
-//- @T defines/binding TyvarT
-template <typename T>
-class C {
-  T *t;
-  void f() {
-    //- @"t->~T" ref/call LookupTDtor2
-    //- LookupTDtor2.node/kind lookup
-    //- LookupTDtor2 param.0 TyvarT
-    //- LookupTDtor2.text "#dtor"
-    //- @"~" ref LookupTDtor2
-    t->~T();
-    //- @"delete t" ref/call LookupTDtor
-    //- LookupTDtor.node/kind lookup
-    //- LookupTDtor param.0 TyvarT
-    //- LookupTDtor.text "#dtor"
-    delete t;
-  }
-};
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_dependent_dtor_qualified.cc b/kythe/cxx/indexer/cxx/testdata/template/template_dependent_dtor_qualified.cc
deleted file mode 100644
index f28b3d2d2..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_dependent_dtor_qualified.cc
+++ /dev/null
@@ -1,21 +0,0 @@
-// Checks that we index explicit calls to a dependent dtor with a qualifier.
-//- @T defines/binding TyvarT
-template <typename T>
-class C {
-  T *t;
-  void f() {
-    //- @"t->SomeId::Base::~Base" ref/call Dtor
-    //- Dtor.node/kind lookup
-    //- Dtor.text "#dtor"
-    //- Dtor param.0 BaseInT
-    //- BaseInT.node/kind lookup
-    //- BaseInT.text Base
-    //- BaseInT param.0 SomeId
-    //- SomeId.node/kind lookup
-    //- SomeId.text "SomeId"
-    //- @"~" ref Dtor
-    t->SomeId::Base::~Base();
-    // TODO(zarko): Does it make sense for SomeId param.0 TyvarT?
-    // What if instead of 'SomeId' we wrote 'T' above?
-  }
-};
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_dependent_name_ref.cc b/kythe/cxx/indexer/cxx/testdata/template/template_dependent_name_ref.cc
deleted file mode 100644
index eac063fbb..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_dependent_name_ref.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-
-template<typename T>
-void fn() {
-  //- @value_type ref DependentName
-  typename T::value_type a;
-  //- @value_type ref DependentName
-  typename T::value_type b;
-}
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_dependent_sized_array.cc b/kythe/cxx/indexer/cxx/testdata/template/template_dependent_sized_array.cc
deleted file mode 100644
index 0bbc5d8bc..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_dependent_sized_array.cc
+++ /dev/null
@@ -1,31 +0,0 @@
-// We don't fall over on dependent-sized arrays.
-//- @S defines/binding TyvarS
-//- @T defines/binding TyvarT
-template<unsigned S, class... T> struct A {
-//- @S ref TyvarS
-//- @R defines/binding FieldR
-  int R[S];
-
-  void fn() {
-    //- @Q defines/binding VarQ
-    //- @T ref TyvarT
-    int Q[] = {sizeof(T)...};
-  }
-
-  //- @Z defines/binding FieldZ
-  //- @T ref TyvarT
-  int Z[sizeof...(T)];
-};
-//- FieldR typed TAppDArrIntExpr
-//- TAppDArrIntExpr.node/kind tapp
-//- TAppDArrIntExpr param.0 vname("darr#builtin",_,_,_,_)
-//- TAppDArrIntExpr param.1 vname("int#builtin",_,_,_,_)
-//- TAppDArrIntExpr param.2 SomeExpr
-//- VarQ typed QType
-//- QType.node/kind tapp
-//- QType param.0 vname("darr#builtin",_,_,_,_)
-//- QType param.1 vname("int#builtin",_,_,_,_)
-//- FieldZ typed ZType
-//- ZType.node/kind tapp
-//- ZType param.0 vname("darr#builtin",_,_,_,_)
-//- ZType param.1 vname("int#builtin",_,_,_,_)
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_depexpr_field_ref.cc b/kythe/cxx/indexer/cxx/testdata/template/template_depexpr_field_ref.cc
deleted file mode 100644
index 58821294b..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_depexpr_field_ref.cc
+++ /dev/null
@@ -1,13 +0,0 @@
-// Checks that we don't fall over on fields that depend on expressions.
-//- @T defines/binding TyvarT
-template <typename T> struct S {
-  T t;
-  //- @f ref DepF
-  //- DepF.node/kind lookup
-  //- DepF.text f
-  //- !{DepF param.0 Anything}
-  //- @thing ref DepThing
-  //- DepThing.node/kind lookup
-  //- DepThing param.0 TyvarT
-  int i = (t.thing(3) + 4).f;
-};
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_depname_class.cc b/kythe/cxx/indexer/cxx/testdata/template/template_depname_class.cc
deleted file mode 100644
index 0804b04c2..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_depname_class.cc
+++ /dev/null
@@ -1,14 +0,0 @@
-// Checks the representation of dependent names.
-template
-//- @T defines/binding DepT
-<template <typename> class T>
-struct C {
-//- @D ref DepTIntD
-using S = typename T<int>::D;
-};
-//- DepTIntD.text D
-//- DepTIntD.node/kind lookup
-//- DepTIntD param.0 DepTInt
-//- DepTInt.node/kind tapp
-//- DepTInt param.0 DepT
-//- DepTInt param.1 Int
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_depname_field_ref.cc b/kythe/cxx/indexer/cxx/testdata/template/template_depname_field_ref.cc
deleted file mode 100644
index 02ef11489..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_depname_field_ref.cc
+++ /dev/null
@@ -1,10 +0,0 @@
-// Checks that we can refer to dependent fields.
-//- @T defines/binding TyvarT
-template <typename T> struct Sz {
-  T t;
-  //- @f ref DepF
-  //- DepF.node/kind lookup
-  //- DepF.text f
-  //- DepF param.0 TyvarT
-  int i = t.f;
-};
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_depname_implicit.cc b/kythe/cxx/indexer/cxx/testdata/template/template_depname_implicit.cc
deleted file mode 100644
index f02a8e3bb..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_depname_implicit.cc
+++ /dev/null
@@ -1,13 +0,0 @@
-// Checks that we can refer to implicit dependent fields.
-//- @A defines/binding AbsA
-template <typename T> class A { };
-//- @T defines/binding TyvarT
-template <typename T> class C {
-//- @Dep ref Dep
-//- Dep param.0 At
-//- At.node/kind tapp
-//- At param.0 AbsA
-//- At param.1 TyvarT
-//- @T ref TyvarT
-  void f() { A<T>::Dep(); }
-};
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_depname_inst_class.cc b/kythe/cxx/indexer/cxx/testdata/template/template_depname_inst_class.cc
deleted file mode 100644
index fd1bcf284..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_depname_inst_class.cc
+++ /dev/null
@@ -1,18 +0,0 @@
-// Checks the representation of resolved dependent names.
-template
-<template <typename> class T>
-//- @C defines/binding AbsC
-struct C {
-using S = typename T<int>::D;
-};
-template
-<typename Q>
-//- @Z defines/binding AbsZ
-struct Z {
-using D = Q;
-};
-// Somewhere we need to close the loop wrt the substitutions here.
-using U = C<Z>::S;
-//- AbsC.node/kind abs
-//- AbsZ.node/kind abs
-
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_depname_path_graph.cc b/kythe/cxx/indexer/cxx/testdata/template/template_depname_path_graph.cc
deleted file mode 100644
index f570541da..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_depname_path_graph.cc
+++ /dev/null
@@ -1,38 +0,0 @@
-// Checks that we index dependent name path graphs and that they reference
-// the same nodes within a template, but not between them.
-template
-//- @T defines/binding CParamT
-<template <typename> class T>
-struct C {
-//- @F ref CDepTIntDEF
-//- CDepTIntDEF.text F
-//- @E ref CDepTIntDE
-//- CDepTIntDE.text E
-//- @D ref CDepTIntD
-//- CDepTIntD.text D
-//- @T ref CParamT
-using X = typename T<int>::D::E::F;
-
-//- @F ref CDeptTIntDEF
-//- @E ref CDeptTIntDE
-//- @D ref CDeptTIntD
-//- @T ref CParamT
-using Y = typename T<int>::D::E::F;
-};
-//- CDeptTIntDEF param.0 CDeptTIntDE
-//- CDeptTIntDE param.0 CDeptTIntD
-
-template
-//- @T defines/binding DParamT
-<template <typename> class T>
-struct D {
-//- @F ref DDepTIntDEF
-//- @E ref DDepTIntDE
-//- @D ref DDepTIntD
-//- @T ref DParamT
-//- !{ @F ref CDepTIntDEF }
-//- !{ @E ref CDepTIntDE }
-//- !{ @D ref CDepTIntD }
-//- !{ @T ref CParamT }
-using Z = typename T<int>::D::E::F;
-};
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_depname_template_field_ref.cc b/kythe/cxx/indexer/cxx/testdata/template/template_depname_template_field_ref.cc
deleted file mode 100644
index 87b1782e7..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_depname_template_field_ref.cc
+++ /dev/null
@@ -1,18 +0,0 @@
-// Checks that we can refer to dependent fields under other templates.
-//- @C defines/binding ClassC
-class C { };
-//- @T defines/binding TyvarT
-template <typename T> struct S {
-  T t;
-  //- @f ref DepF
-  //- DepF.node/kind lookup
-  //- DepF.text f
-  //- DepF param.0 TyvarT
-  //- @C ref ClassC
-  //- @"f<C>" ref TAppDepFC
-  //- TAppDepFC.node/kind tapp
-  //- TAppDepFC param.0 DepF
-  //- TAppDepFC param.1 ClassC
-  int i = t.template f<C>;
-  // (f<C> should refer to a lookup of (typeof t)::f applied to C)
-};
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_drop_redundant_wraiths.cc b/kythe/cxx/indexer/cxx/testdata/template/template_drop_redundant_wraiths.cc
deleted file mode 100644
index 5b5e86ce5..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_drop_redundant_wraiths.cc
+++ /dev/null
@@ -1,9 +0,0 @@
-// Checks --experimental_drop_instantiation_independent_data.
-template <typename T> class C {
-//- @int ref TInt
-//- WInt=@int ref TInt
-//- WIField=@ifield defines/binding PTField
-//- WIField childof/context CInst
-  int ifield;
-};
-template class C<short>;
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_drop_redundant_wraiths_expect_fail.cc b/kythe/cxx/indexer/cxx/testdata/template/template_drop_redundant_wraiths_expect_fail.cc
deleted file mode 100644
index 0a6c0e46f..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_drop_redundant_wraiths_expect_fail.cc
+++ /dev/null
@@ -1,21 +0,0 @@
-// Checks --experimental_drop_instantiation_independent_data.
-template <typename T> class C {
-//- @int ref TInt
-//- WInt=@int ref/implicit TInt
-//- WIField=@ifield defines/binding PTField
-//- WInt childof/context CInst
-//- WIField childof/context CInst
-//- ZInt=@int ref/implicit TInt
-//- ZIField=@ifield defines/binding OPTField
-//- ZInt childof/context DInst
-//- ZIField childof/context DInst
-//- CInst specializes TAppCShort
-//- DInst specializes TAppCInt
-//- TAppCShort param.1 TShort
-//- TAppCInt param.1 TInt
-  int ifield;
-};
-//- @short ref TShort
-short s;
-template class C<short>;
-template class C<int>;
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_exclude.cc b/kythe/cxx/indexer/cxx/testdata/template/template_exclude.cc
deleted file mode 100644
index c72f4c41b..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_exclude.cc
+++ /dev/null
@@ -1,50 +0,0 @@
-#include "exclude_this_file.h"
-#include "include_this_file.h"
-
-//- @inc defines/binding VarInc
-Included<int> inc;
-//- @exc defines/binding VarExc
-Excluded<int> exc;
-
-//- VarInc typed TAppIncInt
-//- TAppIncInt.node/kind tapp
-//- TAppIncInt param.0 _TemplateIncluded
-//- _ImpInc instantiates TAppIncInt
-
-//- VarExc typed TAppExcInt
-//- TAppExcInt.node/kind tapp
-//- TAppExcInt param.0 _TemplateExcluded
-//- !{_ImpExc instantiates TAppExcInt}
-
-INC_MACRO
-EXC_MACRO
-
-//- @inc_macro defines/binding VarIncMacro
-IncludedMacro<int> inc_macro;
-//- @exc_macro defines/binding VarExcMacro
-ExcludedMacro<int> exc_macro;
-
-//- VarIncMacro typed TAppIncMacroInt
-//- TAppIncMacroInt.node/kind tapp
-//- TAppIncMacroInt param.0 _TemplateIncludedMacro
-//- _ImpMacroInc instantiates TAppIncMacroInt
-
-//- VarExcMacro typed TAppExcMacroInt
-//- TAppExcMacroInt.node/kind tapp
-//- TAppExcMacroInt param.0 _TemplateExcludedMacro
-//- !{_ExcMacroInc instantiates TAppExcMacroInt}
-
-void f() {
-  //- @IF ref IncFun
-  IF(1);
-  //- @EF ref ExcFun
-  EF(1);
-}
-
-//- _ImpIncFun instantiates IncFun
-//- !{_ImpExcFun instantiates ExcFun}
-
-//- @inc_var ref _IncVar
-int x = inc_var<int>;
-//- @exc_var ref _ExcVar
-int y = exc_var<int>;
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_field.cc b/kythe/cxx/indexer/cxx/testdata/template/template_field.cc
deleted file mode 100644
index 20ba868b1..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_field.cc
+++ /dev/null
@@ -1,14 +0,0 @@
-// Checks that we index references to member variables of templates.
-//- @f defines/binding PField
-//- @S defines/binding SAbs
-//- SBody childof SAbs
-//- SBody.node/kind record
-//- PField childof SBody
-template <typename T> struct S { int f; };
-//- @t_int defines/binding TInt
-//- TInt typed SInt
-S<int> t_int;
-//- @f ref Field
-//- Field childof SIntImp
-//- SIntImp specializes SInt
-int i = t_int.f;
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_file_call.cc b/kythe/cxx/indexer/cxx/testdata/template/template_file_call.cc
deleted file mode 100644
index 9363004f7..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_file_call.cc
+++ /dev/null
@@ -1,21 +0,0 @@
-// Top-level function calls are blamed on files.
-template<class T, T v>
-struct constant {
-  static constexpr T value = v;
-};
-
-//- @foo defines/binding FooFn
-constexpr int foo() { return 1; }
-
-//- @foo ref FooFn
-//- Anchor=@"foo()" ref/call FooFn
-//- Anchor childof FooInit
-constant<int, foo()> n;
-
-//- FooInit code FooCode
-//- FooCode.kind "IDENTIFIER"
-//- FooCode.pre_text
-//-     Path="kythe/cxx/indexer/cxx/testdata/template/template_file_call.cc"
-//- FooInit.node/kind function
-//- FooInit.subkind initializer
-//- vname(_,_,_,Path,_) defines/binding FooInit
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_fn_call.cc b/kythe/cxx/indexer/cxx/testdata/template/template_fn_call.cc
deleted file mode 100644
index d4f4abf03..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_fn_call.cc
+++ /dev/null
@@ -1,9 +0,0 @@
-template <typename T> void f() {}
-
-//- @"A" defines/binding ClsA
-struct A {};
-
-void g() {
-  //- @"A" ref ClsA
-  f<A>();
-}
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_fn_decl.cc b/kythe/cxx/indexer/cxx/testdata/template/template_fn_decl.cc
deleted file mode 100644
index 97e6c2b09..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_fn_decl.cc
+++ /dev/null
@@ -1,9 +0,0 @@
-// Tests basic support for function template declarations.
-template <typename T>
-T
-//- @id defines/binding Abs
-id(T x);
-//- Abs.node/kind abs
-//- IdDecl childof Abs
-//- IdDecl.node/kind function
-//- IdDecl.complete incomplete
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_fn_decl_defn.cc b/kythe/cxx/indexer/cxx/testdata/template/template_fn_decl_defn.cc
deleted file mode 100644
index f9f3afa17..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_fn_decl_defn.cc
+++ /dev/null
@@ -1,20 +0,0 @@
-// Tests basic support for function template declarations and definitions.
-template <typename T>
-T
-//- @id defines/binding AbsDecl
-id(T x);
-
-template <typename T>
-T
-//- @id defines/binding AbsDefn
-//- @id completes/uniquely AbsDecl
-id(T x)
-{ return x; }
-//- AbsDecl.node/kind abs
-//- AbsDefn.node/kind abs
-//- Decl childof AbsDecl
-//- Defn childof AbsDefn
-//- Decl.node/kind function
-//- Defn.node/kind function
-//- Decl.complete incomplete
-//- Defn.complete definition
\ No newline at end of file
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_fn_defines.cc b/kythe/cxx/indexer/cxx/testdata/template/template_fn_defines.cc
deleted file mode 100644
index f717e90a0..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_fn_defines.cc
+++ /dev/null
@@ -1,25 +0,0 @@
-// Full definition ranges for function templates are recorded.
-
-//- @"template <typename T> void f(T t) { }" defines TFnF
-//- @f defines/binding TFnF
-template <typename T> void f(T t) { }
-
-//- @f defines/binding TFnFTS
-//- @"template <> void f(int t) { }" defines TFnFTS
-template <> void f(int t) { }
-
-//- @f defines/binding TFnFPS
-//- @"template <typename S> void f(S* s) { }" defines TFnFPS
-template <typename S> void f(S* s) { }
-
-class C {
-  //- @f defines/binding TMFn
-  //- @"template <typename T> void f(T t) { }" defines TMFn
-  template <typename T> void f(T t) { }
-
-  template <typename T> void g();
-};
-
-//- @g defines/binding TMFnExt
-//- @"template <typename T> void C::g() { }" defines TMFnExt
-template <typename T> void C::g() { }
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_fn_defn.cc b/kythe/cxx/indexer/cxx/testdata/template/template_fn_defn.cc
deleted file mode 100644
index 63edd14e5..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_fn_defn.cc
+++ /dev/null
@@ -1,17 +0,0 @@
-// Tests basic support for function templates.
-//- @T defines/binding TyvarT
-//- TyvarT.node/kind absvar
-template <typename T>
-T
-//- @id defines/binding Abs
-id(T x)
-{ return x; }
-//- Abs.node/kind abs
-//- IdFun childof Abs
-//- IdFun.node/kind function
-//- IdFun.complete definition
-//- Abs param.0 TyvarT
-//- IdFun typed IdFunT
-//- IdFunT.node/kind tapp
-//- IdFunT param.1 TyvarT
-//- IdFunT param.2 TyvarT
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_fn_dependent_spec_defn.cc b/kythe/cxx/indexer/cxx/testdata/template/template_fn_dependent_spec_defn.cc
deleted file mode 100644
index 93e6503f2..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_fn_dependent_spec_defn.cc
+++ /dev/null
@@ -1,14 +0,0 @@
-// Checks indexing refs and defs of dependent function specializations.
-//- @f defines/binding AbsF
-template <typename S> long f(S s) { return 0; }
-template <typename T> struct S {
-  friend
-  //- @f defines/binding DepSpecFT
-  //- DepSpecFT specializes/speculative TAppAbsFT
-  //- TAppAbsFT param.0 AbsF
-  //- TAppAbsFT param.1 BuiltinInt
-  //- TAppAbsFT param.2 BuiltinShort
-  //- @int ref BuiltinInt
-  //- @short ref BuiltinShort
-  long f<int, short>(T t) { return 1; }
-};
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_fn_explicit_spec_completes.cc b/kythe/cxx/indexer/cxx/testdata/template/template_fn_explicit_spec_completes.cc
deleted file mode 100644
index 2c30b8c9a..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_fn_explicit_spec_completes.cc
+++ /dev/null
@@ -1,10 +0,0 @@
-// Checks that we get completion edges for explicit function template specs.
-template <typename T> T id(T x);
-//- @id defines/binding Decl1
-template <> int id(int x);
-//- @id defines/binding Defn
-//- @id completes/uniquely Decl2
-//- @id completes/uniquely Decl1
-template <> int id(int x) { return x; }
-//- @id defines/binding Decl2
-template <> int id(int x);
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_fn_explicit_spec_with_default_completes.cc b/kythe/cxx/indexer/cxx/testdata/template/template_fn_explicit_spec_with_default_completes.cc
deleted file mode 100644
index 3a958c342..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_fn_explicit_spec_with_default_completes.cc
+++ /dev/null
@@ -1,18 +0,0 @@
-// Checks that we get completion edges for explicit function template specs.
-//- @id defines/binding PrimDecl
-template <typename T> T id(T x);
-//- @id defines/binding Decl1
-template <> int id(int x);
-//- @id defines/binding PrimDefn
-//- @id completes/uniquely PrimDecl
-template <typename T> T id (T x) { }
-//- @id defines/binding Defn
-//- @id completes/uniquely Decl2
-//- @id completes/uniquely Decl1
-template <> int id(int x) { return x; }
-//- @id defines/binding Decl2
-template <> int id(int x);
-//- Decl2 specializes TAppPrimDecl
-//- Decl1 specializes TAppPrimDecl
-//- Defn specializes TAppPrimDecl
-//- TAppPrimDecl param.0 PrimDecl
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_fn_implicit_spec.cc b/kythe/cxx/indexer/cxx/testdata/template/template_fn_implicit_spec.cc
deleted file mode 100644
index c38d81467..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_fn_implicit_spec.cc
+++ /dev/null
@@ -1,11 +0,0 @@
-// Tests support for implicit specializations of function templates.
-//- @id defines/binding AbsId
-template <typename T> T id(T x) { return x; }
-//- @id ref TAppAbsInt
-int y = id(42);
-//- SpecId.node/kind function
-//- SpecId specializes TAppAbsInt
-//- TAppAbsInt.node/kind tapp
-//- TAppAbsInt param.0 AbsId
-//- AbsId.node/kind abs
-//- TAppAbsInt param.1 vname("int#builtin",_,_,_,_)
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_fn_inst_vs_spec.cc b/kythe/cxx/indexer/cxx/testdata/template/template_fn_inst_vs_spec.cc
deleted file mode 100644
index c327f4cd7..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_fn_inst_vs_spec.cc
+++ /dev/null
@@ -1,22 +0,0 @@
-// Checks that instantiates/specializes are applied to function templates.
-// Note that function template partial specialization is not allowed. We will
-// still see instantiates edges, but they will point to either the primary
-// template or to the total specialization used.
-
-//- @f defines/binding PrimaryF
-template <typename T> bool f(T* arg);
-//- @f defines/binding TotalF
-template <> bool f(int* arg);
-
-//- @f ref TotalF
-//- TotalF specializes PrimaryFInt
-//- TotalF instantiates PrimaryFInt
-//- PrimaryFInt param.0 PrimaryF
-bool t = f((int*)nullptr);
-
-//- @f ref PrimaryFDouble
-//- ImpPrimaryFDouble.node/kind function
-//- ImpPrimaryFDouble specializes PrimaryFDouble
-//- ImpPrimaryFDouble instantiates PrimaryFDouble
-//- PrimaryFDouble param.0 PrimaryF
-bool s = f((double*)nullptr);
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_fn_member_spec_defn.cc b/kythe/cxx/indexer/cxx/testdata/template/template_fn_member_spec_defn.cc
deleted file mode 100644
index 4b7d973fb..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_fn_member_spec_defn.cc
+++ /dev/null
@@ -1,19 +0,0 @@
-// Checks indexing refs and defs of member function specializations.
-//- @S defines/binding AbsS
-//- @f defines/binding FnF
-template <typename T> struct S { int f() { return 0; } };
-
-int q() {
-  //- @s defines/binding VarS
-  //- VarS typed TAppAbsSInt
-  //- TAppAbsSInt param.0 AbsS
-  S<int> s;
-  //- @f ref UnaryTAppF  // Until we index the full type context: #1879
-  //- UnaryTAppF.node/kind tapp
-  //- UnaryTAppF param.0 FnF
-  //- FnFImp instantiates UnaryTAppF
-  //- SInstInt specializes TAppAbsSInt
-  //- FnFImp childof SInstInt
-  //- @"s.f()" ref/call UnaryTAppF
-  return s.f();
-}
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_fn_multi_decl_def.cc b/kythe/cxx/indexer/cxx/testdata/template/template_fn_multi_decl_def.cc
deleted file mode 100644
index 1926240c2..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_fn_multi_decl_def.cc
+++ /dev/null
@@ -1,9 +0,0 @@
-// Checks that we index function templates with mutliple forward declarations.
-//- @f defines/binding Decl1
-template <typename T> void f();
-//- @f defines/binding Decl2
-template <typename T> void f();
-//- @f defines/binding Defn
-//- @f completes/uniquely Decl1
-//- @f completes/uniquely Decl2
-template <typename T> void f() { }
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_fn_multiple_implicit_spec.cc b/kythe/cxx/indexer/cxx/testdata/template/template_fn_multiple_implicit_spec.cc
deleted file mode 100644
index 8305a465a..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_fn_multiple_implicit_spec.cc
+++ /dev/null
@@ -1,15 +0,0 @@
-// Tests support for implicit specializations of function templates.
-//- @id defines/binding AbsId
-template <typename T> T id(T x) { return x; }
-//- @id ref TAppAbsIdInt
-int y = id(42);
-//- @id ref TAppAbsIdFloat
-float z = id(42.0f);
-//- IntSpecId specializes TAppAbsIdInt
-//- IntSpecId.node/kind function
-//- FloatSpecId specializes TAppAbsIdFloat
-//- FloatSpecId.node/kind function
-//- TAppAbsIdInt param.0 AbsId
-//- TAppAbsIdInt param.1 vname("int#builtin",_,_,_,_)
-//- TAppAbsIdFloat param.0 AbsId
-//- TAppAbsIdFloat param.1 vname("float#builtin",_,_,_,_)
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_fn_overload.cc b/kythe/cxx/indexer/cxx/testdata/template/template_fn_overload.cc
deleted file mode 100644
index b6aa4c54d..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_fn_overload.cc
+++ /dev/null
@@ -1,16 +0,0 @@
-// Tests overloads of template functions.
-//- @T defines/binding FNoPtrT
-template <typename T>
-//- @f defines/binding FNoPtr
-void f(T t) { }
-//- @T defines/binding FPtrT
-template <typename T>
-//- @f defines/binding FPtr
-void f(T* t) { }
-//- FNoPtrFn childof FNoPtr
-//- FPtrFn childof FPtr
-//- FNoPtrFn typed TAppFnT
-//- TAppFnT param.2 FNoPtrT
-//- FPtrFn typed TAppFnTPtr
-//- TAppFnTPtr param.2 FPtrTTy
-//- FPtrTTy param.1 FPtrT
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_fn_spec.cc b/kythe/cxx/indexer/cxx/testdata/template/template_fn_spec.cc
deleted file mode 100644
index 845cf6c65..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_fn_spec.cc
+++ /dev/null
@@ -1,10 +0,0 @@
-// Tests explicit specialization of function templates.
-// Note that function templates do not support partial specialization.
-//- @id defines/binding PrimaryTemplate
-template <typename T> T id(T x) { return T(); }
-//- @id defines/binding SpecTemplate
-template <> int id(int x) { return x; }
-//- SpecTemplate specializes TAppPTInt
-//- TAppPTInt.node/kind tapp
-//- TAppPTInt param.0 PrimaryTemplate
-//- TAppPTInt param.1 vname("int#builtin",_,_,_,_)
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_fn_spec_decl.cc b/kythe/cxx/indexer/cxx/testdata/template/template_fn_spec_decl.cc
deleted file mode 100644
index ce04b36c2..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_fn_spec_decl.cc
+++ /dev/null
@@ -1,13 +0,0 @@
-// Tests that declarations of template specializations are recorded.
-//- @id defines/binding IdDecl
-template <typename T> T id(T x);
-//- @id defines/binding IdSpecDecl
-//- IdSpecDecl specializes TApp
-//- TApp param.0 IdDecl
-template <> int id(int x);
-//- @id defines/binding IdDecl2
-template <typename T> T id(T x);
-//- @id defines/binding IdSpecDecl2
-//- IdSpecDecl2 specializes TApp2
-//- TApp2 param.0 IdDecl
-template <> int id(int x);
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_fn_spec_defn_decl.cc b/kythe/cxx/indexer/cxx/testdata/template/template_fn_spec_defn_decl.cc
deleted file mode 100644
index bd6860ce6..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_fn_spec_defn_decl.cc
+++ /dev/null
@@ -1,10 +0,0 @@
-// Tests explicit specialization of function templates with defns and decls.
-//- @id defines/binding IdDecl
-template <typename T> T id(T x);
-//- @id defines/binding IdSpecDefn
-template <> int id(int x) { return x; }
-//- @id defines/binding IdDefn
-template <typename T> T id(T x) { return T(); }
-//- IdSpecDefn specializes TAppDefn
-//- TAppDefn.node/kind tapp
-//- TAppDefn param.0 IdDecl
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_fn_spec_defn_defn_decl_decl.cc b/kythe/cxx/indexer/cxx/testdata/template/template_fn_spec_defn_defn_decl_decl.cc
deleted file mode 100644
index c19fa35ba..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_fn_spec_defn_defn_decl_decl.cc
+++ /dev/null
@@ -1,15 +0,0 @@
-// The choice of which defn/decl to associate with is arbitrary. In reality,
-// it is defined by the implementation, but it's useful to check if this
-// changes.
-//- @id defines/binding IdDecl
-template <typename T> T id(T x);
-//- @id defines/binding IdSpecDefn
-//- IdSpecDefn specializes TAppIdSpecDefnInt
-template <> int id(int x) { return x; }
-//- @id defines/binding IdDecl2
-template <typename T> T id(T x);
-//- @id defines/binding IdSpecDefn2
-//- IdSpecDefn2 specializes TAppIdSpecDefnFloat
-template <> float id(float x) { return x; }
-//- TAppIdSpecDefnInt param.0 IdDecl
-//- TAppIdSpecDefnFloat param.0 IdDecl
\ No newline at end of file
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_fn_spec_overload.cc b/kythe/cxx/indexer/cxx/testdata/template/template_fn_spec_overload.cc
deleted file mode 100644
index 3ed20d355..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_fn_spec_overload.cc
+++ /dev/null
@@ -1,10 +0,0 @@
-// Tests the combination of overloading and specialization on function
-// templates.
-//- @f defines/binding FnF
-template <typename T> void f(T t) { }
-//- @f defines/binding FnFInt
-template <> void f(int) { }
-//- @f defines/binding FnFPtr
-template <typename T> void f(T* t) { }
-//- FnFInt specializes TAppFnF
-//- TAppFnF param.0 FnF
\ No newline at end of file
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_fold_expressions.cc b/kythe/cxx/indexer/cxx/testdata/template/template_fold_expressions.cc
deleted file mode 100644
index f25e8791b..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_fold_expressions.cc
+++ /dev/null
@@ -1,10 +0,0 @@
-// Verify that we parse and reference templates with C++17 fold expressions.
-
-//- @Args defines/binding ArgsParam
-template <typename... Args>
-//- @Args ref ArgsParam
-//- @args defines/binding ArgsVar
-auto Sum(Args... args){
-  //- @args ref ArgsVar
-  return (args + ...);
-}
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_incomplete_array.cc b/kythe/cxx/indexer/cxx/testdata/template/template_incomplete_array.cc
deleted file mode 100644
index 26cd85930..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_incomplete_array.cc
+++ /dev/null
@@ -1,10 +0,0 @@
-// We don't fall over on incomplete arrays.
-//- @T defines/binding TyvarT
-template<typename T> struct A {
-//- @R defines/binding FieldR
-  T R[];
-};
-//- FieldR typed TAppIArrT
-//- TAppDArrIntExpr.node/kind tapp
-//- TAppDArrIntExpr param.0 vname("iarr#builtin",_,_,_,_)
-//- TAppDArrIntExpr param.1 TyvarT
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_instance_type_from_class.cc b/kythe/cxx/indexer/cxx/testdata/template/template_instance_type_from_class.cc
deleted file mode 100644
index 474b0dab6..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_instance_type_from_class.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Checks the representation of types from template instantiations.
-template
-<typename X>
-struct C {
-using T = typename X::Y;
-};
-struct D { using Y = int; };
-using S = C<D>::T;
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_multilevel_argument.cc b/kythe/cxx/indexer/cxx/testdata/template/template_multilevel_argument.cc
deleted file mode 100644
index a88adb2ce..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_multilevel_argument.cc
+++ /dev/null
@@ -1,12 +0,0 @@
-// Tests the behavior of multiple levels of template arguments.
-//- @T defines/binding AbsT
-template <typename T>
-struct X {
-//- @S defines/binding AbsS
-  template<typename S>
-  struct Y {
-//- @U defines/binding AliasU
-    using U = T;
-  };
-};
-//- AliasU aliases AbsT
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_nested_name.cc b/kythe/cxx/indexer/cxx/testdata/template/template_nested_name.cc
deleted file mode 100644
index eb1f49631..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_nested_name.cc
+++ /dev/null
@@ -1,24 +0,0 @@
-// We emit references to nodes in nested names.
-template <typename T>
-//- @S defines/binding AbsS
-struct S {
-  static T x;
-  template <typename U>
-//- @V defines/binding AbsV
-  struct V {
-    static U y;
-  };
-};
-
-//- @S ref SInt
-//- @V ref VFloat
-//- @int ref Int
-//- @float ref Float
-double z = S<int>::V<float>::y;
-
-// Interestingly, we don't get the definition of V here:
-//- SInt instantiates AppSInt
-//- VFloat instantiates AppVFloat
-//- AppSInt param.0 AbsS
-//- AppVFloat param.0 NominalV
-//- NominalV.node/kind tnominal
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_pack_fn_decl.cc b/kythe/cxx/indexer/cxx/testdata/template/template_pack_fn_decl.cc
deleted file mode 100644
index 3c7b6ff6d..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_pack_fn_decl.cc
+++ /dev/null
@@ -1,7 +0,0 @@
-// We index function template declarations with parameter pack arguments.
-//- @Ts defines/binding PackAbsvar
-template <typename... Ts>
-//- @Ts ref PackAbsvar
-//- @ts defines/binding PackParam
-//- PackParam typed PackAbsvar
-void f(Ts... ts) { }
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_pack_fn_mono_call.cc b/kythe/cxx/indexer/cxx/testdata/template/template_pack_fn_mono_call.cc
deleted file mode 100644
index 5a88ebdeb..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_pack_fn_mono_call.cc
+++ /dev/null
@@ -1,22 +0,0 @@
-// We index calls to function templates with parameter pack arguments.
-template <typename... Ts>
-//- @f defines/binding FnTF
-void f(Ts... ts) { }
-
-void g() {
-//- @f ref AppFnTFSigma
-  f(1, "one");
-}
-
-//- @cc defines/binding CC CC typed String
-const char *cc;
-//- @tn defines/binding TN TN typed Int
-int tn;
-
-//- FnF instantiates AppFnTFSigma
-//- FnF.node/kind function
-//- AppFnTFSigma param.0 FnTF
-//- AppFnTFSigma param.1 Sigma
-//- Sigma.node/kind tsigma
-//- Sigma param.0 Int
-//- Sigma param.1 String
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_pack_fn_pack_call.cc b/kythe/cxx/indexer/cxx/testdata/template/template_pack_fn_pack_call.cc
deleted file mode 100644
index 7f17b306e..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_pack_fn_pack_call.cc
+++ /dev/null
@@ -1,18 +0,0 @@
-// We index calls to function templates with parameter pack arguments.
-
-//- @Ts defines/binding FTs
-template <typename... Ts>
-//- @S defines/binding AbsS
-void S(Ts... ts);
-
-//- @Ts defines/binding GTs
-template <typename... Ts>
-//- @g defines/binding AbsG
-//- FnTG childof AbsG
-void g(Ts... ts) {
-  //- SCall childof FnTG
-  //- SCall ref/call LookupS
-  auto s = S<Ts...>(ts...);
-}
-
-//- LookupS.text "S<Ts...>"
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_pack_rec_pack_call.cc b/kythe/cxx/indexer/cxx/testdata/template/template_pack_rec_pack_call.cc
deleted file mode 100644
index 429b8d82e..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_pack_rec_pack_call.cc
+++ /dev/null
@@ -1,24 +0,0 @@
-// We index calls to ctors of class templates with parameter pack arguments.
-
-//- @Ts defines/binding FTs
-template <typename... Ts>
-//- @S defines/binding AbsS
-struct S {
-  S(Ts... ts);
-};
-
-//- @Ts defines/binding GTs
-template <typename... Ts>
-//- @g defines/binding AbsG
-//- FnTG childof AbsG
-void g(Ts... ts) {
-  //- CtorCall ref/call CtorLookup
-  //- CtorCall childof FnTG
-  auto s = S<Ts...>(ts...);
-}
-
-//- CtorLookup.node/kind lookup
-//- CtorLookup.text "#ctor"
-//- CtorLookup param.0 TAppAbsSTs
-//- TAppAbsSTs param.0 AbsS
-//- TAppAbsSTs param.1 GTs
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_ps_completes.cc b/kythe/cxx/indexer/cxx/testdata/template/template_ps_completes.cc
deleted file mode 100644
index 79626c7f6..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_ps_completes.cc
+++ /dev/null
@@ -1,17 +0,0 @@
-// Checks that completion edges are properly recorded for specializations.
-
-//- @C defines/binding TemplateTS
-template <typename T, typename S> class C;
-//- @C defines/binding TemplateT
-template <typename T> class C<int, T>;
-//- @C defines/binding Template
-template <> class C<int, float>;
-
-//- @C completes/uniquely TemplateTS
-template <typename T, typename S> class C { };
-
-//- @C completes/uniquely TemplateT
-template <typename T> class C<int, T> { };
-
-//- @C completes/uniquely Template
-template <> class C<int, float> { };
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_ps_decl.cc b/kythe/cxx/indexer/cxx/testdata/template/template_ps_decl.cc
deleted file mode 100644
index af21ecfd8..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_ps_decl.cc
+++ /dev/null
@@ -1,20 +0,0 @@
-// Checks that single-variable specialization decls are recorded.
-template
-<typename T>
-//- @C defines/binding CDecl
-class C;
-
-template
-<>
-//- @C defines/binding PCDecl
-class C
-<int>;
-
-//- PCDecl specializes TAppNomCInt
-//- TAppNomCInt.node/kind tapp
-//- TAppNomCInt param.0 NominalC
-//- IncompleteC childof CDecl
-//- IncompleteC.node/kind record
-//- IncompleteC.complete incomplete
-//- PCDecl.node/kind record
-//- PCDecl.complete incomplete
\ No newline at end of file
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_ps_defn.cc b/kythe/cxx/indexer/cxx/testdata/template/template_ps_defn.cc
deleted file mode 100644
index 4e7bb0419..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_ps_defn.cc
+++ /dev/null
@@ -1,24 +0,0 @@
-// Checks that declarations and definitions of templates are distinguished.
-
-//- @C defines/binding FwdTemplate
-template <typename T> class C;
-
-//- @C defines/binding FwdSpec
-template <> class C <int>;
-
-//- @C defines/binding Template
-//- @C completes/uniquely FwdTemplate
-template <typename T> class C { };
-
-//- @C defines/binding Spec
-//- @C completes/uniquely FwdSpec
-template <> class C <int> { };
-
-//- FwdTemplate.node/kind abs
-//- FwdSpec.node/kind record
-//- FwdSpec.complete incomplete
-//- Fwd.node/kind abs
-//- Spec.node/kind record
-//- Spec.complete definition
-//- Spec specializes TAppCInt
-//- FwdSpec specializes TAppCInt
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_ps_multiple_decl.cc b/kythe/cxx/indexer/cxx/testdata/template/template_ps_multiple_decl.cc
deleted file mode 100644
index 09f0af615..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_ps_multiple_decl.cc
+++ /dev/null
@@ -1,26 +0,0 @@
-// Checks that multiple declarations of a partial specialization are recorded.
-template
-<typename T, typename S>
-//- @C defines/binding CDecl
-class C;
-
-template
-//- 
-<typename V>
-//- @C defines/binding CVDecl
-class C
-<int, V>;
-
-template
-<typename W>
-//- @C defines/binding CWDecl
-class C
-<int, W>;
-
-//- CWDecl specializes TAppCNameW
-//- CVDecl specializes TAppCNameV
-//- TAppCNameW.node/kind tapp
-//- TAppCNameV.node/kind tapp
-//- TAppCNameW param.0 NominalC
-//- TAppCNameV param.0 NominalC
-//- NominalC.node/kind tnominal
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_ps_twovar_decl.cc b/kythe/cxx/indexer/cxx/testdata/template/template_ps_twovar_decl.cc
deleted file mode 100644
index 514dac310..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_ps_twovar_decl.cc
+++ /dev/null
@@ -1,18 +0,0 @@
-// Checks that multi-variable partial specialization decls are recorded.
-template
-<typename T, typename S>
-//- @C defines/binding CDecl
-class C;
-
-template
-//- @U defines/binding AbsU
-<typename U>
-//- @C defines/binding PCDecl
-class C
-<int, U>;
-
-//- PCDecl specializes TAppCDeclIntAbsU
-//- TAppCDeclIntAbsU.node/kind tapp
-//- TAppCDeclIntAbsU param.2 AbsU
-//- PCDecl param.0 AbsU
-//- TAppCDeclIntAbsU param.0 CNominal
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_rec_member_abs.cc b/kythe/cxx/indexer/cxx/testdata/template/template_rec_member_abs.cc
deleted file mode 100644
index b1fc7dbd8..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_rec_member_abs.cc
+++ /dev/null
@@ -1,13 +0,0 @@
-// Checks that we don't draw spurious childof edges when aliasing is on.
-template <typename T>
-//- @C defines/binding AbsC
-//- ClassC childof AbsC
-//- @F defines/binding CiF  // aliased.
-//- CiF childof ClassC
-struct C { void F() { } };
-
-//- CiF instantiates TAppCiFNil
-//- TAppCiFNil param.0 CiF
-void g() { C<int> ci; ci.F(); }
-
-//- !{ CiF childof AbsC }  // The bug in question.
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_rec_override.cc b/kythe/cxx/indexer/cxx/testdata/template/template_rec_override.cc
deleted file mode 100644
index cf5839d93..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_rec_override.cc
+++ /dev/null
@@ -1,11 +0,0 @@
-// We index overrides that come from templates.
-// Note that we override C<int>::f, not \T.C<T>::f.
-//- @f defines/binding CF
-//- @C defines/binding TemplateC
-//- CF childof CInstInt
-//- CInstInt instantiates TAppCInt
-//- TAppCInt param.0 TemplateC
-template <typename T> class C { virtual void f() { } };
-//- @f defines/binding DF
-//- DF overrides CF
-class D : public C<int> { void f() override { } };
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_rec_override_root.cc b/kythe/cxx/indexer/cxx/testdata/template/template_rec_override_root.cc
deleted file mode 100644
index fdda37312..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_rec_override_root.cc
+++ /dev/null
@@ -1,17 +0,0 @@
-// We index overrides that come from templates.
-// Note that we override C<int>::f, not \T.C<T>::f.
-//- @f defines/binding CF
-//- @C defines/binding TemplateC
-//- CF childof CInstInt
-//- CInstInt instantiates TAppCInt
-//- TAppCInt param.0 TemplateC
-//- !{CF overrides/root _}
-template <typename T> class C { virtual void f() { } };
-//- @f defines/binding DF
-//- DF overrides CF
-//- DF overrides/root CF
-class D : public C<int> { void f() override { } };
-//- @f defines/binding EF
-//- EF overrides DF
-//- EF overrides/root CF
-class E : public D { void f() override { } };
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_rec_override_root_aliasing.cc b/kythe/cxx/indexer/cxx/testdata/template/template_rec_override_root_aliasing.cc
deleted file mode 100644
index 9628c366e..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_rec_override_root_aliasing.cc
+++ /dev/null
@@ -1,17 +0,0 @@
-// We point at the correct abs nodes in overrides when aliasing is on.
-//- @f defines/binding CF
-//- @C defines/binding TemplateC
-//- ClassC childof TemplateC
-//- CF childof ClassC
-//- !{CF overrides/root _}
-template <typename T> class C { virtual void f() { } };
-//- @f defines/binding DF
-//- DF overrides TAppCF
-//- DF overrides/root TAppCF
-//- TAppCF.node/kind tapp
-//- TAppCF param.0 CF
-class D : public C<int> { void f() override { } };
-//- @f defines/binding EF
-//- EF overrides DF
-//- EF overrides/root TAppCF
-class E : public D { void f() override { } };
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_redundant_constituents_anchored.cc b/kythe/cxx/indexer/cxx/testdata/template/template_redundant_constituents_anchored.cc
deleted file mode 100644
index ade1b42b0..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_redundant_constituents_anchored.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Checks that repeated structured types have their constituents marked.
-template <typename T> class C { };
-//- @D defines/binding ClassD
-class D { };
-//- @D ref ClassD
-C<D> x;
-//- @D ref ClassD
-C<D> y;
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_static_member.cc b/kythe/cxx/indexer/cxx/testdata/template/template_static_member.cc
deleted file mode 100644
index a6b95cfa0..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_static_member.cc
+++ /dev/null
@@ -1,15 +0,0 @@
-// We handle refs to static member function template specs in member expressions
-// Needs -ignore_dups (function pointer type ref is doubly emitted)
-//- @C defines/binding StructC
-struct C { };
-//- @f defines/binding MemberF
-struct S { template <typename T> static int f(void) { return 0; } };
-S s;
-//- @C ref StructC
-//- @f ref TAppFC
-//- @"s.f<C>()" ref/call TAppFC
-//- TAppFC param.0 MemberF
-//- TAppFC param.1 StructC
-//- Imp instantiates TAppFC
-//- Imp.node/kind function
-void qqq() { s.f<C>(); }
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_two_arg_spec.cc b/kythe/cxx/indexer/cxx/testdata/template/template_two_arg_spec.cc
deleted file mode 100644
index 9a1196a9d..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_two_arg_spec.cc
+++ /dev/null
@@ -1,16 +0,0 @@
-// Checks that record nodes underneath abstractions are given distinct names.
-// (This test's verifier load is mainly in the well-formedness checks.)
-
-//- @C defines/binding TemplateC
-//- TemplateC.node/kind abs
-//- TemplaceCBody childof TemplateC
-//- TemplaceCBody.node/kind record
-template <typename T, typename S> class C { };
-
-//- @C defines/binding PartialSpecializationC
-//- PartialSpecializationC.node/kind abs
-template <typename U> class C<int, U> { };
-
-//- @C defines/binding TotalSpecializationC
-//- TotalSpecializationC.node/kind record
-template <> class C<int, float> { };
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_ty_typename.cc b/kythe/cxx/indexer/cxx/testdata/template/template_ty_typename.cc
deleted file mode 100644
index 90d487a7b..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_ty_typename.cc
+++ /dev/null
@@ -1,8 +0,0 @@
-// Checks that typename template parameters are properly recorded.
-template
-//- @X defines/binding AbsvX
-<typename X>
-//- @C defines/binding Abs
-class C {};
-//- Abs param.0 AbsvX
-//- AbsvX.node/kind absvar
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_type_alias_param.cc b/kythe/cxx/indexer/cxx/testdata/template/template_type_alias_param.cc
deleted file mode 100644
index e460b2379..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_type_alias_param.cc
+++ /dev/null
@@ -1,7 +0,0 @@
-// Checks that we don't fall over on type alias type parameters.
-
-template <typename T>
-struct tstruct {};
-
-template <typename T>
-using alias = typename tstruct<T>::type;
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_unresolved_ctor_expr.cc b/kythe/cxx/indexer/cxx/testdata/template/template_unresolved_ctor_expr.cc
deleted file mode 100644
index 4191d2729..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_unresolved_ctor_expr.cc
+++ /dev/null
@@ -1,15 +0,0 @@
-// Checks that we handle type-dependent maybe-ctor callish sites.
-//   see also CXXUnresolvedConstructExpr.
-//- @T defines/binding TyvarT
-template<typename T, typename A1>
-//- @make_a defines/binding AbsMakeA
-//- MakeA childof AbsMakeA
-//- MakeA.node/kind function
-inline T make_a(const A1& a1) {
-  //- CallAnchor=@"T(a1)" ref/call LookupCtorT
-  //- CallAnchor childof MakeA
-  //- LookupCtorT.node/kind lookup
-  //- LookupCtorT.text "#ctor"
-  //- LookupCtorT param.0 TyvarT
-  return T(a1);
-}
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_using_pack_expansion.cc b/kythe/cxx/indexer/cxx/testdata/template/template_using_pack_expansion.cc
deleted file mode 100644
index 257c07d88..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_using_pack_expansion.cc
+++ /dev/null
@@ -1,28 +0,0 @@
-// Verify that we emit references for C++17 pack expansion using declarations.
-
-struct A {
-  //- @Call defines/binding ACallFn
-  void Call(const A&);
-};
-
-struct B {
-  //- @Call defines/binding BCallFn
-  void Call(const B&);
-};
-
-template <typename... Ts>
-struct S : Ts... {
-  //- @Call ref/implicit ACallFn
-  //- @Call ref/implicit BCallFn
-  using Ts::Call...;
-};
-
-void f() {
-  S<A, B> c;
-  //- @Call ref ACallFn
-  //- @"c.Call(A{})" ref/call ACallFn
-  c.Call(A{});
-  //- @Call ref BCallFn
-  //- @"c.Call(B{})" ref/call BCallFn
-  c.Call(B{});
-}
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_var_constexpr.cc b/kythe/cxx/indexer/cxx/testdata/template/template_var_constexpr.cc
deleted file mode 100644
index d9a1672c3..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_var_constexpr.cc
+++ /dev/null
@@ -1,13 +0,0 @@
-// We index constexpr variable templates.
-//- VariableTemplate defines/binding VTAbs
-//- VTAbs.node/kind abs
-template <typename T> constexpr T VariableTemplate{};
-//- @VariableTemplate ref VTVar
-//- @auto ref IntBuiltin
-auto TemplateValue = VariableTemplate<int>;
-//- TApp.node/kind tapp
-//- TApp param.0 VTAbs
-//- TApp param.1 IntBuiltin
-//- VTVar.node/kind variable
-//- VTVar instantiates TApp
-//- VTVar specializes TApp
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_var_decl.cc b/kythe/cxx/indexer/cxx/testdata/template/template_var_decl.cc
deleted file mode 100644
index 0ca9dfed0..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_var_decl.cc
+++ /dev/null
@@ -1,11 +0,0 @@
-// Checks that we index decls of variable templates.
-//- @T defines/binding TyvarT
-template <typename T>
-//- @T ref TyvarT
-//- @y defines/binding VarY
-extern T y;
-//- VarY.node/kind abs
-//- VarYBody childof VarY
-//- VarYBody.node/kind variable
-//- VarYBody typed TyvarT
-//- VarYBody.complete incomplete
\ No newline at end of file
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_var_defn.cc b/kythe/cxx/indexer/cxx/testdata/template/template_var_defn.cc
deleted file mode 100644
index 3f25b98ca..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_var_defn.cc
+++ /dev/null
@@ -1,11 +0,0 @@
-// Checks that we index defns of variable templates.
-//- @T defines/binding TyvarT
-template <typename T>
-//- @T ref TyvarT
-//- @y defines/binding VarY
-T y;
-//- VarY.node/kind abs
-//- VarYBody childof VarY
-//- VarYBody.node/kind variable
-//- VarYBody typed TyvarT
-//- VarYBody.complete definition
\ No newline at end of file
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_var_defn_completes.cc b/kythe/cxx/indexer/cxx/testdata/template/template_var_defn_completes.cc
deleted file mode 100644
index 83b215b6a..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_var_defn_completes.cc
+++ /dev/null
@@ -1,5 +0,0 @@
-// Checks that variable template defns complete variable template decls.
-//- @z defines/binding VarZAbsDecl
-template <typename T> extern T z;
-//- @z completes/uniquely VarZAbsDecl
-template <typename T> T z;
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_var_explicit_spec.cc b/kythe/cxx/indexer/cxx/testdata/template/template_var_explicit_spec.cc
deleted file mode 100644
index 071136cd2..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_var_explicit_spec.cc
+++ /dev/null
@@ -1,10 +0,0 @@
-// Tests that we index explicit specializations of template variables.
-//- @v defines/binding PrimaryTemplateV
-template <typename T> T v;
-//- @v defines/binding SpecIntV
-//- SpecIntV specializes AppPTInt
-//- AppPTInt.node/kind tapp
-//- AppPTInt param.0 PrimaryTemplateV
-//- AppPTInt param.1 vname("int#builtin",_,_,_,_)
-template <> int v<int>;
-template <> float v<float>;
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_var_implicit_spec.cc b/kythe/cxx/indexer/cxx/testdata/template/template_var_implicit_spec.cc
deleted file mode 100644
index 1c01bff18..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_var_implicit_spec.cc
+++ /dev/null
@@ -1,10 +0,0 @@
-// Tests that we index implicit specializations of template variables.
-//- @v defines/binding PrimaryTemplateV
-template <typename T> T v;
-//- @v ref SpecIntV
-//- SpecIntV instantiates AppPTInt
-//- SpecIntV specializes AppPTInt
-//- AppPTInt.node/kind tapp
-//- AppPTInt param.0 PrimaryTemplateV
-//- AppPTInt param.1 vname("int#builtin",_,_,_,_)
-int w = v<int>;
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_var_inst_total_spec.cc b/kythe/cxx/indexer/cxx/testdata/template/template_var_inst_total_spec.cc
deleted file mode 100644
index aa2374258..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_var_inst_total_spec.cc
+++ /dev/null
@@ -1,10 +0,0 @@
-// Checks that we correctly record instantiates edges for total specs.
-//- @s_equals_float defines/binding PrimaryT
-template <typename S> bool s_equals_float = false;
-//- @s_equals_float defines/binding TotalT
-template <> bool s_equals_float<float> = true;
-//- @s_equals_float ref TotalT
-//- TotalT instantiates PrimaryTFloat
-//- TotalT specializes PrimaryTFloat
-//- PrimaryTFloat param.0 PrimaryT
-bool is_true = s_equals_float<float>;
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_var_ps.cc b/kythe/cxx/indexer/cxx/testdata/template/template_var_ps.cc
deleted file mode 100644
index af8f4fbe0..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_var_ps.cc
+++ /dev/null
@@ -1,13 +0,0 @@
-// Tests that we index partial specializations of template variables.
-//- @v defines/binding VarV
-template <typename T, typename S> T v;
-//- @U defines/binding TyvarU
-template <typename U>
-//- @v defines/binding VarPSU
-U v<U, int>;
-//- VarPSU.node/kind abs
-//- VarPSU specializes TAppVarV
-//- TAppVarV.node/kind tapp
-//- TAppVarV param.0 VarV
-//- TAppVarV param.1 TyvarU
-//- TAppVarV param.2 vname("int#builtin",_,_,_,_)
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_var_ps_completes.cc b/kythe/cxx/indexer/cxx/testdata/template/template_var_ps_completes.cc
deleted file mode 100644
index 75247a60a..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_var_ps_completes.cc
+++ /dev/null
@@ -1,6 +0,0 @@
-// Checks completion edges for variable template partial specializations.
-template <typename T, typename S> extern T z;
-//- @z defines/binding VarZPsAbsDecl
-template <typename U> extern int z<int, U>;
-//- @z completes/uniquely VarZPsAbsDecl
-template <typename U> int z<int, U>;
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_var_ps_implicit_spec.cc b/kythe/cxx/indexer/cxx/testdata/template/template_var_ps_implicit_spec.cc
deleted file mode 100644
index a84ec7d3e..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_var_ps_implicit_spec.cc
+++ /dev/null
@@ -1,17 +0,0 @@
-// Tests that we index instances of partial specializations of template vars.
-//- @v defines/binding Prim
-template <typename T, typename S, typename V> T v;
-template <typename U>
-//- @v defines/binding Ps
-U v<int, U, long>;
-//- Ps.node/kind abs
-//- @v ref Spec
-float w = v<int, float, long>;
-//- Spec specializes TAppPrim
-//- Spec instantiates TAppPs
-//- TAppPrim param.0 Prim
-//- TAppPrim param.1 vname("int#builtin",_,_,_,_)
-//- TAppPrim param.2 vname("float#builtin",_,_,_,_)
-//- TAppPrim param.3 vname("long#builtin",_,_,_,_)
-//- TAppPs param.0 Ps
-//- TAppPs param.1 vname("float#builtin",_,_,_,_)
diff --git a/kythe/cxx/indexer/cxx/testdata/template/template_var_ref_ps.cc b/kythe/cxx/indexer/cxx/testdata/template/template_var_ref_ps.cc
deleted file mode 100644
index 969bdebfe..000000000
--- a/kythe/cxx/indexer/cxx/testdata/template/template_var_ref_ps.cc
+++ /dev/null
@@ -1,13 +0,0 @@
-/// Tests that references to ps var templates go to the ps and not the primary.
-//- @v defines/binding Primary
-template <typename T, typename S> T v = S();
-//- @v defines/binding Partial
-//- Partial.node/kind abs
-//- @v defines/binding PartialVar
-//- PartialVar.node/kind variable
-template <typename U> U v<U, int> = 3;
-//- @v ref Spec
-int w = v<int,int>;
-//- Spec.node/kind variable
-//- Spec instantiates TAppPartial
-//- TAppPartial param.0 Partial
diff --git a/tools/build_rules/verifier_test/cc_indexer_test.bzl b/tools/build_rules/verifier_test/cc_indexer_test.bzl
index 9dca7adee..522e406db 100644
--- a/tools/build_rules/verifier_test/cc_indexer_test.bzl
+++ b/tools/build_rules/verifier_test/cc_indexer_test.bzl
@@ -70,7 +70,6 @@ _INDEXER_FLAGS = {
     "experimental_drop_objc_fwd_class_docs": False,
     "experimental_guess_proto_semantics": False,
     "experimental_record_dataflow_edges": False,
-    "experimental_use_abs_nodes": True,
     "experimental_usr_byte_size": 0,
     "template_instance_exclude_path_pattern": "",
     "fail_on_unimplemented_builtin": True,
@@ -983,7 +982,7 @@ def cc_extractor_test(
         name = name,
         size = size,
         srcs = srcs,
-        opts = ["--ignore_dups"],
+        opts = ["--ignore_dups", "--ignore_code_conflicts"],
         restricted_to = restricted_to,
         tags = tags,
         deps = deps + [":" + name + "_entries"],