https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106818

--- Comment #5 from baoshan <pangbw at gmail dot com> ---
Per Andrew's request:

For GCC built for RISC-V,
With the following code:
struct sss_t {
    int i;
    int j;
} sss;
extern char array[sizeof(struct sss_t )];
void foo()
{
    struct sss_t *p = (struct sss_t *)array;
    p->i = 10;
}

The following asm is generated:
foo():
        lui     a5,%hi(array)
        li      a4,10
        sb      a4,%lo(array)(a5)
        sb      zero,%lo(array+1)(a5)
        sb      zero,%lo(array+2)(a5)
        sb      zero,%lo(array+3)(a5)
        ret
sss:
        .zero   8

While if remove the 'extern' from the C code, the following asm is generated:

foo():
        lui     a5,%hi(array)
        li      a4,10
        sw      a4,%lo(array)(a5)
        ret
array:
        .zero   8
sss:
        .zero   8

Reply via email to