https://git.reactos.org/?p=reactos.git;a=commitdiff;h=f1b60c66f00ff31fadbea…
commit f1b60c66f00ff31fadbea5366a3303cb834bccb4
Author: Timo Kreuzer <timo.kreuzer(a)reactos.org>
AuthorDate: Thu Nov 28 12:25:46 2024 +0200
Commit: Timo Kreuzer <timo.kreuzer(a)reactos.org>
CommitDate: Thu Jan 16 14:18:53 2025 +0200
[PSEH] Fix SEH compatibility macros for dummy PSEH
This is used with Clang, which does have native SEH, but it's broken and can cause
the compiler to crash. Previously some code was not handling this and instead used native
SEH for clang. Fix this by always using _SEH2_* macros instead of relying on __USE_PSEH2__
to be defined.
---
modules/rostests/apitests/include/apitest.h | 19 -------------------
sdk/include/psdk/rpc.h | 27 ++++++++-------------------
sdk/include/reactos/wine/exception.h | 11 -----------
3 files changed, 8 insertions(+), 49 deletions(-)
diff --git a/modules/rostests/apitests/include/apitest.h
b/modules/rostests/apitests/include/apitest.h
index 9a627e49560..18cd1ac0da7 100644
--- a/modules/rostests/apitests/include/apitest.h
+++ b/modules/rostests/apitests/include/apitest.h
@@ -12,7 +12,6 @@
#define InvalidPointer ((PVOID)0x5555555555555555ULL)
// #define InvalidPointer ((PVOID)0x0123456789ABCDEFULL)
-#ifdef __USE_PSEH2__
#include <pseh/pseh2.h>
#define StartSeh() \
@@ -32,24 +31,6 @@
"Exception 0x%08lx, expected 0x%08lx\n", \
ExceptionStatus, (ExpectedStatus)); \
}
-#else
-#define StartSeh() \
-{ \
- NTSTATUS ExceptionStatus = STATUS_SUCCESS; \
- __try \
- {
-
-#define EndSeh(ExpectedStatus) \
- } \
- __except(EXCEPTION_EXECUTE_HANDLER) \
- { \
- ExceptionStatus = GetExceptionCode(); \
- } \
- ok(ExceptionStatus == (ExpectedStatus), \
- "Exception 0x%08lx, expected 0x%08lx\n", \
- ExceptionStatus, (ExpectedStatus)); \
-}
-#endif
#define ok_hr(status, expected) ok_hex(status, expected)
#define ok_hr_(file, line, status, expected) ok_hex_(file, line, status, expected)
diff --git a/sdk/include/psdk/rpc.h b/sdk/include/psdk/rpc.h
index 257823505d9..42d76d9a952 100644
--- a/sdk/include/psdk/rpc.h
+++ b/sdk/include/psdk/rpc.h
@@ -118,25 +118,14 @@ typedef int RPC_STATUS;
#include <excpt.h>
#include <winerror.h>
- #ifndef __USE_PSEH2__
- #define RpcTryExcept __try {
- #define RpcExcept(expr) } __except (expr) {
- #define RpcEndExcept }
- #define RpcTryFinally __try {
- #define RpcFinally } __finally {
- #define RpcEndFinally }
- #define RpcExceptionCode() GetExceptionCode()
- #define RpcAbnormalTermination() AbnormalTermination()
- #else
- #define RpcTryExcept _SEH2_TRY
- #define RpcExcept(expr) _SEH2_EXCEPT((expr))
- #define RpcEndExcept _SEH2_END;
- #define RpcTryFinally _SEH2_TRY
- #define RpcFinally _SEH2_FINALLY
- #define RpcEndFinally _SEH2_END;
- #define RpcExceptionCode() _SEH2_GetExceptionCode()
- #define RpcAbnormalTermination() (_SEH2_GetExceptionCode() != 0)
- #endif
+ #define RpcTryExcept _SEH2_TRY
+ #define RpcExcept(expr) _SEH2_EXCEPT((expr))
+ #define RpcEndExcept _SEH2_END;
+ #define RpcTryFinally _SEH2_TRY
+ #define RpcFinally _SEH2_FINALLY
+ #define RpcEndFinally _SEH2_END;
+ #define RpcExceptionCode() _SEH2_GetExceptionCode()
+ #define RpcAbnormalTermination() (_SEH2_GetExceptionCode() != 0)
#endif
#if defined(__RPC_WIN64__)
diff --git a/sdk/include/reactos/wine/exception.h b/sdk/include/reactos/wine/exception.h
index 8d0b3ea46c0..409d1e64407 100644
--- a/sdk/include/reactos/wine/exception.h
+++ b/sdk/include/reactos/wine/exception.h
@@ -55,7 +55,6 @@ typedef struct _WINE_EXCEPTION_REGISTRATION_RECORD
#define PEXCEPTION_REGISTRATION_RECORD PWINE_EXCEPTION_REGISTRATION_RECORD
#endif
-#ifdef __USE_PSEH2__
#define __TRY _SEH2_TRY
#define __EXCEPT(func) _SEH2_EXCEPT(func(_SEH2_GetExceptionInformation()))
#define __EXCEPT_CTX(func, ctx) _SEH2_EXCEPT((func)(GetExceptionInformation(), ctx))
@@ -76,16 +75,6 @@ typedef struct _WINE_EXCEPTION_REGISTRATION_RECORD
#ifndef AbnormalTermination
#define AbnormalTermination() _SEH2_AbnormalTermination()
#endif
-#else
-#define __TRY __try
-#define __EXCEPT(func) __except(func(GetExceptionInformation()))
-#define __EXCEPT_CTX(func, ctx) __except((func)(GetExceptionInformation(), ctx))
-#define __EXCEPT_PAGE_FAULT __except(GetExceptionCode() == STATUS_ACCESS_VIOLATION)
-#define __EXCEPT_ALL __except(1)
-#define __ENDTRY
-#define __FINALLY(func) __finally { func(!AbnormalTermination()); }
-#define __FINALLY_CTX(func, ctx) __finally { func(!AbnormalTermination(), ctx); }
-#endif
#if defined(__MINGW32__) || defined(__CYGWIN__)
#define sigjmp_buf jmp_buf