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

             Bug #: 50569
           Summary: Wrong code error: memcpy eliminated when it is needed
    Classification: Unclassified
           Product: gcc
           Version: 4.6.1
            Status: UNCONFIRMED
          Severity: major
          Priority: P3
         Component: c
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: pkon...@gcc.gnu.org


Created attachment 25382
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=25382
Test code that shows the issue

This issue shows up in 4.6.1 but is not present in 4.5.1.

The attached sample code picks up a buffer pointer from external data
structures, copies a block of data to a temporary variable, and then references
the temporary.  GCC 4.6.1 optimized away the memcpy and instead directly
references the original data, which is fine... except that the pointer is "char
*" meaning that the data structure in that buffer is not necessarily aligned. 
And the references through that pointer are written as if the data IS aligned,
so on my strict-alignment target (MIPS) I get an alignment exception.

GCC 4.5.1 does it right -- it also optimizes away the memcpy but it accesses
the original data using unaligned accesses.

Reply via email to