diff options
author | Thomas Koenig <tkoenig@gcc.gnu.org> | 2015-07-01 16:43:53 +0000 |
---|---|---|
committer | Thomas Koenig <tkoenig@gcc.gnu.org> | 2015-07-01 16:43:53 +0000 |
commit | c219aeb7dea32513053b905ae584f19cc0813852 (patch) | |
tree | 2f762c8a361c076863f419159d4a098030dac9d5 /gcc/fortran/arith.c | |
parent | 1e67793833846d12abe78f4291a07773d2f13a04 (diff) | |
download | gcc-c219aeb7dea32513053b905ae584f19cc0813852.zip gcc-c219aeb7dea32513053b905ae584f19cc0813852.tar.gz gcc-c219aeb7dea32513053b905ae584f19cc0813852.tar.bz2 |
arith.c (gfc_arith_divide): With -Winteger-division...
2015-07-01 Thomas Koenig <tkoenig@gcc.gnu.org>
* arith.c (gfc_arith_divide): With -Winteger-division,
warn about contant integer division if there is a non-zero
remainder.
* invoke.texi: Document -Winteger-division.
* lang.opt: Add -Winteger-division.
2015-07-01 Thomas Koenig <tkoenig@gcc.gnu.org>
* gfortran.dg/warn_conversion_8.f90: New test.
From-SVN: r225262
Diffstat (limited to 'gcc/fortran/arith.c')
-rw-r--r-- | gcc/fortran/arith.c | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/gcc/fortran/arith.c b/gcc/fortran/arith.c index d51fbc2..6c31b70 100644 --- a/gcc/fortran/arith.c +++ b/gcc/fortran/arith.c @@ -731,8 +731,28 @@ gfc_arith_divide (gfc_expr *op1, gfc_expr *op2, gfc_expr **resultp) break; } - mpz_tdiv_q (result->value.integer, op1->value.integer, - op2->value.integer); + if (warn_integer_division) + { + mpz_t r; + mpz_init (r); + mpz_tdiv_qr (result->value.integer, r, op1->value.integer, + op2->value.integer); + + if (mpz_cmp_si (r, 0) != 0) + { + char *p; + p = mpz_get_str (NULL, 10, result->value.integer); + gfc_warning_now (OPT_Winteger_division, "Integer division " + "truncated to constant %qs at %L", p, + &op1->where); + free (p); + } + mpz_clear (r); + } + else + mpz_tdiv_q (result->value.integer, op1->value.integer, + op2->value.integer); + break; case BT_REAL: |