From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 15250 invoked by alias); 27 Mar 2006 07:19:46 -0000 Received: (qmail 15235 invoked by alias); 27 Mar 2006 07:19:44 -0000 Date: Mon, 27 Mar 2006 07:19:00 -0000 Subject: [Bug c++/26882] New: ICE when using template function with memory attributes X-Bugzilla-Reason: CC Message-ID: Reply-To: gcc-bugzilla@gcc.gnu.org To: gcc-bugs@gcc.gnu.org From: "gcc-bugzilla at gcc dot gnu dot org" Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2006-03/txt/msg02626.txt.bz2 List-Id: This program (which has no included files) causes an ICE and a bus error: -- typedef unsigned char uint8_t ; typedef unsigned short uint16_t ; typedef unsigned long uint32_t ; #define PROGMEM __attribute__((__progmem__)) template T PROGMEM * rom(const T& init) { static T PROGMEM t = init; return &t; } struct funny { uint8_t a; uint16_t b; uint32_t c; }; uint8_t PROGMEM *rom1 = rom((uint8_t)123); funny f = { 0xBB, 0xCCCC, 0xDDDDEEEE }; funny PROGMEM *rom2 = rom(f); int main() { *((volatile uint8_t*)0x55) = *rom1; *((volatile uint8_t*)0xAA) = rom2->a; } bool __cxa_guard_acquire(uint8_t *gv) { return true; } bool __cxa_guard_release(uint8_t *gv) { return true; } -- Environment: System: Darwin Neds-Mini.local 8.5.0 Darwin Kernel Version 8.5.0: Sun Jan 22 10:38:46 PST 2006; root:xnu-792.6.61.obj~1/RELEASE_PPC Power Macintosh powerpc host: powerpc-apple-darwin8.5.0 build: powerpc-apple-darwin8.5.0 target: avr-unknown-none configured with: /opt/local/var/db/dports/build/_Users_ned_src_darwinports_dports_cross_avr-gcc/work/gcc-4.0.2/configure --prefix=/opt/local --infodir=/opt/local/share/info --mandir=/opt/local/share/man --target=avr --program-prefix=avr- --with-included-gettext --enable-obsolete --with-gxx-include-dir=/opt/local/avr/include/c++/4.0.2/ --enable-languages=c,c++ How-To-Repeat: Compile the above program. I used the command line: avr-g++ -mmcu=atmega128 -c -o romtest2.o romtest2.cpp and got this: romtest2.cpp: In function 'T* rom(const T&) [with T = uint8_t]': romtest2.cpp|21| instantiated from here romtest2.cpp|10| internal compiler error: Bus error -- Summary: ICE when using template function with memory attributes Product: gcc Version: 4.0.2 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: ned at bike-nomad dot com GCC build triplet: powerpc-apple-darwin8.5.0 GCC host triplet: powerpc-apple-darwin8.5.0 GCC target triplet: avr-unknown-none http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26882