------- Comment #16 from fxcoudert at gcc dot gnu dot org 2009-05-03 16:28 ------- Many new warnings:
../../../trunk/libgfortran/runtime/string.c: In function compare0: ../../../trunk/libgfortran/runtime/string.c:39: warning: comparison between signed and unsigned integer expressions Fixed by: Index: runtime/string.c =================================================================== --- runtime/string.c (revision 147057) +++ runtime/string.c (working copy) @@ -36,7 +36,10 @@ /* Strip trailing blanks from the Fortran string. */ len = fstrlen (s1, s1_len); - if (len != strlen(s2)) return 0; /* don't match */ + + if ((size_t) len != strlen(s2)) + return 0; /* don't match */ + return strncasecmp (s1, s2, len) == 0; } ../../../trunk/libgfortran/io/transfer.c: In function read_block_direct: ../../../trunk/libgfortran/io/transfer.c:468: warning: comparison between signed and unsigned integer expressions Fixed by: Index: io/transfer.c =================================================================== --- io/transfer.c (revision 147057) +++ io/transfer.c (working copy) @@ -465,7 +465,7 @@ /* Check whether we exceed the total record length. */ if (dtp->u.p.current_unit->flags.has_recl - && (nbytes > dtp->u.p.current_unit->bytes_left)) + && ((gfc_offset) nbytes > dtp->u.p.current_unit->bytes_left)) { to_read_record = dtp->u.p.current_unit->bytes_left; short_record = 1; ../../../trunk/libgfortran/io/list_read.c: In function nml_read_obj: ../../../trunk/libgfortran/io/list_read.c:2464: warning: comparison between bt and enum <anonymous> ../../../trunk/libgfortran/io/list_read.c: In function nml_get_obj_data: ../../../trunk/libgfortran/io/list_read.c:2712: warning: comparison between bt and enum <anonymous> ../../../trunk/libgfortran/io/list_read.c:2734: warning: comparison between bt and enum <anonymous> ../../../trunk/libgfortran/io/list_read.c:2768: warning: comparison between bt and enum <anonymous> ../../../trunk/libgfortran/io/write.c: In function nml_write_obj: ../../../trunk/libgfortran/io/write.c:1261: warning: comparison between bt and enum <anonymous> ../../../trunk/libgfortran/io/write.c:1339: warning: comparison between bt and enum <anonymous> All these come from the use of two different enums for one purpose: the bt enum in libgfortran/io/io.h and the anonymous enum containing GFC_DTYPE_UNKNOWN, GFC_DTYPE_INTEGER and friends in gcc/fortran/libgfortran.h. I'm not sure at all why there are two different enums, why their constants are sometimes used as if they were interchangeable (all the warnings above come from such uses), but what I know is that they shouldn't: the constants don't even come in the same order! Compare: GFC_DTYPE_UNKNOWN = 0, GFC_DTYPE_INTEGER, GFC_DTYPE_LOGICAL, GFC_DTYPE_REAL, GFC_DTYPE_COMPLEX, GFC_DTYPE_DERIVED, GFC_DTYPE_CHARACTER with BT_NULL, /* ok, null and unknown are close enough */ BT_INTEGER, BT_LOGICAL, BT_CHARACTER, /* oops */ BT_REAL, /* re-oops */ BT_COMPLEX /* final oops */ /* and where is "derived"? */ -- fxcoudert at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Last reconfirmed|2007-10-18 13:22:40 |2009-05-03 16:28:50 date| | Version|4.0.2 |4.5.0 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22423