[Bug target/31644] [avr] can't find a register in class 'BASE_POINTER_REGS' while reloading 'asm'
pavel dot petrovic at gmail dot com
gcc-bugzilla@gcc.gnu.org
Sat Jul 28 20:24:00 GMT 2007
------- Comment #4 from pavel dot petrovic at gmail dot com 2007-07-28 20:24 -------
This bug is quite cruel. I have similar application, also for atmega168 and
WinAVR (avr-gcc (GCC) 4.1.2 (WinAVR 20070525)), and the following lines do not
compile giving the same error. Even worse, if the code is with for-loop, it
compiles, but it crashes when the variable is accessed, or it overwrites
it with a value of a different variable (that is not very neighboring one).
//load calibrated values from eeprom
left_ir_min = eeprom_read_word((uint16_t*)0);
left_ir_center = eeprom_read_word((uint16_t*)2);
left_ir_max = eeprom_read_word((uint16_t*)4);
right_ir_min = eeprom_read_word((uint16_t*)6);
right_ir_center = eeprom_read_word((uint16_t*)8);
right_ir_max = eeprom_read_word((uint16_t*)10);
left_rot[0] = eeprom_read_word((uint16_t*)12);
right_rot[0] = eeprom_read_word((uint16_t*)14);
left_rot[1] = eeprom_read_word((uint16_t*)16);
right_rot[1] = eeprom_read_word((uint16_t*)18);
left_rot[2] = eeprom_read_word((uint16_t*)20);
/* any of the following lines, if present, cause compiler to fail */
right_rot[2] = eeprom_read_word((uint16_t*)22);
left_rot[3] = eeprom_read_word((uint16_t*)24);
right_rot[3] = eeprom_read_word((uint16_t*)26);
--
pavel dot petrovic at gmail dot com changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |pavel dot petrovic at gmail
| |dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31644
More information about the Gcc-bugs
mailing list