Set of array elements assigned with compound literals are not assigned with gcc-9.2 compiler
Nagaraju Mekala
gnuuser.raj@gmail.com
Mon Mar 30 12:55:06 GMT 2020
Hello All,
Need help in resolving the below error:
The below code fails to assign values to a pointer variable with
gcc-9.2 compiler, same code works with gcc-8.2 compiler.
#define FACE_DELAYS
{0x0, 0x15, 0x0, 0x0, 0x34, 0x0, 0x35, 0x11, 0x15}
#define BUS_SPEED 9
int temp_func()
{
u32 *a;
if (<cond>)
abc = (u32 [BUS_SPEED]) FACE_DELAYS;
}
Note: The above code is just a sample of original testcase
The error is due change in build_compound_literal function of gcc
(gcc/c/c-decl.c). Addition of below pushdecl() is causing the error.
else if (current_function_decl && !current_scope->parm_flag)
pushdecl (decl);
In GCC-8.2 we don't have above code, and it is generating memcpy as
expected, but in GCC-9.2 it is not generating Memcpy.
Actual Disassembly code between gcc-8.2 and gcc-9.2 for reference
GCC-8.2
8031578: 97ffdd44 bl 8028a88 <abc>
803157c: d2800482 mov x2, #0x24 // #36
8031580: 34001420 cbz w0, 8031804 <a1+0x304>
8031584: aa1403e1 mov x1, x20
8031588: 9102e3e0 add x0, sp, #0xb8
803158c: 9400f508 bl 806e9ac <memcpy>
8031590: 9102e3f5 add x21, sp, #0xb8
8031594: d2800482 mov x2, #0x24 // #36
8031598: 8b020281 add x1, x20, x2
803159c: 910243f4 add x20, sp, #0x90
80315a0: 910243e0 add x0, sp, #0x90
80315a4: 9400f502 bl 806e9ac <memcpy>
80315a8: 394146e0 ldrb w0, x23, #81
GCC-9.2
8031504: 97ffdd43 bl 8028a10 <abc>
8031508: 34001340 cbz w0, 8031770 <a1+0x2dc>
803150c: 910243f4 add x20, sp, #0x90
8031510: 9102e3f5 add x21, sp, #0xb8
8031514: 394146e0 ldrb w0, x23, #81
any help is much appreciated.
Thanks,
Nagaraju
More information about the Gcc-help
mailing list