System.
Fedora 11 - Linux 2.6.30.8-64.fc11.x86_64 #1 SMP
gcc-4.4.1, Release: 2.fc11 (Fedora's package)
Problem in short.
definitions:
typedef uint64_t obj[1];
obj x0, x1, X[2];
then the following code doesn't work:
X[0][0] = x0[0];
X[1][0] = x1[0];
while this works:
*X[0] = *x0;
*X[1] = *x1;
(As far as I know these are equivalent).
Problem only with -O3 and 64-bit code.
Works perfectly at least with gcc34, -O2 and/or 32-bit code.
Detailed information.
The program gcc-bug.c compiled as
gcc -Wall -O3 -o gcc-bug gcc-bug.c
produce the following (wrong) output:
(1) x0 = 12345
(1) x1 = 67890
(2) x0 = 12345
(2) x1 = 4195296
instead of the correct one:
(1) x0 = 12345
(1) x1 = 67890
(2) x0 = 12345
(2) x1 = 67890
In attachment gcc-bug.c and gcc-bug.i, generated with -v -save-temps.
--
Summary: Optimization error on vectors of uint64_t
Product: gcc
Version: 4.4.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: emanuele dot cesena at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41630