Patchwork [libgfortran] Silence compiler warnings on MinGW(64)

login
register
mail settings
Submitter Tobias Burnus
Date May 31, 2012, 9:05 p.m.
Message ID <4FC7DD16.5040903@net-b.de>
Download mbox | patch
Permalink /patch/162236/
State New
Headers show

Comments

Tobias Burnus - May 31, 2012, 9:05 p.m.
This patch tries to silence most warnings reported for MinGW64 by 
Nightstrike at http://pastebin.mozilla.org/1652586

One item is a true bug. I didn't fix the coarray-related warnings as the 
ABI will still change. And I ignored the last ones as rstride is set. 
(The compiler cannot see that "dim" is always >= 0.)

Build on x86-64-gnu-linux.
OK for the trunk?

Tobias
Janne Blomqvist - June 1, 2012, 5:41 a.m.
On Fri, Jun 1, 2012 at 12:05 AM, Tobias Burnus <burnus@net-b.de> wrote:
> This patch tries to silence most warnings reported for MinGW64 by
> Nightstrike at http://pastebin.mozilla.org/1652586
>
> One item is a true bug. I didn't fix the coarray-related warnings as the ABI
> will still change. And I ignored the last ones as rstride is set. (The
> compiler cannot see that "dim" is always >= 0.)
>
> Build on x86-64-gnu-linux.
> OK for the trunk?

Ok.

Patch

2012-06-01  Tobias Burnus  <burnus@net-b.de>

	* intrinsics/chmod.c (chmod_func): On MinGW, don't set is_dir and
	fix octal-mode handling.
	* io/unit.c (get_internal_unit): Add cast.
	* io/unix.c (min): Undef "min" before defining it.
	* runtime/backtrace.c (show_backtrace): Move label into
	ifndef __MINGW__ block.

diff --git a/libgfortran/intrinsics/chmod.c b/libgfortran/intrinsics/chmod.c
index e8a81d5..43b8de2 100644
--- a/libgfortran/intrinsics/chmod.c
+++ b/libgfortran/intrinsics/chmod.c
@@ -74,7 +74,10 @@  chmod_func (char *name, char *mode, gfc_charlen_type name_len,
   bool ugo[3];
   bool rwxXstugo[9];
   int set_mode, part;
-  bool is_dir, honor_umask, continue_clause = false;
+  bool honor_umask, continue_clause = false;
+#ifndef __MINGW32__
+  bool is_dir;
+#endif
   mode_t mode_mask, file_mode, new_mode;
   struct stat stat_buf;
 
@@ -93,10 +96,10 @@  chmod_func (char *name, char *mode, gfc_charlen_type name_len,
   if (mode[0] >= '0' && mode[0] <= '9')
     {
 #ifdef __MINGW32__
-      unsigned mode;
-      if (sscanf (mode, "%o", &mode) != 1)
+      unsigned fmode;
+      if (sscanf (mode, "%o", &fmode) != 1)
 	return 1;
-      file_mode = (mode_t) mode;
+      file_mode = (mode_t) fmode;
 #else
       if (sscanf (mode, "%o", &file_mode) != 1)
 	return 1;
@@ -109,7 +112,9 @@  chmod_func (char *name, char *mode, gfc_charlen_type name_len,
     return 1;
 
   file_mode = stat_buf.st_mode & ~S_IFMT;
+#ifndef __MINGW32__
   is_dir = stat_buf.st_mode & S_IFDIR;
+#endif
 
 #ifdef HAVE_UMASK
   /* Obtain the umask without distroying the setting.  */
diff --git a/libgfortran/io/unit.c b/libgfortran/io/unit.c
index 911521d..8b0926d 100644
--- a/libgfortran/io/unit.c
+++ b/libgfortran/io/unit.c
@@ -430,7 +430,8 @@  get_internal_unit (st_parameter_dt *dtp)
 	  else
 	    {
 	      dtp->internal_unit_len =
-		string_len_trim_char4 (dtp->internal_unit_len, dtp->internal_unit);
+		string_len_trim_char4 (dtp->internal_unit_len,
+				       (const gfc_char4_t*) dtp->internal_unit);
 	      iunit->recl = dtp->internal_unit_len;
 	    }
 	}
diff --git a/libgfortran/io/unix.c b/libgfortran/io/unix.c
index c81163f..1a9faea 100644
--- a/libgfortran/io/unix.c
+++ b/libgfortran/io/unix.c
@@ -41,13 +41,6 @@  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #include <errno.h>
 
 
-/* min macro that evaluates its arguments only once.  */
-#define min(a,b)		\
-  ({ typeof (a) _a = (a);	\
-    typeof (b) _b = (b);	\
-    _a < _b ? _a : _b; })
-
-
 /* For mingw, we don't identify files by their inode number, but by a
    64-bit identifier created from a BY_HANDLE_FILE_INFORMATION. */
 #ifdef __MINGW32__
@@ -106,8 +99,19 @@  id_from_fd (const int fd)
   return id_from_handle ((HANDLE) _get_osfhandle (fd));
 }
 
+#endif /* HAVE_WORKING_STAT */
+#endif /* __MINGW32__ */
+
+
+/* min macro that evaluates its arguments only once.  */
+#ifdef min
+#undef min
 #endif
-#endif
+
+#define min(a,b)		\
+  ({ typeof (a) _a = (a);	\
+    typeof (b) _b = (b);	\
+    _a < _b ? _a : _b; })
 
 #ifndef PATH_MAX
 #define PATH_MAX 1024
diff --git a/libgfortran/runtime/backtrace.c b/libgfortran/runtime/backtrace.c
index 6bfc560..9d88d13 100644
--- a/libgfortran/runtime/backtrace.c
+++ b/libgfortran/runtime/backtrace.c
@@ -270,9 +270,9 @@  fallback:
   }
   while (0);
 
+fallback_noerr:
 #endif /* CAN_PIPE */
 
-fallback_noerr:
   /* Fallback to the simple backtrace without addr2line.  */
   state.direct_output = 1;
   _Unwind_Backtrace (trace_function, &state);