From f493fc5fa2b1acb620f7d2fb052273502edf8e92 Mon Sep 17 00:00:00 2001 From: Michel Zou Date: Wed, 11 Nov 2020 19:16:50 +0100 Subject: [PATCH] spirv: workaround setjmp/longjmp crash on MinGW Reviewed-by: Jose Fonseca Part-of: --- src/compiler/spirv/gl_spirv.c | 2 +- src/compiler/spirv/spirv_to_nir.c | 4 ++-- src/compiler/spirv/vtn_private.h | 9 +++++++++ 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/compiler/spirv/gl_spirv.c b/src/compiler/spirv/gl_spirv.c index 55b4437..5ef3892 100644 --- a/src/compiler/spirv/gl_spirv.c +++ b/src/compiler/spirv/gl_spirv.c @@ -238,7 +238,7 @@ gl_spirv_validation(const uint32_t *words, size_t word_count, return false; /* See also _vtn_fail() */ - if (setjmp(b->fail_jump)) { + if (vtn_setjmp(b->fail_jump)) { ralloc_free(b); return false; } diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c index de3d12d..73f3a7b 100644 --- a/src/compiler/spirv/spirv_to_nir.c +++ b/src/compiler/spirv/spirv_to_nir.c @@ -160,7 +160,7 @@ _vtn_fail(struct vtn_builder *b, const char *file, unsigned line, if (dump_path) vtn_dump_shader(b, dump_path, "fail"); - longjmp(b->fail_jump, 1); + vtn_longjmp(b->fail_jump, 1); } static struct vtn_ssa_value * @@ -5744,7 +5744,7 @@ spirv_to_nir(const uint32_t *words, size_t word_count, return NULL; /* See also _vtn_fail() */ - if (setjmp(b->fail_jump)) { + if (vtn_setjmp(b->fail_jump)) { ralloc_free(b); return NULL; } diff --git a/src/compiler/spirv/vtn_private.h b/src/compiler/spirv/vtn_private.h index 45187a0..97fc67f 100644 --- a/src/compiler/spirv/vtn_private.h +++ b/src/compiler/spirv/vtn_private.h @@ -40,6 +40,15 @@ struct vtn_builder; struct vtn_decoration; +/* setjmp/longjmp is broken on MinGW: https://sourceforge.net/p/mingw-w64/bugs/406/ */ +#ifdef __MINGW32__ + #define vtn_setjmp __builtin_setjmp + #define vtn_longjmp __builtin_longjmp +#else + #define vtn_setjmp setjmp + #define vtn_longjmp longjmp +#endif + void vtn_log(struct vtn_builder *b, enum nir_spirv_debug_level level, size_t spirv_offset, const char *message); -- 2.7.4