qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

overflow.c (1286B)


      1 #include <stdio.h>
      2 
      3 int overflow_add_32(int x, int y)
      4 {
      5     int res;
      6     return __builtin_add_overflow(x, y, &res);
      7 }
      8 
      9 int overflow_add_64(long long x, long long y)
     10 {
     11     long long res;
     12     return __builtin_add_overflow(x, y, &res);
     13 }
     14 
     15 int overflow_sub_32(int x, int y)
     16 {
     17     int res;
     18     return __builtin_sub_overflow(x, y, &res);
     19 }
     20 
     21 int overflow_sub_64(long long x, long long y)
     22 {
     23     long long res;
     24     return __builtin_sub_overflow(x, y, &res);
     25 }
     26 
     27 int a1_add = -2147483648;
     28 int b1_add = -2147483648;
     29 long long a2_add = -9223372036854775808ULL;
     30 long long b2_add = -9223372036854775808ULL;
     31 
     32 int a1_sub;
     33 int b1_sub = -2147483648;
     34 long long a2_sub = 0L;
     35 long long b2_sub = -9223372036854775808ULL;
     36 
     37 int main()
     38 {
     39     int ret = 0;
     40 
     41     if (!overflow_add_32(a1_add, b1_add)) {
     42         fprintf(stderr, "data overflow while adding 32 bits\n");
     43         ret = 1;
     44     }
     45     if (!overflow_add_64(a2_add, b2_add)) {
     46         fprintf(stderr, "data overflow while adding 64 bits\n");
     47         ret = 1;
     48     }
     49     if (!overflow_sub_32(a1_sub, b1_sub)) {
     50         fprintf(stderr, "data overflow while subtracting 32 bits\n");
     51         ret = 1;
     52     }
     53     if (!overflow_sub_64(a2_sub, b2_sub)) {
     54         fprintf(stderr, "data overflow while subtracting 64 bits\n");
     55         ret = 1;
     56     }
     57     return ret;
     58 }