[Issue 3753] ICE eh.c 49: Related to exception handling and alloca.

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sat Jan 30 06:48:31 PST 2010


http://d.puremagic.com/issues/show_bug.cgi?id=3753



--- Comment #2 from David Simcha <dsimcha at yahoo.com> 2010-01-30 06:48:29 PST ---
import core.stdc.stdlib;

void main(string[] args) {
    try { doNothing(); } catch {}
    void* foo = alloca(args.length);
}

void doNothing() {}

I've had some more time to fiddle with this and more insight into what causes
it, so I've managed to get a reduced test case working.  It seems like you need
to do both of the following in the same function:

1.  Use exception handling either explicitly or implicitly.  This can include
try-catch, try-finally, scope(exit), and struct destructors.

2.  Use alloca, but **the number of bytes must not be a compile-time
constant**.  This is what was messing me up before.  If you replace:

void* foo = alloca(args.length);

with:

void* foo = alloca(8);

then this bug will not be triggered.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list