Skip to content

Commit a17063d

Browse files
authored
Merge pull request diffblue#771 from owen-jones-diffblue/bugfix/overflow-test
Bugfix/overflow test
2 parents bf0103e + 8dcd386 commit a17063d

File tree

1 file changed

+14
-7
lines changed
  • regression/cbmc/unsigned___int128

1 file changed

+14
-7
lines changed

regression/cbmc/unsigned___int128/main.c

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,37 @@
11
# include <stdint.h>
22

3-
typedef unsigned __int128 uint128_t;
3+
typedef unsigned __int128 uint128_t;
44

55
typedef uint64_t limb;
66
typedef uint128_t widelimb;
77

88
typedef limb felem[4];
99
typedef widelimb widefelem[7];
1010

11-
felem p = {0x1FFFFFFFFFFFFFF,
12-
0xFFFFFFFFFFFFFF,
13-
0xFFFFE000000000,
11+
felem p = {0x1FFFFFFFFFFFFFF,
12+
0xFFFFFFFFFFFFFF,
13+
0xFFFFE000000000,
1414
0x00000000000002};
1515

1616

1717
/*-
1818
* Reduce seven 128-bit coefficients to four 64-bit coefficients.
1919
* Requires in[i] < 2^126,
2020
* ensures out[0] < 2^56, out[1] < 2^56, out[2] < 2^56, out[3] <= 2^56 + 2^16 */
21-
void reduce(felem out, const widefelem in)
21+
void reduce(
22+
limb out0, limb out1, limb out2, limb out3, widelimb in0, widelimb in1,
23+
widelimb in2, widelimb in3, widelimb in4, widelimb in5, widelimb in6)
2224
{
25+
felem out = {out0, out1, out2, out3};
26+
const widefelem in = {in0, in1, in2, in3, in4, in5, in6};
2327

2428
__CPROVER_assume(in[0]<(widelimb)((widelimb)1<<126));
2529
__CPROVER_assume(in[1]<((widelimb)1<<126));
2630
__CPROVER_assume(in[2]<((widelimb)1<<126));
2731
__CPROVER_assume(in[3]<((widelimb)1<<126));
32+
__CPROVER_assume(in[4]<((widelimb)1<<126));
33+
__CPROVER_assume(in[5]<((widelimb)1<<126));
34+
__CPROVER_assume(in[6]<((widelimb)1<<126));
2835

2936
static const widelimb two127p15 = (((widelimb) 1) << 127) +
3037
(((widelimb) 1) << 15);
@@ -75,9 +82,9 @@ void reduce(felem out, const widefelem in)
7582

7683
output[2] += output[1] >> 56;
7784
/* output[2] < 2^57 + 2^72 */
78-
85+
7986
assert(output[2] < (((widelimb)1)<<57)+(((widelimb)1)<<72));
80-
87+
8188
out[1] = output[1] & 0x00ffffffffffffff;
8289
output[3] += output[2] >> 56;
8390
/* output[3] <= 2^56 + 2^16 */

0 commit comments

Comments
 (0)