[llvm-dev] Why LLVM doesn't have debug information of function right parentheses?

Adrian Prantl via llvm-dev llvm-dev at lists.llvm.org
Thu Aug 3 11:39:00 PDT 2017


I should also point out the clang does generate instructions associated with closing curly braces for calls to destructors of stack-allocated C++ objects. Check out test/CodeGenCXX/linetable-cleanup.cpp for examples of this behavior.

-- adrian

> On Aug 3, 2017, at 8:21 AM, Robinson, Paul via llvm-dev <llvm-dev at lists.llvm.org> wrote:
> 
> 
> 
>> -----Original Message-----
>> From: llvm-dev [mailto:llvm-dev-bounces at lists.llvm.org] On Behalf Of Simon
>> Cook via llvm-dev
>> Sent: Thursday, August 03, 2017 11:06 AM
>> To: llvm-dev at lists.llvm.org
>> Subject: Re: [llvm-dev] Why LLVM doesn't have debug information of
>> function right parentheses?
>> 
>> 
>> I have implemented this exact behavior in an out of tree LLVM fork I
>> maintain, where one of my users needed this behavior, and it seems to
>> work well. What we have done is extend the definition of DISubprogram to
>> contain a new field "endLine" which holds the line number of the closing
>> brace. A pass late in our backend uses this information to set the
>> DebugLoc of return instructions in our programs.
> 
> Interesting.  I'd have thought the front end could generate the
> return-value expression with the source location of the expression,
> and the return instruction itself with source location of the closing
> brace.  Then it would automatically apply to all targets (and all
> debug-info formats).
> 
> Or, if that distinction got lost during some optimization, the
> separate source location could be attached during instruction
> selection?  Hopefully that could also be done in a target-neutral
> way.
> --paulr
> 
>> 
>> I haven't yet tidied up and submitted this upstream for review, as
>> without a consumer of this information, the extension itself is rather
>> dead, but could if some backends would find that information useful and
>> make use of it.
>> 
>> Thanks,
>> Simon
>> 
>> On 03/08/17 15:13, Robinson, Paul via llvm-dev wrote:
>>> I've had this request from my users as well, but it has never been high
>>> enough on the priority list to look at closely.
>>> 
>>> I think it would be feasible to have the actual ret instruction
>>> associated with the closing brace, while the load/computation of the
>>> return value would be associated with the `return` statement; but that's
>>> as far as I got when I looked at this before.
>>> 
>>> --paulr
>>> 
>>> 
>>> 
>>> P.S. The word "parenthesis" plural "parentheses" refers specifically to
>>> these characters: ( )
>>> 
>>> Generally [ ] are "square brackets" or sometimes just "brackets" while {
>>> } are called "braces" or "curly brackets."
>>> 
>>> 
>>> 
>>> *From:*llvm-dev [mailto:llvm-dev-bounces at lists.llvm.org] *On Behalf Of
>>> *Frozen via llvm-dev
>>> *Sent:* Wednesday, August 02, 2017 11:19 PM
>>> *To:* llvm-dev at lists.llvm.org
>>> *Subject:* [llvm-dev] Why LLVM doesn't have debug information of
>>> function right parentheses?
>>> 
>>> 
>>> 
>>> Simple Case:
>>> 
>>> 1.int main()
>>> 2.{
>>> 3.   int i = 0;
>>> 4.   return 0;
>>> 5.}
>>> 
>>> compile command: clang -g a.c
>>> 
>>> In LLVM IR, we have one attribute named "scopeLine" to indicate the left
>>> parentheses. But we don't have one attribute to indicate the right
>>> parentheses (line 5 in this example).
>>> 
>>> So if we use gdb to debug it:
>>> (gdb) b main
>>> Breakpoint 1 at 0x100005c8: file a.c, line 3.
>>> (gdb) r
>>> Breakpoint 1, main () at a.c:3
>>> 3      int i = 0;
>>> Missing separate debuginfos,
>>> (gdb) n
>>> 4      return 0;
>>> (gdb) n
>>> 0x00003fffb7db4580 in generic_start_main.isra.0
>>> We can not stop at line 5.
>>> 
>>> But GCC can stop at line 5
>>> (gdb) b main
>>> Breakpoint 1 at 0x100005e0: file a.c, line 3.
>>> (gdb) r
>>> Breakpoint 1, main () at a.c:3
>>> 3      int i = 0;
>>> Missing separate debuginfos
>>> (gdb) n
>>> 4      return 0;
>>> (gdb) n
>>> 5    }
>>> (gdb)
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> _______________________________________________
>>> LLVM Developers mailing list
>>> llvm-dev at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>> 
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev



More information about the llvm-dev mailing list