[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