From 34149e19fc1d9c43bd3532b0e5bf6d4a48bfaddc Mon Sep 17 00:00:00 2001 From: "KJK::Hyperion" Date: Fri, 19 Nov 2004 23:58:33 +0000 Subject: [PATCH] Use _alloca instead of stack variables, because the compiler feels too damn smart svn path=/trunk/; revision=11706 --- reactos/include/pseh/framebased.h | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/reactos/include/pseh/framebased.h b/reactos/include/pseh/framebased.h index f1240de4a14..77e6c87bd11 100644 --- a/reactos/include/pseh/framebased.h +++ b/reactos/include/pseh/framebased.h @@ -25,6 +25,7 @@ #include #include +#include #ifndef offsetof # include @@ -98,26 +99,27 @@ static __declspec(noreturn) void __stdcall _SEHCompilerSpecificHandler #define _SEH_TRY_FILTER_FINALLY(FILTER_, FINALLY_) \ { \ - static _SEHHandlers_t _SEHHandlers = \ + static _SEHHandlers_t _SEHHandlers = \ { \ - (NULL), \ + (NULL), \ _SEHCompilerSpecificHandler, \ - (NULL) \ + (NULL) \ }; \ _SEHHandlers.SH_Filter = FILTER_; \ _SEHHandlers.SH_Finally = FINALLY_; \ \ - _SEHFrame_t _SEHFrame; \ + _SEHFrame_t * _SEHFrame; \ volatile _SEHPortableFrame_t * _SEHPortableFrame; \ \ - _SEHFrame.SEH_Header.SPF_Handlers = &_SEHHandlers; \ + _SEHFrame = _alloca(sizeof(_SEHFrame_t)); \ + _SEHFrame->SEH_Header.SPF_Handlers = &_SEHHandlers; \ \ - _SEHPortableFrame = &_SEHFrame.SEH_Header; \ + _SEHPortableFrame = &_SEHFrame->SEH_Header; \ (void)_SEHPortableFrame; \ \ - if(setjmp(_SEHFrame.SEH_JmpBuf) == 0) \ + if(setjmp(_SEHFrame->SEH_JmpBuf) == 0) \ { \ - _SEHEnter(&_SEHFrame.SEH_Header); \ + _SEHEnter(&_SEHFrame->SEH_Header); \ \ do \ { @@ -127,17 +129,17 @@ static __declspec(noreturn) void __stdcall _SEHCompilerSpecificHandler } \ while(0); \ \ - _SEHLeave(&_SEHFrame.SEH_Header); \ + _SEHLeave(&_SEHFrame->SEH_Header); \ } \ else \ { \ - _SEHLeave(&_SEHFrame.SEH_Header); \ + _SEHLeave(&_SEHFrame->SEH_Header); \ #define _SEH_END \ } \ \ if(_SEHHandlers.SH_Finally) \ - _SEHHandlers.SH_Finally(&_SEHFrame.SEH_Header); \ + _SEHHandlers.SH_Finally(&_SEHFrame->SEH_Header); \ } #define _SEH_LEAVE break