[PATCH] D134685: Fix SourceManager::isBeforeInTranslationUnit bug with token-pasting

Haojian Wu via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Sep 29 00:53:15 PDT 2022


hokein accepted this revision.
hokein added a comment.
This revision is now accepted and ready to land.

Thanks for digging into the rabbit role and the great analysis. It looks good from my side.

Re the test case `ID(I TWO 3)` we discussed yesterday, I verified that there is no issue. (we don't merge the `1 2 3` into a single SLOCEntry, each one have a dedicated FileID, and FileID(2) < FileID(3)).

>> However I tried to avoid mixing these with subtle behavior changes, and will send a followup instead.
>
> D134694 <https://reviews.llvm.org/D134694> if you're interested. I guess I should try to get performance measures though...

While doing the review, I agree that this part of code is unnecessary complicated, I think doing cleanup is probably a good idea.



================
Comment at: clang/lib/Basic/SourceManager.cpp:2108
     // quit early. The other way round unfortunately remains suboptimal.
-  } while (LOffs.first != ROffs.first && !MoveUpIncludeHierarchy(LOffs, *this));
-  LocSet::iterator I;
-  while((I = LChain.find(ROffs.first)) == LChain.end()) {
-    if (MoveUpIncludeHierarchy(ROffs, *this))
-      break; // Met at topmost file.
-  }
-  if (I != LChain.end())
-    LOffs = *I;
+    if (LOffs.first == ROffs.first)
+      break;
----------------
nit:  I found the first/second usage really hurts the code readability here (using the struct `Entry` int all places is probably better, but this requires some changes to the existing interface, no required action here).


================
Comment at: clang/lib/Basic/SourceManager.cpp:2126
+      // This changes the relative order of local vs loaded FileIDs, but it
+      // doesn't matter as these are never mixed in macro expansion.
+      unsigned LParent = I->second.ParentFID.ID;
----------------
maybe add an assertion for "local and load FileIDs  are never mixed".


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D134685/new/

https://reviews.llvm.org/D134685



More information about the cfe-commits mailing list