eaeltsin added a comment.

Looks like our tests fail because ReadFileID doesn't translate file ID as 
ReadSourceLocation/TranslateSourceLocation do. Please see the prototype fix 
inline.



================
Comment at: clang/lib/Serialization/ASTReader.cpp:6343
              "Invalid data, missing pragma diagnostic states");
-      SourceLocation Loc = ReadSourceLocation(F, Record[Idx++]);
-      auto IDAndOffset = SourceMgr.getDecomposedLoc(Loc);
-      assert(IDAndOffset.first.isValid() && "invalid FileID for transition");
-      assert(IDAndOffset.second == 0 && "not a start location for a FileID");
+      FileID FID = ReadFileID(F, Record, Idx);
+      assert(FID.isValid() && "invalid FileID for transition");
----------------
This doesn't work as before, likely because ReadFileID doesn't do 
TranslateSourceLocation.

Our tests fail.

I tried calling TranslateSourceLocation here and the tests passed:
```
      SourceLocation Loc = Diag.SourceMgr->getComposedLoc(FID, 0);
      SourceLocation Loc2 = TranslateSourceLocation(F, Loc);
      auto IDAndOffset = SourceMgr.getDecomposedLoc(Loc2);

      // Note that we don't need to set up Parent/ParentOffset here, because
      // we won't be changing the diagnostic state within imported FileIDs
      // (other than perhaps appending to the main source file, which has no
      // parent).
      auto &F = Diag.DiagStatesByLoc.Files[IDAndOffset.first];
```

Sorry I don't know the codebase, so this fix is definitely ugly :) But it shows 
the problem.



Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D137213

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to