https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65270
Bug ID: 65270
Summary: [5 regression] ICF needs to match TYPE attributes on
memory accesses
Product: gcc
Version: 5.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: ipa
Assignee: unassigned at gcc dot gnu.org
Reporter: hubicka at gcc dot gnu.org
As discussed here https://gcc.gnu.org/ml/gcc-patches/2015-03/msg00028.html
$ more t.c
struct a
{
int a[100000];
}
__attribute__ ((aligned (32)));
struct b
{
int a[100000];
};
t2(struct a *a)
{
int i;
for (i=0;i<100000;i++)
a->a[i]++;
}
t(struct b *a)
{
int i;
for (i=0;i<100000;i++)
a->a[i]++;
}
$ ./xgcc -B ./ -O3 t.c -flto -c -fno-inline
t.c:10:1: warning: return type defaults to �int� [-Wimplicit-int]
t2(struct a *a)
^
t.c:16:1: warning: return type defaults to �int� [-Wimplicit-int]
t(struct b *a)
^
$ ./xgcc -B ./ -O3 t.o -flto -r -nostdlib
$ objdump a.out -d
a.out: file format elf64-x86-64
Disassembly of section .text:
0000000000000000 <t2>:
0: 48 8d 87 80 1a 06 00 lea 0x61a80(%rdi),%rax
7: 66 0f 6f 0d 00 00 00 movdqa 0x0(%rip),%xmm1 # f <t2+0xf>
e: 00
f: 90 nop
10: 48 83 c7 10 add $0x10,%rdi
14: 66 0f 6f 47 f0 movdqa -0x10(%rdi),%xmm0
19: 66 0f fe c1 paddd %xmm1,%xmm0
1d: 0f 29 47 f0 movaps %xmm0,-0x10(%rdi)
21: 48 39 c7 cmp %rax,%rdi
24: 75 ea jne 10 <t2+0x10>
26: f3 c3 repz retq
28: 0f 1f 84 00 00 00 00 nopl 0x0(%rax,%rax,1)
2f: 00
0000000000000030 <t>:
30: e9 00 00 00 00 jmpq 35 <t+0x5>
The functions t and t2 are incorrectly unified.