Lekensteyn added inline comments.

================
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:
> Lekensteyn wrote:
> > dankm wrote:
> > > dankm wrote:
> > > > 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.
> > > There should be a test, but apparently the debug prefix map code also 
> > > does this.
> > > 
> > > What do you think the correct behaviour should be? a string prefix, or a 
> > > directory prefix?
> > It should be a string prefix (like GCC)
> I disagree. I consider it a bug in GCC that it is a string prefix. It's quite 
> inconsistent as well.
I agree with you, it should have been a directory prefix but GCC implements it 
as a string prefix although the GCC documents it as:
"-fdebug-prefix-map=old=new When compiling files residing in **directory old**, 
record debugging information describing them as if the files resided in 
**directory new** instead."

If you decide to fix `-fmacro-prefix-map` to use a directory prefix match, then 
the `-fdebug-prefix-map` should also be fixed for consistency. What about 
implementing the (buggy) GCC-compatible behavior first and then fixing both 
cases in a future patch? (I don't mind when the buggy behavior is fixed, I just 
want to see this functionality moving forward.)

Another edge case that I ran into is when using the option to drop directories. 
When using `-ffile-prefix-map=/src=`, the command `cd /src && cc /src/foo.c` 
would have `__FILE__` equal to `/foo.c`. As a native "fix", one would try 
`-ffile-prefix-map=/src/=` which indeed produces `__FILE__` equal to `foo.c`.

Matching with a trailing slash however fails to correctly remap some debug 
information, namely `DW_AT_comp_dir`. This contains the working directory 
(`/src`) which is not matched by `/src/`. By using a proper directory prefix 
match, this would be nicely fixed.


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