data incorrectly placed into .data or .rodata instead of .progmem. This makes impossible using avr-libc predefined types (avr/pgmspace.h).
test.cpp: char __attribute__((__progmem__)) Test1[] = "test1"; char const __attribute__((__progmem__)) Test2[] = "test2"; typedef char __attribute__((__progmem__)) prog_char; prog_char Test3[] = "Test3"; prog_char const Test4[] = "Test4"; void const * array[] = { Test1, Test2, Test3, Test4 }; listing: 8 .global Test1 9 .section .progmem.data,"a",@progbits 12 Test1: 13 0000 7465 7374 .string "test1" 13 3100 14 .global Test3 15 .data 18 Test3: 19 0000 5465 7374 .string "Test3" 19 3300 20 .global array 23 array: 24 0006 0000 .word Test1 25 0008 0000 .word _ZL5Test2 26 000a 0000 .word Test3 27 000c 0000 .word _ZL5Test4 28 .section .progmem.data 31 _ZL5Test2: 32 0006 7465 7374 .string "test2" 32 3200 33 .data 36 _ZL5Test4: 37 000e 5465 7374 .string "Test4" 37 3400 First two forms leads to correct placement, but generates incorrect warning (bug 34734) -- Summary: C++, __attribute__((__progmem__)) lost in typedefs. Product: gcc Version: 4.3.2 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: sb-sf at users dot sourceforge dot net GCC host triplet: x86 GCC target triplet: AVR http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40112