This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug target/31644] [avr] can't find a register in class 'BASE_POINTER_REGS' while reloading 'asm'
- From: "pavel dot petrovic at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 28 Jul 2007 20:24:18 -0000
- Subject: [Bug target/31644] [avr] can't find a register in class 'BASE_POINTER_REGS' while reloading 'asm'
- References: <bug-31644-9601@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- 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