This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c/32895] New: Clobber list isn't working
- From: "hafeliel at yahoo dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 25 Jul 2007 20:54:29 -0000
- Subject: [Bug c/32895] New: Clobber list isn't working
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
void test(void)
{
struct
{
int a, b, c, d, e, f;
} x;
x.d = 5;
asm volatile("in r28, 0x2F" : : : "r28");
x.d = 6;
}
$ avr-gcc.exe -v
Using built-in specs.
Target: avr
Configured with: ../gcc-4.1.1/configure
--prefix=/c/WinAVR --target=avr
--enable-languages=c,c++ --with-dwarf2
--enable-win32-registry=WinAVR --disable-nls
--disable-libssp --disable-fixincludes
--disable-libada --with-gnu-ld --with-gnu-as
--enable-doc
Thread model: single
gcc version 4.1.1 (WinAVR 20070122)
$ avr-gcc.exe -mmcu=atmega8515 -c test.c -Wall
-gdwarf-2 -o test.o
$ avr-objdump.exe -S test.o
.
:
which compiles to:
.
:
x.d = 5;
14: 85 e0 ldi r24, 0x05 ; 5
16: 90 e0 ldi r25, 0x00 ; 0
18: 98 87 std Y+8, r25 ; 0x08
1a: 8f 83 std Y+7, r24 ; 0x07
asm volatile("in r28, 0x2F" : : : "r28");
1c: cf b5 in r28, 0x2f ; 47
x.d = 6;
1e: 86 e0 ldi r24, 0x06 ; 6
20: 90 e0 ldi r25, 0x00 ; 0
22: 98 87 std Y+8, r25 ; 0x08
24: 8f 83 std Y+7, r24 ; 0x07
.
:
As you can see at 0x22 and 0x24, Y is getting used
without being reloaded after r28 is being messed up at 0x1C.
I suspect the problem is that inline asm doesn't want you to use r28 or r29
without restoring them, and I'm fine with that, but gcc should generate some
sort of warning then, if it sees r28 or r29 in the clobber list.
--
Summary: Clobber list isn't working
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: hafeliel at yahoo dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32895