From 4b02020f3a36b70d329cb2656377939c52cf44ca Mon Sep 17 00:00:00 2001 From: burnus Date: Tue, 14 Aug 2012 10:22:06 +0000 Subject: [PATCH] 2012-08-14 Tobias Burnus PR fortran/54234 * check.c (gfc_check_cmplx): Add -Wconversion warning when converting higher-precision REAL to default-precision CMPLX without kind= parameter. 2012-08-14 Tobias Burnus PR fortran/54234 * gfortran.dg/warn_conversion_4.f90: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@190378 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/ChangeLog | 7 +++++++ gcc/fortran/check.c | 11 +++++++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/warn_conversion_4.f90 | 18 ++++++++++++++++++ 4 files changed, 41 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/warn_conversion_4.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index b0fe190..3a62890 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2012-08-14 Tobias Burnus + + PR fortran/54234 + * check.c (gfc_check_cmplx): Add -Wconversion warning + when converting higher-precision REAL to default-precision + CMPLX without kind= parameter. + 2012-08-12 Tobias Burnus PR fortran/54221 diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c index c5bf79b..2235b52 100644 --- a/gcc/fortran/check.c +++ b/gcc/fortran/check.c @@ -1278,6 +1278,17 @@ gfc_check_cmplx (gfc_expr *x, gfc_expr *y, gfc_expr *kind) if (kind_check (kind, 2, BT_COMPLEX) == FAILURE) return FAILURE; + if (!kind && gfc_option.gfc_warn_conversion + && x->ts.type == BT_REAL && x->ts.kind > gfc_default_real_kind) + gfc_warning_now ("Conversion from %s to default-kind COMPLEX(%d) at %L " + "might loose precision, consider using the KIND argument", + gfc_typename (&x->ts), gfc_default_real_kind, &x->where); + else if (y && !kind && gfc_option.gfc_warn_conversion + && y->ts.type == BT_REAL && y->ts.kind > gfc_default_real_kind) + gfc_warning_now ("Conversion from %s to default-kind COMPLEX(%d) at %L " + "might loose precision, consider using the KIND argument", + gfc_typename (&y->ts), gfc_default_real_kind, &y->where); + return SUCCESS; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e1e1283..1ec4e0d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-08-14 Tobias Burnus + + PR fortran/54234 + * gfortran.dg/warn_conversion_4.f90: New. + 2012-08-14 Jakub Jelinek PR middle-end/53411 diff --git a/gcc/testsuite/gfortran.dg/warn_conversion_4.f90 b/gcc/testsuite/gfortran.dg/warn_conversion_4.f90 new file mode 100644 index 0000000..f911741 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/warn_conversion_4.f90 @@ -0,0 +1,18 @@ +! { dg-do compile } +! { dg-options "-Wconversion" } +! +! PR fortran/54234 +! +! +module fft_mod + implicit none + integer, parameter :: dp=kind(0.0d0) +contains + subroutine test + integer :: x + x = int (abs (cmplx(2.3,0.1))) + x = int (abs (cmplx(2.3_dp,0.1))) ! { dg-warning "Conversion from REAL.8. to default-kind COMPLEX.4. at .1. might loose precision, consider using the KIND argument" } + x = int (abs (cmplx(2.3,0.1_dp))) ! { dg-warning "Conversion from REAL.8. to default-kind COMPLEX.4. at .1. might loose precision, consider using the KIND argument" } + x = int (abs (cmplx(2.3_dp,0.1_dp))) ! { dg-warning "Conversion from REAL.8. to default-kind COMPLEX.4. at .1. might loose precision, consider using the KIND argument" } + end subroutine test +end module fft_mod -- 2.7.4