...
Code Block | ||||
---|---|---|---|---|
| ||||
#include <limits.h> signed int si_a; signed int si_b; signed int sum; void (func) { /* Initialize si_a, si_b and sum */ if (((si_b > 0) && (si_a > (INT_MAX - si_b))) || || ((si_b < 0) && (si_a < (INT_MIN - si_b)))) { /* Handle error condition */ } else { sum = si_a + si_b; } /* ... */ } |
...
Code Block | ||||
---|---|---|---|---|
| ||||
#include <limits.h> signed int si_a; signed int si_b; signed int result; void func(void) { /* Initialize si_a, si_b and result */ if (((si_a^si_b) & & (((si_a ^ ((si_a^si_b) & INT_MIN)) - & (1 << (sizeof(int) * CHAR_BIT -1)))) - si_b)^si_b)) < 0) { /* Handle error condition */ } else { result = si_a - si_b; } /* ... */ } |
...
Code Block | ||||
---|---|---|---|---|
| ||||
#include <limits.h>
signed int si_a;
signed int si_b;
singed int result;
void func(void) {
/* Initialize si_a, si_b and result */
if ((si_b > 0 && si_a < INT_MIN + si_b) ||
(si_b < 0 && si_a > INT_MAX + si_b)) {
/* Handle error condition */
} else {
result = si_a - si_b;
}
/* ... */
} |
...
Code Block | ||||
---|---|---|---|---|
| ||||
#include <limits.h>
signed int si_a;
signed int si_b;
signed int result;
void func(void) {
/* Initialize si_a, si_b and result */
if (si_a > 0) { /* si_a is positive */
if (si_b > 0) { /* si_a and si_b are positive */
if (si_a > (INT_MAX / si_b)) {
/* Handle error condition */
}
} else { /* si_a positive, si_b nonpositive */
if (si_b < (INT_MIN / si_a)) {
/* Handle error condition */
}
} /* si_a positive, si_b nonpositive */
} else { /* si_a is nonpositive */
if (si_b > 0) { /* si_a is nonpositive, si_b is positive */
if (si_a < (INT_MIN / si_b)) {
/* Handle error condition */
}
} else { /* si_a and si_b are nonpositive */
if ( (si_a != 0) && (si_b < (INT_MAX / si_a))) {
/* Handle error condition */
}
} /* End if si_a and si_b are nonpositive */
} /* End if si_a is nonpositive */
result = si_a * si_b;
} |
...
Code Block | ||||
---|---|---|---|---|
| ||||
#include <limits.h> #include <stdatomic.h> atomic_int i; int si_a; void func(void) { /* Initialize si_a, i */ int si_b = atomic_load(&i); if (((si_b>0) && (si_a > (INT_MAX-si_b))) || || ((si_b<0) && (si_a < (INT_MIN-si_b)))) { /* Handle error condition */ } else { atomic_fetch_add(&i, si_a); } /* ... */ } |
...