gcc generates incorrect code when assigning to stack residing struct
bearing "packed" attribute. Correct code is generated when assigning to global
struct of the same type.
Example:
//-----
typedef struct
{
char x1;
char x2;
char x3;
float v1;
float v2;
float v3;
char x4;
char x5;
} __attribute__((packed,aligned(1))) ptype1;
ptype1 g;
void foo()
{
//....
ptype1 p;
//....
p.v1=g.v1;
p.v2=p.v3;
//....
}
//-----
When compiled with:
powerpc-eabi-gcc -std=gnu99 -mcpu=505 -fsingle-precision-constant -mmultiple -
mstring -fno-common -ffast-math -O3 -g3 -memb -msdata=eabi -G 26624
the following incorrect code is generated:
//---
lfs f3, -31984(r13) //g.v1
lfs f2, 395(r1) //p.v3 - incorrect misaligned load (throws exception)
stfs f3, 387(r1) //p.v1 - incorrect misaligned store (throws exception)
stfs f2, 391(r1) //p.v2 - incorrect misaligned store (throws exception)
//---
Desired behavior: at least error message; at most - consistent, byte by byte
load/store.
--
Summary: Incorrect floating point code generated when assigning
to "packed" structure
Product: gcc
Version: 3.4.2
Status: UNCONFIRMED
Severity: critical
Priority: P2
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: oakad at yahoo dot com
CC: gcc-bugs at gcc dot gnu dot org
GCC build triplet: i686-pc-cygwin
GCC host triplet: i686-pc-cygwin
GCC target triplet: powerpc-eabi-*
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20102