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

Reply via email to