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

Eli Bendersky eliben at gmail.com
Wed Jul 13 21:56:11 PDT 2011


Hello,

Consider the following two functions:

void foo(int* arg_ptr) {
...
}

void bar(int arg_arr[42]) {
...
}

------

According to the C standard, both arguments will be passed to the function
as pointers. However, in the debug information metadata generated in LLVM,
it appears that they are also equivalent.

More specifically, for both arg_ptr and arg_arr I get a derived type
descriptor with the DW_TAG_pointer_type tag, referencing 'int' as the type
derived from, in argument 8 of the relevant MDNode. There is no way to know
arg_arr is in the user's eyes an array.

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?

Eli
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110714/36fce55f/attachment.html>


More information about the llvm-dev mailing list