From: SourceForge.net <no...@so...> - 2003-11-30 16:38:21
|
Bugs item #851607, was opened at 2003-11-30 17:38 Message generated for change (Tracker Item Submitted) made by Item Submitter You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=851607&group_id=599 Category: None Group: None Status: Open Resolution: None Priority: 5 Submitted By: Herbert Oppmann (mtx500) Assigned to: Nobody/Anonymous (nobody) Summary: Tricky code crashes compiler Initial Comment: Platform: Win32 (Windows 98SE) SDCC : mcs51/gbz80/z80/avr/ds390/pic16/pic14/TININative/xa51/ds400/hc08 2.3.6 (Nov 30 2003) (MSVC) This is the 2003-11-28 snapshot compiled with Microsoft Visual Studio 6.0, Service Pack 5 This tricky piece of code: void main(void) { int a; a = ((int * ()) "\x00\xc9")(); /* Z80 NOP, RET */ } Compiled with: sdcc.exe -S -mz80 test1.c Results in: test1.c:4: error: called object is not a function Caught signal 11: SIGSEGV The error message is ok, but the access violation (NULL pointer) is not. This tricky piece of code is sometimes used to directly insert and call opcodes (machine language) with compilers that don't support inline assembly or the emit() builtin function. I've read about this in comp.lang.asm.x86 and tried it out with several compilers. It may relief the developers of SDCC to know that Borland C++ 5.02 also crashes on this one :-) ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=100599&aid=851607&group_id=599 |