Commit 2c139bb
committed
py/mpz: Fix bugs with bitwise of -0 by ensuring all 0's are positive.
This commit makes sure that the value zero is always encoded in an mpz_t as
neg=0 and len=0 (previously it was just len=0).
This invariant is needed for some of the bitwise operations that operate on
negative numbers, because they cannot handle -0. For example
(-((1<<100)-(1<<100)))|1 was being computed as -65535, instead of 1.
Fixes issue micropython#8042.
Signed-off-by: Damien George <damien@micropython.org>1 parent 05bea70 commit 2c139bb
3 files changed
+52
-11
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
713 | 713 | | |
714 | 714 | | |
715 | 715 | | |
| 716 | + | |
716 | 717 | | |
717 | 718 | | |
718 | 719 | | |
| |||
899 | 900 | | |
900 | 901 | | |
901 | 902 | | |
902 | | - | |
903 | | - | |
904 | | - | |
905 | | - | |
906 | 903 | | |
907 | 904 | | |
908 | 905 | | |
| |||
1052 | 1049 | | |
1053 | 1050 | | |
1054 | 1051 | | |
1055 | | - | |
| 1052 | + | |
| 1053 | + | |
| 1054 | + | |
1056 | 1055 | | |
1057 | 1056 | | |
1058 | 1057 | | |
| |||
1148 | 1147 | | |
1149 | 1148 | | |
1150 | 1149 | | |
1151 | | - | |
| 1150 | + | |
1152 | 1151 | | |
1153 | 1152 | | |
1154 | 1153 | | |
| |||
1172 | 1171 | | |
1173 | 1172 | | |
1174 | 1173 | | |
1175 | | - | |
| 1174 | + | |
| 1175 | + | |
| 1176 | + | |
1176 | 1177 | | |
1177 | 1178 | | |
1178 | 1179 | | |
| |||
1484 | 1485 | | |
1485 | 1486 | | |
1486 | 1487 | | |
| 1488 | + | |
1487 | 1489 | | |
1488 | 1490 | | |
1489 | 1491 | | |
1490 | 1492 | | |
| 1493 | + | |
1491 | 1494 | | |
1492 | 1495 | | |
1493 | 1496 | | |
1494 | | - | |
| 1497 | + | |
1495 | 1498 | | |
1496 | 1499 | | |
1497 | 1500 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
91 | 91 | | |
92 | 92 | | |
93 | 93 | | |
| 94 | + | |
94 | 95 | | |
95 | 96 | | |
96 | 97 | | |
| |||
119 | 120 | | |
120 | 121 | | |
121 | 122 | | |
122 | | - | |
| 123 | + | |
123 | 124 | | |
124 | 125 | | |
125 | 126 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
| 1 | + | |
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| |||
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
16 | | - | |
| 16 | + | |
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
| |||
26 | 26 | | |
27 | 27 | | |
28 | 28 | | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
0 commit comments