<div dir="ltr"><div dir="ltr">Hello<div><br></div><div>I'm implementing stack copying coroutines. It's an interesting challenge. When we use setjmp/longjmp to move between stacks, we must make sure that restoring the stack doesn't blow away the current stack frame before calling longjmp.</div><div><br></div><div>To do that, we check how big the stack we are restoring is, and use alloca to push the current stack frame beyond that. It works but when I add "-O3" the alloca is elided and it fails again.</div><div><br></div><div>I managed to avoid this by using the resulting buffer in an operation the compiler can't elide. But I was wondering, is there an __attribute__ or other mechanism by which I can tell the compiler: Don't elide this statement even if the result is unused.</div><div><br></div><div>Here is the code: <a href="https://github.com/ioquatix/ruby/blob/3fd9102cb885858038d6a29071acecef78e6d6a5/coroutine/copy/Context.c#L36-L80">https://github.com/ioquatix/ruby/blob/3fd9102cb885858038d6a29071acecef78e6d6a5/coroutine/copy/Context.c#L36-L80</a></div><div><br></div><div>You can see on line 57, I forced compiler to use the result of the alloca. If I remove this, it fails because alloca is not invoked.</div><div><br></div><div>Any help/suggestions appreciated.</div><div><br></div><div>Kind regards,</div><div>Samuel</div></div></div>