diff --git a/tools/qfcc/include/qfcc.h b/tools/qfcc/include/qfcc.h index b6f1ef5c5..3b5537a16 100644 --- a/tools/qfcc/include/qfcc.h +++ b/tools/qfcc/include/qfcc.h @@ -603,6 +603,7 @@ typedef struct { qboolean undefined_function; // Warn on undefined function use qboolean uninited_variable; // Warn on use of uninitialized vars qboolean vararg_integer; // Warn on passing an integer to vararg func + qboolean integer_divide; // Warn on integer constant division } warn_options_t; typedef struct { diff --git a/tools/qfcc/source/expr.c b/tools/qfcc/source/expr.c index 9c2216d57..736e6caad 100644 --- a/tools/qfcc/source/expr.c +++ b/tools/qfcc/source/expr.c @@ -736,7 +736,8 @@ do_op_integer (int op, expr_t *e1, expr_t *e2) e1->e.integer_val *= i2; break; case '/': - warning (e2, "%d / %d == %d", i1, i2, i1 / i2); + if (options.warnings.integer_divide) + warning (e2, "%d / %d == %d", i1, i2, i1 / i2); e1->e.integer_val /= i2; break; case '&': @@ -812,7 +813,8 @@ do_op_uinteger (int op, expr_t *e1, expr_t *e2) e1->e.uinteger_val *= i2; break; case '/': - warning (e2, "%d / %d == %d", i1, i2, i1 / i2); + if (options.warnings.integer_divide) + warning (e2, "%d / %d == %d", i1, i2, i1 / i2); e1->e.uinteger_val /= i2; break; case '&': diff --git a/tools/qfcc/source/qfcc.c b/tools/qfcc/source/qfcc.c index 81bb968d9..33e042aac 100644 --- a/tools/qfcc/source/qfcc.c +++ b/tools/qfcc/source/qfcc.c @@ -793,11 +793,13 @@ DecodeArgs (int argc, char **argv) options.warnings.undefined_function = true; options.warnings.uninited_variable = true; options.warnings.vararg_integer = true; + options.warnings.integer_divide = true; } else if (!(strcasecmp (temp, "none"))) { options.warnings.cow = false; options.warnings.undefined_function = false; options.warnings.uninited_variable = false; options.warnings.vararg_integer = false; + options.warnings.integer_divide = false; } else if (!(strcasecmp (temp, "cow"))) { options.warnings.cow = true; } else if (!(strcasecmp (temp, "no-cow"))) { @@ -818,6 +820,10 @@ DecodeArgs (int argc, char **argv) options.warnings.vararg_integer = true; } else if (!(strcasecmp (temp, "no-vararg-integer"))) { options.warnings.vararg_integer = false; + } else if (!(strcasecmp (temp, "integer-divide"))) { + options.warnings.integer_divide = true; + } else if (!(strcasecmp (temp, "no-integer-divide"))) { + options.warnings.integer_divide = false; } temp = strtok (NULL, ","); }