diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/setjmp.h | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/include/setjmp.h b/include/setjmp.h index c234287..f1b19f5 100644 --- a/include/setjmp.h +++ b/include/setjmp.h @@ -31,6 +31,40 @@ libc_hidden_proto (__sigsetjmp) # if IS_IN (rtld) && !defined NO_RTLD_HIDDEN extern __typeof (__sigsetjmp) __sigsetjmp attribute_hidden; # endif + +/* Check jmp_buf sizes, alignments and offsets. */ +# include <stddef.h> +# include <jmp_buf-macros.h> + +# define STR_HELPER(x) #x +# define STR(x) STR_HELPER(x) + +# define TEST_SIZE(type, size) \ + _Static_assert (sizeof (type) == size, \ + "size of " #type " != " \ + STR (size)) +# define TEST_ALIGN(type, align) \ + _Static_assert (__alignof__ (type) == align , \ + "align of " #type " != " \ + STR (align)) +# define TEST_OFFSET(type, member, offset) \ + _Static_assert (offsetof (type, member) == offset, \ + "offset of " #member " field of " #type " != " \ + STR (offset)) + +/* Check if jmp_buf have the expected sizes. */ +TEST_SIZE (jmp_buf, JMP_BUF_SIZE); +TEST_SIZE (sigjmp_buf, SIGJMP_BUF_SIZE); + +/* Check if jmp_buf have the expected alignments. */ +TEST_ALIGN (jmp_buf, JMP_BUF_ALIGN); +TEST_ALIGN (sigjmp_buf, SIGJMP_BUF_ALIGN); + +/* Check if internal fields in jmp_buf have the expected offsets. */ +TEST_OFFSET (struct __jmp_buf_tag, __mask_was_saved, + MASK_WAS_SAVED_OFFSET); +TEST_OFFSET (struct __jmp_buf_tag, __saved_mask, + SAVED_MASK_OFFSET); #endif #endif |