Draft
Conversation
C23 defines `ckd_add`, `ckd_sub`, and `ckd_mul`, which provide portable functions for checked arithmetic, in `<stdckdint.h>`. Use the header-only `jtckdint.h` library from Justine Alexandra Roberts Tunney, ISC-licensed, to provide a polyfill for platforms where this header isn't available. Currently at commit d4c68b9559acdcc18b73c9fa463edc6b9c569c9f - https://en.cppreference.com/w/c/header/stdckdint.html - https://github.com/jart/jtckdint The transformation to C files was applied by Coccinelle using the following semantic patch: @@ expression a; expression b; expression res; @@ - caml_uadd_overflow(a, b, res) + ckd_add(res, a, b) @@ expression a; expression b; expression res; @@ - caml_usub_overflow(a, b, res) + ckd_sub(res, a, b) @@ expression a; expression b; expression res; @@ - caml_umul_overflow(a, b, res) + ckd_mul(res, a, b)
f2abec3 to
11f9009
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
C23 defines
ckd_add,ckd_sub, andckd_mul, which provide portable functions for checked arithmetic, in<stdckdint.h>.Use the header-only
jtckdint.hlibrary from Justine Alexandra Roberts Tunney, ISC-licensed, to provide a polyfill for platforms where<stdckdint.h>isn't available. Currently at commit d4c68b9559acdcc18b73c9fa463edc6b9c569c9f.The transformation to C files was applied by Coccinelle using the following semantic patch:
I believe this improves the portability of the code, as compilers not exposing the
__builtin_functions did not benefit from optimized checked arithmetic, andjtckdint.hprovides an efficient implementation.