http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39819
Georg-Johann Lay <gjl at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
CC| |gjl at gcc dot gnu.org
Known to work| |4.6.1
Resolution| |WONTFIX
--- Comment #2 from Georg-Johann Lay <gjl at gcc dot gnu.org> 2011-07-02
21:23:59 UTC ---
Closed as WONTFIX.
Compiled the following code in 4.6.1, -std=c99 -mmcu=atmega88 -Os
typedef unsigned char uint8_t;
typedef unsigned long int uint32_t;
uint8_t as[4];
uint8_t bs[4];
static const uint8_t sz = 4;
void foo1(void) {
for (uint8_t i = 0; i < sz; i++) {
bs[i] = as[1];
}
}
void foo2(void) {
for (uint8_t i = 0; i < sz; i++) {
*(bs + i) = *(as + 1);
}
}
The result is:
foo1:
lds r24,as+1
sts bs,r24
sts bs+1,r24
sts bs+2,r24
sts bs+3,r24
ret
foo2:
lds r24,as+1
sts bs,r24
sts bs+1,r24
sts bs+2,r24
sts bs+3,r24
ret
So the difference has gone.