The program which will be attached
demonstrates a case where,
when the -fstrict-aliasing optimization is turned on,
the result of the final one of 6 double-to-float conversions
does not get written to memory as it should.
According to valgrind (memory debugging tool), the target memory
gets left uninitialized.

The expected output and actual output are described in the program's comments.

I don't think I have done any illegal pointer aliasing in this program,
and the -Wstrict-aliasing=2 option doesn't warn of any such errors.

The problem occurs in g++ 4.1.2.
It does not occur in older versions I tried (4.0.2, 3.3.5)
nor at lower optimization levels.

The compiler version info, as shown by g++ -v, is:
    Using built-in specs.
    Target: x86_64-suse-linux
    Configured with: ../configure --prefix=/usr --mandir=/usr/share/man
--infodir=/usr/share/info --libdir=/usr/lib64 --libexecdir=/usr/lib64
--with-gxx-include-dir=/usr/include/c++/4.1.2 --enable-languages=c,c++,fortran
--enable-shared --enable-threads=posix --disable-checking --with-system-zlib
--enable-__cxa_atexit --without-system-libunwind --enable-spp --disable-libssp
--enable-version-specific-runtime-libs --host=x86_64-suse-linux
    Thread model: posix
    gcc version 4.1.2


-- 
           Summary: -fstrict-aliasing causes omission of double-to-float
                    conversion
           Product: gcc
           Version: 4.1.2
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: dhatch at ilm dot com
 GCC build triplet: x86_64-suse-linux
  GCC host triplet: x86_64-suse-linux
GCC target triplet: x86_64-suse-linux


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37679

Reply via email to