http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60075
Bug ID: 60075
Summary: Wrong code from loop optimizer with address-space
accesses
Product: gcc
Version: 4.7.3
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: gjl at gcc dot gnu.org
Created attachment 32046
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=32046&action=edit
loop-memx.c: C source triggering the bug
The following C code runs to abort:
== C code ==
typedef unsigned char uint8_t;
volatile uint8_t buf[12];
volatile uint8_t buf_used;
void __attribute__((noinline,noclone))
copy_string (uint8_t len, const __memx char* str)
{
uint8_t n;
for (n = 0; n < len; n++)
{
if (*str != '1')
__builtin_abort();
buf[n] = *str++;
}
buf_used = len;
}
int main (void)
{
copy_string (1, "1");
return 0;
}
== Command Line ==
$ avr-gcc -mmcu=atmega128 loop-memx.c -O2 -v
== Configuration ==
It's from the current (2014-02-05) 4.7 head but the problem is also known for
official releases like 4.7.2
gcc version 4.7.4 20140205 (prerelease) [gcc-4_7-branch revision 195858] (GCC)
Target: avr
Configured with: ../../gcc.gnu.org/gcc-4_7-branch/configure --target=avr
--prefix=/local/gnu/install/gcc-4.7 --disable-nls --with-dwarf2
--enable-languages=c,c++ --enable-target-optspace=yes --with-avrlibc=yes