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.