[LLVMdev] debug metadata incomplete for array arguments to functions?

Frits van Bommel fvbommel at gmail.com
Sun Jul 17 04:43:12 PDT 2011


On 15 July 2011 06:35, Eli Bendersky <eliben at gmail.com> wrote:
>
>> > This reflects the compiler's view of things correctly, but is
>> > problematic for a debugger. The debugger should know that arg_arr refers to
>> > a 42-element array and isn't just a pointer into a buffer of unspecified
>> > length. This is something the user would expect.
>> > On the other hand, the debugger should also get the information that
>> > arg_arr is actually a pointer, to be able to get to its values correctly.
>> >
>> > Is there a way out?
>>
>> The only way out is to figure out how to distinguish between these two in
>> front-end AST nodes while emitting LLVM IR. The part of front end that emits
>> debug info for an argument is seeing arg_arr as a pointer to int.
>>
>> If you manually patch metadata in llvm IR then you'll get debug info as
>> you expect.
>> -
>
> Suppose one would start writing a patch to Clang to rectify this, how would
> this information be encoded in the debug metadata, given the dual nature of
> the arg_arr argument? Is there a mechanism to support it, or is an extension
> required?

Can't you just encode it as if it were a reference to a static array?
In other words, generate debug info for
  void bar(int arg_arr[42]) {
  ...
  }
as if it said
  void bar(int (&arg_arr)[42]) {
  ...
  }
instead.

A reference should be equivalent to a pointer for codegen purposes,
and this should tell the debugger that the parameter is actually an
array according to the source code.

I don't know whether this might lead to the debugger showing the
implicit '&' when printing out the parameter though, but I don't think
that would be a big problem.



More information about the llvm-dev mailing list