mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
Fix division-by-zero checks on a /= 0 and b /= 0f #2558.
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
### Fixes
|
||||
- `Foo.is_eq` would return false if the type was a `typedef` and had an overload, but the underlying type was not comparable.
|
||||
- Remove division-by-zero checks for floating point in safe mode #2556.
|
||||
- Fix division-by-zero checks on `a /= 0` and `b /= 0f` #2558.
|
||||
|
||||
### Stdlib changes
|
||||
|
||||
|
||||
@@ -7326,10 +7326,9 @@ BITSTRUCT_OK:
|
||||
switch (right->const_expr.const_kind)
|
||||
{
|
||||
case CONST_INTEGER:
|
||||
if (int_is_zero(right->const_expr.ixx)) RETURN_SEMA_ERROR(right, operator == BINARYOP_MOD_ASSIGN ? "% by zero not allowed." : "Division by zero not allowed.");
|
||||
if (int_is_zero(right->const_expr.ixx)) RETURN_SEMA_ERROR(right, operator == BINARYOP_MOD_ASSIGN ? "%% by zero not allowed." : "Division by zero not allowed.");
|
||||
break;
|
||||
case CONST_FLOAT:
|
||||
if (right->const_expr.fxx.f == 0) RETURN_SEMA_ERROR(right, operator == BINARYOP_MOD_ASSIGN ? "% by zero not allowed." : "% by zero not allowed.");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
14
test/test_suite/expressions/assign_div_by.c3
Normal file
14
test/test_suite/expressions/assign_div_by.c3
Normal file
@@ -0,0 +1,14 @@
|
||||
module test;
|
||||
struct Foo
|
||||
{
|
||||
float val;
|
||||
int ival;
|
||||
}
|
||||
|
||||
fn int main()
|
||||
{
|
||||
Foo bar;
|
||||
bar.val /= 0f;
|
||||
bar.ival /= 0; // #error: Division by zero not allowed
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user