@@ -559,6 +559,18 @@ static int expand_assignment(struct expression *expr)
{
expand_expression(expr->left);
expand_expression(expr->right);
+ if (!conservative) {
+ switch (expr->op) {
+ case SPECIAL_DIV_ASSIGN:
+ case SPECIAL_MOD_ASSIGN:
+ if (expr->right->type != EXPR_VALUE)
+ break;
+ if (expr->right->value)
+ break;
+ warning(expr->pos, "division by zero");
+ break;
+ }
+ }
return SIDE_EFFECTS;
}
@@ -59,8 +59,14 @@ div-by-zero.c:17:30: warning: division by zero
div-by-zero.c:18:30: warning: division by zero
div-by-zero.c:19:30: warning: division by zero
div-by-zero.c:21:42: warning: division by zero
+div-by-zero.c:22:30: warning: division by zero
div-by-zero.c:25:42: warning: division by zero
+div-by-zero.c:26:30: warning: division by zero
+div-by-zero.c:29:42: warning: division by zero
+div-by-zero.c:30:42: warning: division by zero
div-by-zero.c:35:37: warning: division by zero
div-by-zero.c:36:37: warning: division by zero
+div-by-zero.c:37:37: warning: division by zero
+div-by-zero.c:38:37: warning: division by zero
* check-error-end
*/