From b41c3a3565631bdb20611126cae9bca4a4bc81f9 Mon Sep 17 00:00:00 2001
From: Eli Zaretskii <eliz@gnu.org>
Date: Fri, 16 Sep 2011 13:25:39 +0300
Subject: [PATCH] Fix a compilation error with MinGW GCC 3.x in tiff_handler.

 src/image.c (tiff_handler): Work around a bug in MinGW GCC 3.x (see
 GCC PR/17406) by declaring this function with external scope.
---
 src/ChangeLog |  5 +++++
 src/image.c   | 15 +++++++++++++--
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/src/ChangeLog b/src/ChangeLog
index 15281f47438..cf75c28c385 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,8 @@
+2011-09-16  Eli Zaretskii  <eliz@gnu.org>
+
+	* image.c (tiff_handler): Work around a bug in MinGW GCC 3.x (see
+	GCC PR/17406) by declaring this function with external scope.
+
 2011-09-15  Paul Eggert  <eggert@cs.ucla.edu>
 
 	* editfns.c (Fformat): Fix bug in text-property fix (Bug#9514).
diff --git a/src/image.c b/src/image.c
index db201d5a831..ef72745a72f 100644
--- a/src/image.c
+++ b/src/image.c
@@ -6745,10 +6745,20 @@ tiff_size_of_memory (thandle_t data)
   return ((tiff_memory_source *) data)->len;
 }
 
+/* GCC 3.x on x86 Windows targets has a bug that triggers an internal
+   compiler error compiling tiff_handler, see Bugzilla bug #17406
+   (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17406).  Declaring
+   this function as external works around that problem.  */
+#if defined (__MINGW32__) && __GNUC__ == 3
+# define MINGW_STATIC
+#else
+# define MINGW_STATIC static
+#endif
 
-static void tiff_handler (const char *, const char *, const char *, va_list)
+MINGW_STATIC void
+tiff_handler (const char *, const char *, const char *, va_list)
   ATTRIBUTE_FORMAT_PRINTF (3, 0);
-static void
+MINGW_STATIC void
 tiff_handler (const char *log_format, const char *title,
 	      const char *format, va_list ap)
 {
@@ -6762,6 +6772,7 @@ tiff_handler (const char *log_format, const char *title,
   add_to_log (log_format, build_string (title),
 	      make_string (buf, max (0, min (len, sizeof buf - 1))));
 }
+#undef MINGW_STATIC
 
 static void tiff_error_handler (const char *, const char *, va_list)
   ATTRIBUTE_FORMAT_PRINTF (2, 0);
-- 
2.39.5