1/*- 2 * Copyright (c) 2023 Dag-Erling Sm��rgrav 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#ifndef __STDC_VERSION_STDCKDINT_H__ 8#define __STDC_VERSION_STDCKDINT_H__ 202311L 9 10#include <sys/cdefs.h> 11 12#if __BSD_VISIBLE || __ISO_C_VISIBLE >= 2023 13 14#if __GNUC_PREREQ__(5, 1) || __has_builtin(__builtin_add_overflow) 15#define ckd_add(result, a, b) \ 16 (_Bool)__builtin_add_overflow((a), (b), (result)) 17#else 18#define ckd_add(result, a, b) \ 19 _Static_assert(0, "checked addition not supported") 20#endif 21 22#if __GNUC_PREREQ__(5, 1) || __has_builtin(__builtin_sub_overflow) 23#define ckd_sub(result, a, b) \ 24 (_Bool)__builtin_sub_overflow((a), (b), (result)) 25#else 26#define ckd_sub(result, a, b) \ 27 _Static_assert(0, "checked subtraction not supported") 28#endif 29 30#if __GNUC_PREREQ__(5, 1) || __has_builtin(__builtin_mul_overflow) 31#define ckd_mul(result, a, b) \ 32 (_Bool)__builtin_mul_overflow((a), (b), (result)) 33#else 34#define ckd_mul(result, a, b) \ 35 _Static_assert(0, "checked multiplication not supported") 36#endif 37 38#endif 39 40#endif 41