[PATCH] D158821: [builtins] Fix signed integer overflows in divmodsi4.c, divmoddi4.c and divmodti4.c

Karl-Johan Karlsson via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sun Aug 27 21:47:22 PDT 2023


This revision was automatically updated to reflect the committed changes.
Closed by commit rG510b6b79141c: [builtins] Fix signed integer overflows in divmodsi4.c, divmoddi4.c and… (authored by Ka-Ka).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D158821/new/

https://reviews.llvm.org/D158821

Files:
  compiler-rt/lib/builtins/divmoddi4.c
  compiler-rt/lib/builtins/divmodsi4.c
  compiler-rt/lib/builtins/divmodti4.c


Index: compiler-rt/lib/builtins/divmodti4.c
===================================================================
--- compiler-rt/lib/builtins/divmodti4.c
+++ compiler-rt/lib/builtins/divmodti4.c
@@ -20,8 +20,8 @@
   const int bits_in_tword_m1 = (int)(sizeof(ti_int) * CHAR_BIT) - 1;
   ti_int s_a = a >> bits_in_tword_m1;                   // s_a = a < 0 ? -1 : 0
   ti_int s_b = b >> bits_in_tword_m1;                   // s_b = b < 0 ? -1 : 0
-  a = (a ^ s_a) - s_a;                                  // negate if s_a == -1
-  b = (b ^ s_b) - s_b;                                  // negate if s_b == -1
+  a = (tu_int)(a ^ s_a) - s_a;                          // negate if s_a == -1
+  b = (tu_int)(b ^ s_b) - s_b;                          // negate if s_b == -1
   s_b ^= s_a;                                           // sign of quotient
   tu_int r;
   ti_int q = (__udivmodti4(a, b, &r) ^ s_b) - s_b;      // negate if s_b == -1
Index: compiler-rt/lib/builtins/divmodsi4.c
===================================================================
--- compiler-rt/lib/builtins/divmodsi4.c
+++ compiler-rt/lib/builtins/divmodsi4.c
@@ -19,8 +19,8 @@
   const int bits_in_word_m1 = (int)(sizeof(si_int) * CHAR_BIT) - 1;
   si_int s_a = a >> bits_in_word_m1;                    // s_a = a < 0 ? -1 : 0
   si_int s_b = b >> bits_in_word_m1;                    // s_b = b < 0 ? -1 : 0
-  a = (a ^ s_a) - s_a;                                  // negate if s_a == -1
-  b = (b ^ s_b) - s_b;                                  // negate if s_b == -1
+  a = (su_int)(a ^ s_a) - s_a;                          // negate if s_a == -1
+  b = (su_int)(b ^ s_b) - s_b;                          // negate if s_b == -1
   s_b ^= s_a;                                           // sign of quotient
   su_int r;
   si_int q = (__udivmodsi4(a, b, &r) ^ s_b) - s_b;      // negate if s_b == -1
Index: compiler-rt/lib/builtins/divmoddi4.c
===================================================================
--- compiler-rt/lib/builtins/divmoddi4.c
+++ compiler-rt/lib/builtins/divmoddi4.c
@@ -18,8 +18,8 @@
   const int bits_in_dword_m1 = (int)(sizeof(di_int) * CHAR_BIT) - 1;
   di_int s_a = a >> bits_in_dword_m1;                   // s_a = a < 0 ? -1 : 0
   di_int s_b = b >> bits_in_dword_m1;                   // s_b = b < 0 ? -1 : 0
-  a = (a ^ s_a) - s_a;                                  // negate if s_a == -1
-  b = (b ^ s_b) - s_b;                                  // negate if s_b == -1
+  a = (du_int)(a ^ s_a) - s_a;                          // negate if s_a == -1
+  b = (du_int)(b ^ s_b) - s_b;                          // negate if s_b == -1
   s_b ^= s_a;                                           // sign of quotient
   du_int r;
   di_int q = (__udivmoddi4(a, b, &r) ^ s_b) - s_b;      // negate if s_b == -1


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D158821.553834.patch
Type: text/x-patch
Size: 2801 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230828/1514ab7a/attachment-0001.bin>


More information about the llvm-commits mailing list