https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116357
Bug ID: 116357 Summary: The item's address of the array is not correct if aligned is used Product: gcc Version: 10.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: alwin.zhang at sap dot com Target Milestone: --- Created attachment 58922 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=58922&action=edit Test code to reproduce the issue. The item's address of the array is not correct if aligned is used on the type of array item. The debug version (without gcc optimization) doesn't have the issue, but if we enable optimization like -O1/O2, all the items of the array are using the same address. Attached file is the test code to reproduce the issue. This issue could be reproduced from gcc 7.1 to latest 14.2. >From following asm code we can see that the items of the array are using the same address. C code is - ------------------ u64 * l1; u64 * l2; void align_test(chn_t * p) { l1 = (u64*)(&(p->lock[0])); l2 = (u64*)(&(p->lock[99])); printf("addr is [0]=%llu, [99]=%llu\n", l1, l2); } ------------------ asm code is - ------------------ align_test: sub rsp, 8 mov rsi, rdi mov QWORD PTR l1[rip], rdi mov QWORD PTR l2[rip], rdi mov rdx, rdi mov edi, OFFSET FLAT:.LC0 mov eax, 0 call printf add rsp, 8 ret ------------------ Please download the test code and compile with gcc optimization like -O2 to check the issue. Bug 65204 appears to be the same as this issue, but it's resolved. Thanks!