aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/arith.c
diff options
context:
space:
mode:
authorThomas Koenig <tkoenig@gcc.gnu.org>2015-07-01 16:43:53 +0000
committerThomas Koenig <tkoenig@gcc.gnu.org>2015-07-01 16:43:53 +0000
commitc219aeb7dea32513053b905ae584f19cc0813852 (patch)
tree2f762c8a361c076863f419159d4a098030dac9d5 /gcc/fortran/arith.c
parent1e67793833846d12abe78f4291a07773d2f13a04 (diff)
downloadgcc-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.c24
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: