Bug 47603 - Optimization level O2 nad O3 produces different output from level O1 and O0
Summary: Optimization level O2 nad O3 produces different output from level O1 and O0
Status: RESOLVED DUPLICATE of bug 21920
Alias: None
Product: gcc
Classification: Unclassified
Component: c++ (show other bugs)
Version: 4.4.3
: P3 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-02-03 21:19 UTC by agamous
Modified: 2011-02-03 21:24 UTC (History)
1 user (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description agamous 2011-02-03 21:19:14 UTC
Source code to compile 

#include <stdio.h>

int main()
{
    int i32 =0x12345678;

    short *t = (short *)&i32;
    t[0] = 0xaa;
    t[1] = 0xbb;

    printf("i32 = %lx\n", i32);
    return 0;
}

We tried both gcc and g++ with the same compilation options and the same result.

Compilation line (optimization O3 or O2)
gcc -O3 -o foo foo.c
run as ./foo
output i32 = 12345678

If compiles with O1 or O0
gcc -O0 -o foo foo.c     
output i32 = bb00aa

GCC version
>       * the exact version of GCC, as shown by "gcc -v";
Using built-in specs.
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu
4.4.3-4ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs
--enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr
--enable-shared --enable-multiarch --enable-linker-build-id
--with-system-zlib --libexecdir=/usr/lib --without-included-gettext
--enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4
--program-suffix=-4.4 --enable-nls --enable-clocale=gnu
--enable-libstdcxx-debug --enable-plugin --enable-objc-gc
--disable-werror --with-arch-32=i486 --with-tune=generic
--enable-checking=release --build=x86_64-linux-gnu
--host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) 

CPU
Intel(R) Core(TM)2 Duo CPU     E8400  @ 3.00GHz

system type 
uname -a displays the following
Linux 2.6.32-24-generic #39-Ubuntu SMP Wed Jul 28 05:14:15 UTC 2010
x86_64 GNU/Linux
Comment 1 Andrew Pinski 2011-02-03 21:24:12 UTC
you are violating c/c++ aliasing rules.

*** This bug has been marked as a duplicate of bug 21920 ***