Hi Devs,
debug info emitted by llvm does not contain DW_AT_Location for Formal parameter
if it is an aggregate like below case
-
aggregate contain more than 4 homogeneous and size more than 128 bits
i.e.
typedef struct{
int a,b,c,d,e;
}mystruct;
void foo(mystruct ms){
}
-
aggregate contain hetrogeneous type and size more than 128 bits.
i.e.
typedef struct{
int a,b;
float c,d,e;
}mystruct;
void foo(mystruct ms){
}
This occur only when aarch64 is used, not with arm and x86.
like to know community thoughts wether this can be considered as bug or it’s an abi restriction.
./kamlesh
Hi Kamlesh,
Does it also happen when the parameters are used? From what I quickly tried, if the parameter is used, clang emits
the location, as expected, e.g. (DW_OP_breg0 (x0): 0)
Hi Momchil,
I am using something like this and we do not get Location information.
#include<stdio.h>
typedef struct {
double a,b,c,d,e;
}mystruct;
void foo(mystruct ms){
printf(“%llu\n”,(unsigned long long) &ms);
}
If this is unoptimized code this is definitely a bug, with optimizations it may not be possible to do any better. In both cases it’s worth filing a bug and attaching a clang reproducer (by running clang through env FORCE_CLANG_DIAGNOSTICS_CRASH=1).
– adrian
Adrian,
Yes it is unoptimized.I will file a bug for this.
Thanks
Adrian,
There was an existing entry for same
https://bugs.llvm.org/show_bug.cgi?id=40709