diff options
author | Steven G. Kargl <kargl@gcc.gnu.org> | 2019-10-03 20:46:26 +0000 |
---|---|---|
committer | Steven G. Kargl <kargl@gcc.gnu.org> | 2019-10-03 20:46:26 +0000 |
commit | e23390d29e19a8a6aea06fd3c4cc3990c9977ac8 (patch) | |
tree | a5f8481646a3870a8fef6c6dcdafad2ce7158667 /gcc/fortran/simplify.c | |
parent | 24ec3cc957c4181d8da9972cb2aa212a3e0cec1c (diff) | |
download | gcc-e23390d29e19a8a6aea06fd3c4cc3990c9977ac8.zip gcc-e23390d29e19a8a6aea06fd3c4cc3990c9977ac8.tar.gz gcc-e23390d29e19a8a6aea06fd3c4cc3990c9977ac8.tar.bz2 |
re PR fortran/91497 (-Wconversion warns when doing explicit type conversion)
2019-10-03 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/91497
* simplify.c (gfc_simplify_dble, simplify_intconv, gfc_simplify_real,
gfc_simplify_sngl): Disable -Wconversion and -Wconversion-extra
warnings for explicit conversion of literal constants.
2019-10-03 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/91497
* gfortran.dg/pr91497.f90: New test.
From-SVN: r276532
Diffstat (limited to 'gcc/fortran/simplify.c')
-rw-r--r-- | gcc/fortran/simplify.c | 45 |
1 files changed, 44 insertions, 1 deletions
diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c index 32ebcc0..8c1577e 100644 --- a/gcc/fortran/simplify.c +++ b/gcc/fortran/simplify.c @@ -2189,11 +2189,22 @@ gfc_expr * gfc_simplify_dble (gfc_expr *e) { gfc_expr *result = NULL; + int tmp1, tmp2; if (e->expr_type != EXPR_CONSTANT) return NULL; + /* For explicit conversion, turn off -Wconversion and -Wconversion-extra + warnings. */ + tmp1 = warn_conversion; + tmp2 = warn_conversion_extra; + warn_conversion = warn_conversion_extra = 0; + result = gfc_convert_constant (e, BT_REAL, gfc_default_double_kind); + + warn_conversion = tmp1; + warn_conversion_extra = tmp2; + if (result == &gfc_bad_expr) return &gfc_bad_expr; @@ -3572,6 +3583,7 @@ static gfc_expr * simplify_intconv (gfc_expr *e, int kind, const char *name) { gfc_expr *result = NULL; + int tmp1, tmp2; /* Convert BOZ to integer, and return without range checking. */ if (e->ts.type == BT_BOZ) @@ -3585,7 +3597,17 @@ simplify_intconv (gfc_expr *e, int kind, const char *name) if (e->expr_type != EXPR_CONSTANT) return NULL; + /* For explicit conversion, turn off -Wconversion and -Wconversion-extra + warnings. */ + tmp1 = warn_conversion; + tmp2 = warn_conversion_extra; + warn_conversion = warn_conversion_extra = 0; + result = gfc_convert_constant (e, BT_INTEGER, kind); + + warn_conversion = tmp1; + warn_conversion_extra = tmp2; + if (result == &gfc_bad_expr) return &gfc_bad_expr; @@ -6472,7 +6494,7 @@ gfc_expr * gfc_simplify_real (gfc_expr *e, gfc_expr *k) { gfc_expr *result = NULL; - int kind; + int kind, tmp1, tmp2; /* Convert BOZ to real, and return without range checking. */ if (e->ts.type == BT_BOZ) @@ -6500,7 +6522,17 @@ gfc_simplify_real (gfc_expr *e, gfc_expr *k) if (e->expr_type != EXPR_CONSTANT) return NULL; + /* For explicit conversion, turn off -Wconversion and -Wconversion-extra + warnings. */ + tmp1 = warn_conversion; + tmp2 = warn_conversion_extra; + warn_conversion = warn_conversion_extra = 0; + result = gfc_convert_constant (e, BT_REAL, kind); + + warn_conversion = tmp1; + warn_conversion_extra = tmp2; + if (result == &gfc_bad_expr) return &gfc_bad_expr; @@ -7551,11 +7583,22 @@ gfc_expr * gfc_simplify_sngl (gfc_expr *a) { gfc_expr *result; + int tmp1, tmp2; if (a->expr_type != EXPR_CONSTANT) return NULL; + /* For explicit conversion, turn off -Wconversion and -Wconversion-extra + warnings. */ + tmp1 = warn_conversion; + tmp2 = warn_conversion_extra; + warn_conversion = warn_conversion_extra = 0; + result = gfc_real2real (a, gfc_default_real_kind); + + warn_conversion = tmp1; + warn_conversion_extra = tmp2; + return range_check (result, "SNGL"); } |