[PATCH] D71508: [DebugInfo] Duplicate file names in debug info

kamlesh kumar via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Dec 16 19:13:08 PST 2019


kamleshbhalui added a comment.

In D71508#1786804 <https://reviews.llvm.org/D71508#1786804>, @dblaikie wrote:

> In D71508#1786212 <https://reviews.llvm.org/D71508#1786212>, @kamleshbhalui wrote:
>
> > In D71508#1786148 <https://reviews.llvm.org/D71508#1786148>, @probinson wrote:
> >
> > > In D71508#1786122 <https://reviews.llvm.org/D71508#1786122>, @kamleshbhalui wrote:
> > >
> > > > In D71508#1785767 <https://reviews.llvm.org/D71508#1785767>, @probinson wrote:
> > > >
> > > > > Do we have a similar problem if the filespec has an embedded ./ or ../ in it?
> > > >
> > > >
> > > > problems  occur only when filespec starts with ./ otherwise it's fine.
> > >
> > >
> > > So do other kinds of paths get canonicalized elsewhere?  I'm thinking if there's already a place that undoes embedded .. then it should handle leading . as well.
> >
> >
> > other canonicalization happens here 
> >  https://github.com/llvm-mirror/clang/blob/master/lib/CodeGen/CGDebugInfo.cpp#L541
> >  and 
> >  https://github.com/llvm-mirror/clang/blob/master/lib/CodeGen/CGDebugInfo.cpp#L441
> >
> > but that does not undo any embedded . and .. anywhere,except leading ./
> >
> > i.e. when we pass like
> >  $clang .././p1.c -S -emit-llvm -g
> >
> > IRGen gives single file entry like this
> >  !1 = !DIFile(filename: ".././p1.c"
> >
> > As you can see path is  not canonicalized but it atleast does not have duplicate file entry.
>
>
> Even if that .c file is referred to by a different path - what about a #include of that .c file (with some #ifdefs to avoid infinite include recursion) by the absolute path, for instance? does that still not end up with duplicate files with two different paths to the same file?


No, that does not happen. Because in that case we create file entry for first time with absolute path and later we always get the same file with getOrCreateFile.

The duplicate File entry only happens with the file passed by driver -main-file-name p1.cc which used  in creating compilation unit. 
https://github.com/llvm-mirror/clang/blob/master/lib/CodeGen/CGDebugInfo.cpp#L518

and while creating debuginfo for variable / function it refers to file by quering getOrCreateFile with relative path specified on commmand line and it sees that there is no such entry and ends up creating new file entry with this path hence duplication.
https://github.com/llvm-mirror/clang/blob/master/lib/CodeGen/CGDebugInfo.cpp#L406

> 
> 
>> 
>> 
>>> Is a leading .. okay or a problem?
>> 
>> yes It's ok in the sense ,it does not create duplicate file entry in debug info.




Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D71508





More information about the cfe-commits mailing list