[PATCH] D69854: [clang-format] [RELAND] Remove the dependency on frontend

Nico Weber via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Nov 6 05:48:55 PST 2019


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

Thanks! One comment (the stale pointer one) and a more general suggestion (potentially for a future change) below, else I think this is good to go.



================
Comment at: clang/tools/clang-format/ClangFormat.cpp:310
   SourceManager Sources(*Diags, Files);
   FileID FileID = createInMemoryFile(AssumedFileName, Code.get(), Sources,
                                      Files, InMemoryFileSystem.get());
----------------
Maybe not for this change, but do you need all this machinery up here? SMDiagnostics takes a pointer and a file name, so yu can just pass Code->getBufferStart() + R.getOffset() for the pointer and you don't need the FileManager, the SourceManager, createInMemoryFile(), the PresumedLoc, translateFileLineCol.

You can either try to use SourceMgr::getLineAndColumn() or compute line/col yourself -- either should be a lot less code than the current machinery here.


================
Comment at: clang/tools/clang-format/ClangFormat.cpp:334
+      SMDiagnostic Diags(
+          llvm::SourceMgr(), SMLoc::getFromPointer(StartBuf), AssumedFileName,
+          PLoc.getLine(), PLoc.getColumn(),
----------------
I think the idea is that you have a llvm::SourceMgr() hanging around (above the loop or somewhere). SMDiagnostic stores a pointer to this argument, and you pass in a temporary. The SourceMgr needs to outlive the Diags object. (In practice, the pointer is not used by anything so it happens to work, but having the object store a stale pointer seems like potential future trouble, and it's easy to prevent -- just put the SourceMgr on the stack).

Also, probably "Diag", not "Diags"?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D69854





More information about the cfe-commits mailing list