tahonermann added inline comments.
================
Comment at: clang/lib/Frontend/Rewrite/InclusionRewriter.cpp:292-303
     // Output the file one line at a time, rewriting the line endings as we go.
     StringRef Rest = TextToWrite;
     while (!Rest.empty()) {
-      StringRef LineText;
-      std::tie(LineText, Rest) = Rest.split(LocalEOL);
+      size_t Idx = Rest.find(LocalEOL);
+      StringRef LineText = Rest.substr(0, Idx);
       OS << LineText;
-      Line++;
----------------
The issue here was that, when the last line of `TextToWrite` was not empty and 
did not end with `LocalEOL`, `Line` would be incremented at line 298 despite no 
EOL sequence being written at either line 300 or line 303.

The rewrite avoids use of `StringRef::split()` so as to avoid the ambiguity 
created when `Rest` ends with `LocalEOL` (`Rest` ends up empty regardless). I 
think this simplifies the code by removing the need for differentiated handling 
of `EnsureNewLine` in each of the branches of the `if` statement.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D140984

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

Reply via email to