re PR fortran/47359 (Recursive functions of intrinsic names generates invalid assembler)
authorThomas Koenig <tkoenig@netcologne.de>
Sat, 6 Jun 2015 16:12:39 +0000 (16:12 +0000)
committerThomas Koenig <tkoenig@gcc.gnu.org>
Sat, 6 Jun 2015 16:12:39 +0000 (16:12 +0000)
commitcbf560d708abe7f95490626d44f29d7c93650594
tree795f1293f203f94163c691716e122d7f76b5c07b
parent5a7929c86043933f5190154abc038dac4dbc122d
re PR fortran/47359 (Recursive functions of intrinsic names generates invalid assembler)

2015-06-06  Thomas Koenig  <tkoenig@netcologne.de>

PR fortran/47359
* arith.c (eval_intrinsic_op): Set warn flag for
gfc_type_convert_binary if -Wconversion or -Wconversion-extra
are set.
(wprecision_real_real): New function.
(wprecision_int_real): New function.
(gfc_int2int): If -fno-range-check and -Wconversion are specified
and it is a narrowing conversion, warn.
(gfc_int2real): If there is a change in value for the conversion,
warn.
(gfc_int2complex):  Likewise.
(gfc_real2int): If there is a fractional part to the real number,
warn with -Wconversion, otherwise warn with -Wconversion-extra.
(gfc_real2real): Emit warning if the constant was changed by
conversion with either -Wconversion or -Wconversion-extra.  With
-Wconversion-extra, warn if no warning was issued earlier.
(gfc_real2complex):  Likewise.
(gfc_complex2int): For -Wconversion or -Wconversion-extra, if
there was an imaginary part, warn; otherwise, warn for change in
value.  Warn with -Wconversion-extra if no other warning was
issued.
(gfc_complex2real): For -Wconversion or -Wconversion-extra, if
there was an imaginary part, warn; otherwise, warn for change in
value. Warn with -Wconversion-extra if no other warning was
issued.
(gfc_complex2complex):  For -Wconversion, warn if the value of
either the real or the imaginary part was changed.  Warn for
-Wconversion-extra if no prior warning was issued.
* expr.c (gfc_check_assign):  Remove check for change in value.
* primary.c (match_real_constant): For -Wconversion-extra, check
against a number in which the last non-zero digit has been
replaced with a zero.  If the number compares equal, warn.
* intrinsic.c (gfc_convert_type_warn):  Do not warn about constant
conversions.

2015-06-06  Thomas Koenig  <tkoenig@netcologne.de>

PR fortran/47359
* gfortran.dg/array_constructor_type_17.f03: Adjust error message.
* gfortran.dg/warn_conversion.f90: Add warning for change in value
for assignment.
* gfortran.dg/warn_conversion_3.f90: Add warnings.
* gfortran.dg/warn_conversion_5.f90: New test.
* gfortran.dg/warn_conversion_6.f90: New test.
* gfortran.dg/warn_conversion_7.f90: New test.

From-SVN: r224190
12 files changed:
gcc/fortran/ChangeLog
gcc/fortran/arith.c
gcc/fortran/expr.c
gcc/fortran/intrinsic.c
gcc/fortran/primary.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/array_constructor_type_17.f03
gcc/testsuite/gfortran.dg/warn_conversion.f90
gcc/testsuite/gfortran.dg/warn_conversion_3.f90
gcc/testsuite/gfortran.dg/warn_conversion_5.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/warn_conversion_6.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/warn_conversion_7.f90 [new file with mode: 0644]