fix: assertion violation
This commit is contained in:
parent
2f74415eaf
commit
3d0bfcd36a
3 changed files with 17 additions and 6 deletions
|
|
@ -1139,15 +1139,15 @@ extern "C" object * lean_nat_big_sub(object * a1, object * a2) {
|
|||
extern "C" object * lean_nat_big_mul(object * a1, object * a2) {
|
||||
lean_assert(!lean_is_scalar(a1) || !lean_is_scalar(a2));
|
||||
if (lean_is_scalar(a1))
|
||||
return mpz_to_nat_core(mpz::of_size_t(lean_unbox(a1)) * mpz_value(a2));
|
||||
return mpz_to_nat(mpz::of_size_t(lean_unbox(a1)) * mpz_value(a2));
|
||||
else if (lean_is_scalar(a2))
|
||||
return mpz_to_nat_core(mpz_value(a1) * mpz::of_size_t(lean_unbox(a2)));
|
||||
return mpz_to_nat(mpz_value(a1) * mpz::of_size_t(lean_unbox(a2)));
|
||||
else
|
||||
return mpz_to_nat_core(mpz_value(a1) * mpz_value(a2));
|
||||
}
|
||||
|
||||
extern "C" object * lean_nat_overflow_mul(size_t a1, size_t a2) {
|
||||
return mpz_to_nat_core(mpz::of_size_t(a1) * mpz::of_size_t(a2));
|
||||
return mpz_to_nat(mpz::of_size_t(a1) * mpz::of_size_t(a2));
|
||||
}
|
||||
|
||||
extern "C" object * lean_nat_big_div(object * a1, object * a2) {
|
||||
|
|
|
|||
|
|
@ -1139,15 +1139,15 @@ extern "C" object * lean_nat_big_sub(object * a1, object * a2) {
|
|||
extern "C" object * lean_nat_big_mul(object * a1, object * a2) {
|
||||
lean_assert(!lean_is_scalar(a1) || !lean_is_scalar(a2));
|
||||
if (lean_is_scalar(a1))
|
||||
return mpz_to_nat_core(mpz::of_size_t(lean_unbox(a1)) * mpz_value(a2));
|
||||
return mpz_to_nat(mpz::of_size_t(lean_unbox(a1)) * mpz_value(a2));
|
||||
else if (lean_is_scalar(a2))
|
||||
return mpz_to_nat_core(mpz_value(a1) * mpz::of_size_t(lean_unbox(a2)));
|
||||
return mpz_to_nat(mpz_value(a1) * mpz::of_size_t(lean_unbox(a2)));
|
||||
else
|
||||
return mpz_to_nat_core(mpz_value(a1) * mpz_value(a2));
|
||||
}
|
||||
|
||||
extern "C" object * lean_nat_overflow_mul(size_t a1, size_t a2) {
|
||||
return mpz_to_nat_core(mpz::of_size_t(a1) * mpz::of_size_t(a2));
|
||||
return mpz_to_nat(mpz::of_size_t(a1) * mpz::of_size_t(a2));
|
||||
}
|
||||
|
||||
extern "C" object * lean_nat_big_div(object * a1, object * a2) {
|
||||
|
|
|
|||
11
tests/lean/run/bigmul.lean
Normal file
11
tests/lean/run/bigmul.lean
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
@[noinline] def f (x : Nat) :=
|
||||
1000000000000000000000000000000
|
||||
|
||||
@[noinline] def tst1 (n : Nat) : IO Unit := do
|
||||
IO.println (n * f n)
|
||||
|
||||
@[noinline] def tst2 (n : Nat) : IO Unit := do
|
||||
IO.println (f n * n)
|
||||
|
||||
#eval tst1 0
|
||||
#eval tst2 0
|
||||
Loading…
Add table
Reference in a new issue