https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61976

            Bug ID: 61976
           Summary: aix64: Data corruption in struct passed by value
           Product: gcc
           Version: 4.7.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: lbl2007 at gmx dot net

Test program:
   #include <stdio.h>

   struct Demo { float a; };

   void foo( const Demo byval, const Demo &byref )
   {
      printf( "byval: %f\n", (double) byval.a );
      printf( "byref: %f\n", (double) byref.a );
   }

   int main()
   {
      Demo a = { 1.23 };
      foo( a, a );
      return 0;
   }

When I compile and run this under AIX, the first argument is corrupted:

    g++ -maix64 -o demo demo.c
    ./demo
    byval: -0.000000
    byref: 1.230000

The problem does not occur with -maix32

GCC version:
Target: powerpc-ibm-aix6.1.0.0
Configured with: /common/mringe/gcc47_alt/gcc-4.7.2/configure
--prefix=/common/mringe/gcc47_alt/local --with-as=/usr/bin/as
--with-ld=/usr/bin/ld --enable-languages=c,c++ --enable-threads --disable-nls
--disable-shared --with-gmp=/common/mringe/gcc47_alt/local
--with-mpfr=/common/mringe/gcc47_alt/local
--with-mpc=/common/mringe/gcc47_alt/local
Thread model: aix
gcc version 4.7.2 (GCC)

Reply via email to