[CM] [SPAM:####] Failed to disable HAVE_OVERFLOW_CHECKS
Da Shen
da at liii.pro
Wed Jan 1 21:35:28 PST 2025
In the previous discussion, I tried to enable HAVE_OVERFLOW_CHECKS on msvc but failed.
https://cm-mail.stanford.edu/pipermail/cmdist/2024-December/009360.html <https://cm-mail.stanford.edu/pipermail/cmdist/2024-December/009360.html >
Since I have found that enable HAVE_OVERFLOW_CHECKS is expensive on MSVC, I decide to disable HAVE_OVERFLOW_CHECKS on Linux and macOS.
And currently, it is not possible to disable HAVE_OVERFLOW_CHECKS:
#ifndef HAVE_OVERFLOW_CHECKS
#if ((defined(__clang__) && (!POINTER_32) && ((__clang_major__ > 3) || (__clang_major__ == 3 && __clang_minor__ >= 4))) || (defined(__GNUC__) && (__GNUC__ >= 5)))
#define HAVE_OVERFLOW_CHECKS 1
#else
#define HAVE_OVERFLOW_CHECKS 0
#pragma message("no arithmetic overflow checks in this version of s7")
/* these are untested */
static bool add_overflow(s7_int A, s7_int B, s7_int *C) {*C = A + B; return(false);} /* #define add_overflow(A, B, C) 0 */
static bool subtract_overflow(s7_int A, s7_int B, s7_int *C) {*C = A - B; return(false);} /* #define subtract_overflow(A, B, C) 0 */
static bool multiply_overflow(s7_int A, s7_int B, s7_int *C) {*C = A * B; return(false);} /* #define multiply_overflow(A, B, C) 0 */
#endif
#endif
Because it is actually controlled by the compiler and there is no way to disable the compiler flag without patching s7.c.
Here is my suggestion:
#ifndef HAVE_OVERFLOW_CHECKS
// define HAVE_OVERFLOW_CHECKS to 0 or 1 according to compilers
#endif
#if HAVE_OVERFLOW_CHECKS == 0
static bool add_overflow(s7_int A, s7_int B, s7_int *C) {*C = A + B; return(false);} /* #define add_overflow(A, B, C) 0 */
static bool subtract_overflow(s7_int A, s7_int B, s7_int *C) {*C = A - B; return(false);} /* #define subtract_overflow(A, B, C) 0 */
static bool multiply_overflow(s7_int A, s7_int B, s7_int *C) {*C = A * B; return(false);} /* #define multiply_overflow(A, B, C) 0 */
#endif
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://cm-mail.stanford.edu/pipermail/cmdist/attachments/20250102/e599d1f1/attachment.html>
More information about the Cmdist
mailing list