dankm added inline comments.

================
Comment at: lib/Driver/ToolChains/Clang.cpp:609
 static void addDebugPrefixMapArg(const Driver &D, const ArgList &Args, 
ArgStringList &CmdArgs) {
+  for (const Arg *A : Args.filtered(options::OPT_ffile_prefix_map_EQ)) {
+    StringRef Map = A->getValue();
----------------
joerg wrote:
> I find it confusing that `-ffile_prefix_map` implies `-fdebug-prefix-map`. 
> I'm not sure that is desirable in every case. It seems better to have a 
> combined option that explicitly does both.
-ffile-prefix-map is the combined option. -fmacro-prefix-map is the 
preprocessor option, and -fdebug-prefix-map is the codegen option.


================
Comment at: lib/Driver/ToolChains/Clang.cpp:628
+/// Add a CC1 option to specify the macro file path prefix map.
+static void addMacroPrefixMapArg(const Driver &D, const ArgList &Args, 
ArgStringList &CmdArgs) {
+  for (const Arg *A : Args.filtered(options::OPT_ffile_prefix_map_EQ)) {
----------------
joerg wrote:
> erichkeane wrote:
> > See advice above.
> > 
> > Additionally/alternatively, I wonder if these two functions could be 
> > trivially combined.
> Or at least the for loop could be refactored into a small helper function 
> that takes the option name, output option and error as argument.
Good ideas. I'll look into them.


================
Comment at: lib/Driver/ToolChains/Clang.cpp:1255
+
+  addMacroPrefixMapArg(D, Args, CmdArgs);
 }
----------------
erichkeane wrote:
> Is there a good reason for this to not live with the call to 
> addDebugPrefixMapArg?
Mostly because this is the function that adds preprocessor specific options. 
There's no other reason why it couldn't be done alongside addDebugPrefixMapArg 
in this file.


================
Comment at: lib/Frontend/CompilerInvocation.cpp:2848
 
+  for (const auto &A : Args.getAllArgValues(OPT_fmacro_prefix_map_EQ))
+  {
----------------
erichkeane wrote:
> Again, this is so much like the debug-prefix otpion, it should probably just 
> be right next to it.
> 
> Additionally, we don't use curley brackets on single-line bodies.
This is here because it's a preprocessor option. This function handles those. 
The DebugPrefixMap handling is a codegen option.


================
Comment at: lib/Lex/PPMacroExpansion.cpp:1457
+static std::string remapMacroPath(StringRef Path,
+                           llvm::SmallDenseMap<StringRef,
+                           StringRef> &MacroPrefixMap) {
----------------
erichkeane wrote:
> make MacroPrefixMap const.
I shall.


================
Comment at: lib/Lex/PPMacroExpansion.cpp:1460
+  for (const auto &Entry : MacroPrefixMap)
+    if (Path.startswith(Entry.first))
+      return (Twine(Entry.second) + Path.substr(Entry.first.size())).str();
----------------
joerg wrote:
> This doesn't handle directory vs string prefix prefix correctly, does it? At 
> the very least, it should have a test case :)
Good catch. I expect not. But on the other hand, it's exactly what 
debug-prefix-map does :)

I'll add test cases in a future review. My first goal was getting something 
sort-of working.


================
Comment at: lib/Lex/PPMacroExpansion.cpp:1528
     // Escape this filename.  Turn '\' -> '\\' '"' -> '\"'
-    SmallString<128> FN;
+    std::string FN;
     if (PLoc.isValid()) {
----------------
erichkeane wrote:
> This change shouldn't be necessary, SmallString is still likely the right 
> answer here.
I tried that long ago. It didn't work, I don't remember exactly why. But I 
agree that SmallString should be enough. I'll dig more.


================
Comment at: lib/Lex/Preprocessor.cpp:160
+
+  for (const auto &KV : this->PPOpts->MacroPrefixMap)
+    MacroPrefixMap[KV.first] = KV.second;
----------------
erichkeane wrote:
> I'm unconvinced that this is necessary.  ExpandBuiltinMacro is in 
> Preprocessor, so it has access to PPOpts directly.
It has access to PPOpts, but the implementation file doesn't have a full 
definition of PreprocessorOptions. I could add that to this file, then this 
becomes redundant.


Repository:
  rC Clang

https://reviews.llvm.org/D49466



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

Reply via email to