aarch64 does not emit DW_AT_Location

Hi Devs,
debug info emitted by llvm does not contain DW_AT_Location for Formal parameter
if it is an aggregate like below case

  1. 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){
    }

  2. 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