[PATCH] Handle properly somewhat special cases of -main-file-name
Lubos Lunak
l.lunak at centrum.cz
Fri Apr 4 09:08:36 PDT 2014
On Friday 04 of April 2014, David Blaikie wrote:
> The comment in CGDebugInfo.cpp says that -main-file-name will contain
> only the file name, with no path information. Are there cases where
> that is not true when -main-file-name is passed from the Clang driver,
> rather than by the user in your example below?
>
> If the driver provides this guarantee and the user violates it when
> passing an undocumented flag manually, I don't see a need to support
> it - but if there is such a need, it'd be good to
> understand/documemnt/discuss it.
I think the driver always only passes the filename, but I do pass it
explicitly, since I feed the source from stdin and the source or even its
directory don't exist (distributed compiling, the same way with the patch
for -dwarf-split-file).
And actually case 2) without using the option explicitly results in
DW_AT_name becoming "/-" (I don't know why the driver doesn't simply pass the
name as it is, which wouldn't need the code that attempts to rebuild it
later).
As for "undocumented", the documentation status of the option is about the
same like with many others - it's just in the .td file including its
description. The description says quite clearly what the option does, it
doesn't say it's internal, it works fine (except for these small problems), I
even checked the sources to be sure, and I don't see why Clang should forbid
usage of the option if I know what I'm doing (and would have to resort to
ugly hacks otherwise).
> On Fri, Apr 4, 2014 at 5:02 AM, Lubos Lunak <l.lunak at centrum.cz> wrote:
> > The handling of -main-file-name in CGDebugInfo::CreateCompileUnit() can
> > result in incorrect DW_AT_name in somewhat special cases:
> >
> > 1)
> > $ touch /tmp/a.cpp
> > $
> > clang++ -Wall -c /tmp/a.cpp -g -o /tmp/a.o -Xclang -main-file-name
> > -Xclang /new/path/a.cpp $ readelf -wi /tmp/a.o | grep DW_AT_name
> > <12> DW_AT_name : (indirect string, offset:
> > 0x15): /tmp/new/path/a.cpp
> >
> > 2)
> > $ touch /tmp/a.cpp
> > $ cd /
> > $ cat /tmp/a.cpp | clang++ -Wall -x
> > c++ -c - -g -o /tmp/a.o -Xclang -main-file-name -Xclang a.cpp
> > $ readelf -wi /tmp/a.o | grep DW_AT_name
> > <12> DW_AT_name : (indirect string, offset: 0x15): /a.cpp
> >
> > The attached patch fixes those. Ok to commit?
--
Lubos Lunak
More information about the cfe-commits
mailing list