Bug List: (This bug is not in your last search results)   Show last search results      Search page      Enter new bug
Bug#: 26882
Product:  
Component:  
Status: NEW
Resolution:
Assigned To: Not yet assigned to anyone <unassigned@gcc.gnu.org>
Host:
Reported against  
Priority:  
Severity:  
Target Milestone:  
 
 
Target:
Reporter: Ned Konz <ned@bike-nomad.com>
Add CC:
CC:
Remove selected CCs
Build:
URL:
Summary:
Keywords:
Known to work:
Known to fail:

Attachment Description Type Created Size Actions
romtest.cpp Test program (no included files) demonstrating the problem. text/plain 2006-03-27 07:26 685 bytes Edit
Create a New Attachment (proposed patch, testcase, etc.) View All

Bug 26882 depends on: Show dependency tree
Show dependency graph
Bug 26882 blocks:

Additional Comments:





Mark bug as waiting for feedback
Mark bug as suspended




View Bug Activity   |   Format For Printing   |   Clone This Bug


Description:   Last confirmed: 2007-07-25 17:42 Opened: 2006-03-27 07:19

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<typename T>
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

------- Comment #1 From Ned Konz 2006-03-27 07:26 -------
Created an attachment (id=11133) [edit]
Test program (no included files) demonstrating the problem.

------- Comment #2 From Ned Konz 2006-05-01 15:01 -------
Still present in 4.2-20060429 snapshot.

------- Comment #3 From Eric Weddington 2007-07-25 17:42 -------
Confirmed for 4.2.1 on mingw host.

test.cpp: In function 'T* rom(const T&) [with T = uint8_t]':
test.cpp:21:   instantiated from here
test.cpp:10: internal compiler error: Segmentation fault

Bug List: (This bug is not in your last search results)   Show last search results      Search page      Enter new bug