================
@@ -130,7 +135,18 @@ const Node *getParentOfRootStmts(const Node *CommonAnc) {
   const Node *Parent = nullptr;
   switch (CommonAnc->Selected) {
   case SelectionTree::Selection::Unselected:
-    // Typically a block, with the { and } unselected, could also be ForStmt 
etc
+    // Typically a block, with the { and } unselected, could also be ForStmt
+    // etc. However, CommonAnc may instead be a single statement that is
+    // itself Unselected only because all of its own tokens are claimed by
+    // its children (see isUnselectedRootStmtCandidate); in that case it's a
+    // root statement in its own right, and we need its actual parent, same
+    // as in the Complete case below.
+    if (isUnselectedRootStmtCandidate(CommonAnc)) {
+      Parent = CommonAnc->Parent;
+      if (Parent->ASTNode.get<DeclStmt>())
----------------
timon-ul wrote:

I was a bit confused about this condition until I scrolled down a few lines and 
saw the same statement with a comment. Either you move said comment up and 
refer to it below or you factor it ous as a function (or if you have any other 
nice ideas do it that way), but I think we should not have it where the comment 
comes with the 2nd time this logic is used.

https://github.com/llvm/llvm-project/pull/219945
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to