Fix <rdar://problem/5602936> Need to resolve new GCC 4.2 warnings.
authormrowe@apple.com <mrowe@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 22 Nov 2007 03:08:41 +0000 (03:08 +0000)
committermrowe@apple.com <mrowe@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 22 Nov 2007 03:08:41 +0000 (03:08 +0000)
Reviewed by Tim Hatcher.

Fix all warnings emitted by GCC 4.2 when building JavaScriptCore.  This allows builds with
-Werror to succeed.  At present they will crash when executed due to code that is not safe
under strict aliasing (<rdar://problem/5536806>).

This required some format strings to be modified in WebCore and WebKit as their format
specifiers did not match the argument type.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@27947 268f45cc-cd09-0410-ab3c-d52691b4dbfc

13 files changed:
JavaScriptCore/ChangeLog
JavaScriptCore/Configurations/Base.xcconfig
JavaScriptCore/kjs/date_object.cpp
JavaScriptCore/kjs/dtoa.cpp
JavaScriptCore/pcre/pcre_exec.cpp
JavaScriptCore/wtf/Assertions.cpp
JavaScriptCore/wtf/Assertions.h
WebCore/ChangeLog
WebCore/loader/icon/IconDatabase.cpp
WebCore/platform/mac/TextCodecMac.cpp
WebCore/storage/Database.cpp
WebKit/mac/ChangeLog
WebKit/mac/Misc/WebGraphicsExtras.c

index f8face5e84b41af0401a087680ac4dee87dc0d17..e3678c2ae57069a850eb9efaac06a8bc252ff922 100644 (file)
@@ -1,3 +1,23 @@
+2007-11-20  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Tim Hatcher.
+
+        <rdar://problem/5602936> Need to resolve new GCC 4.2 warnings
+
+        Fix all warnings emitted by GCC 4.2 when building JavaScriptCore.  This allows builds with
+        -Werror to succeed.  At present they will crash when executed due to code that is not safe
+        under strict aliasing (<rdar://problem/5536806>).
+
+        * Configurations/Base.xcconfig: Exclude the -Wno-long-double flag when building with GCC 4.2.
+        * kjs/date_object.cpp:
+        (KJS::formatTime): Test whether the stack-allocated string is empty rather than at a non-null address.
+        * kjs/dtoa.cpp:
+        (Bigint::): Tweak formatting to silence warnings.
+        * pcre/pcre_exec.cpp:
+        (match): Tweak formatting to silence warnings
+        * wtf/Assertions.cpp: Add printf format attribute to functions that warrant it.
+        * wtf/Assertions.h: Ditto.
+
 2007-11-19  Kevin Ollivier  <kevino@theolliviers.com>
 
         wx port build fix (wx headers include ctype functions).
index 0e53f10b57825f7b1c587706c57e90fc8299315d..50a7eaaaea4033fa9897d455bf1d5f8a5331ec9c 100644 (file)
@@ -23,7 +23,7 @@ LINKER_DISPLAYS_MANGLED_NAMES = YES;
 PREBINDING = NO;
 VALID_ARCHS = i386 ppc x86_64 ppc64;
 WARNING_CFLAGS = $(WARNING_CFLAGS_$(CURRENT_ARCH));
-WARNING_CFLAGS_BASE = -Wall -W -Wcast-align -Wchar-subscripts -Wformat-security -Wmissing-format-attribute -Wpointer-arith -Wwrite-strings -Wno-format-y2k -Wno-long-double -Wundef;
+WARNING_CFLAGS_BASE = -Wall -W -Wcast-align -Wchar-subscripts -Wformat-security -Wmissing-format-attribute -Wpointer-arith -Wwrite-strings -Wno-format-y2k -Wundef;
 WARNING_CFLAGS_ = $(WARNING_CFLAGS_BASE) -Wshorten-64-to-32;
 WARNING_CFLAGS_i386 = $(WARNING_CFLAGS_BASE) -Wshorten-64-to-32;
 WARNING_CFLAGS_ppc = $(WARNING_CFLAGS_BASE) -Wshorten-64-to-32;
index 55ca2bc1a037ad28dae6345d08ac355926dcc415..2107fae71bc177dd77bab4b515714c9554adbb2c 100644 (file)
@@ -229,7 +229,7 @@ static UString formatTime(const GregorianDateTime &t, bool utc)
         struct tm gtm = t;
         strftime(tzname, sizeof(tzname), "%Z", &gtm);
 
-        if (tzname) {
+        if (tzname[0]) {
             snprintf(buffer, sizeof(buffer), "%02d:%02d:%02d GMT%c%02d%02d (%s)",
                 t.hour, t.minute, t.second,
                 gmtoffset(t) < 0 ? '-' : '+', offset / (60*60), (offset / 60) % 60, tzname);
index 7c718aefdf5d260557c64591ff65992bcf17ce9a..192bd01492cc0505c16826c0e6651f38fbeaf203 100644 (file)
@@ -2974,7 +2974,7 @@ dtoa
                                        if (dval(d) > 0.5 + dval(eps))
                                                goto bump_up;
                                        else if (dval(d) < 0.5 - dval(eps)) {
-                                               while(*--s == '0');
+                                               while (*--s == '0') { }
                                                s++;
                                                goto ret1;
                                                }
@@ -3293,7 +3293,7 @@ dtoa
 #ifdef Honor_FLT_ROUNDS
 trimzeros:
 #endif
-               while(*--s == '0');
+               while (*--s == '0') { }
                s++;
                }
  ret:
index 22aa9aef3e412f1fc5d42d2609cf8e81d598ee67..7a0315b2d8a0f05da10a30a70283118ee5a4861a 100644 (file)
@@ -1657,7 +1657,7 @@ RECURSE:
                                 if (stack.currentFrame->eptr >= md->end_subject ||
                                     (*stack.currentFrame->eptr < 128 && (md->ctypes[*stack.currentFrame->eptr] & ctype_space) != 0))
                                     RRETURN_NO_MATCH;
-                                while (++stack.currentFrame->eptr < md->end_subject && ISMIDCHAR(*stack.currentFrame->eptr));
+                                while (++stack.currentFrame->eptr < md->end_subject && ISMIDCHAR(*stack.currentFrame->eptr)) { }
                             }
                             break;
                             
@@ -1675,7 +1675,7 @@ RECURSE:
                                 if (stack.currentFrame->eptr >= md->end_subject ||
                                     (*stack.currentFrame->eptr < 128 && (md->ctypes[*stack.currentFrame->eptr] & ctype_word) != 0))
                                     RRETURN_NO_MATCH;
-                                while (++stack.currentFrame->eptr < md->end_subject && ISMIDCHAR(*stack.currentFrame->eptr));
+                                while (++stack.currentFrame->eptr < md->end_subject && ISMIDCHAR(*stack.currentFrame->eptr)) { }
                             }
                             break;
                             
index 1033cd8a4a4d914f857921c636930b599b001e84..43f3ef7cfcd08dde024ae467e5209ba63745c329 100644 (file)
 
 extern "C" {
 
-// This is to work around the "you should use a printf format attribute" warning on GCC
-// We can't use _attribute__ ((format (printf, 2, 3))) since we allow %@
-static int (* vfprintf_no_warning)(FILE *, const char*, va_list) = vfprintf;
-
+WTF_ATTRIBUTE_PRINTF(1, 0)
 static void vprintf_stderr_common(const char* format, va_list args)
 {
 #if PLATFORM(MAC)
@@ -91,9 +88,10 @@ static void vprintf_stderr_common(const char* format, va_list args)
         } while (size > 1024);
     }
 #endif
-        vfprintf_no_warning(stderr, format, args);
+    vfprintf(stderr, format, args);
 }
 
+WTF_ATTRIBUTE_PRINTF(1, 2)
 static void printf_stderr_common(const char* format, ...)
 {
     va_list args;
index 68aa808f78956012c55dda82b7347a5eb99a46c4..74ea91c32444e263f1bd1fc6826073c3a5775253 100644 (file)
 #define WTF_PRETTY_FUNCTION __FUNCTION__
 #endif
 
+// WTF logging functions can process %@ in the format string to log a NSObject* but the printf format attribute
+// emits a warning when %@ is used in the format string.  Until <rdar://problem/5195437> is resolved we can't include
+// the attribute when being used from Objective-C code in case it decides to use %@.
+#if COMPILER(GCC) && !defined(__OBJC__)
+#define WTF_ATTRIBUTE_PRINTF(formatStringArgument, extraArguments) __attribute__((__format__(printf, formatStringArgument, extraArguments)))
+#else
+#define WTF_ATTRIBUTE_PRINTF(formatStringArgument, extraArguments) 
+#endif
+
 /* These helper functions are always declared, but not necessarily always defined if the corresponding function is disabled. */
 
 #ifdef __cplusplus
@@ -98,12 +107,12 @@ typedef struct {
 } WTFLogChannel;
 
 void WTFReportAssertionFailure(const char* file, int line, const char* function, const char* assertion);
-void WTFReportAssertionFailureWithMessage(const char* file, int line, const char* function, const char* assertion, const char* format, ...);
+void WTFReportAssertionFailureWithMessage(const char* file, int line, const char* function, const char* assertion, const char* format, ...) WTF_ATTRIBUTE_PRINTF(5, 6);
 void WTFReportArgumentAssertionFailure(const char* file, int line, const char* function, const char* argName, const char* assertion);
-void WTFReportFatalError(const char* file, int line, const char* function, const char* format, ...) ;
-void WTFReportError(const char* file, int line, const char* function, const char* format, ...);
-void WTFLog(WTFLogChannel* channel, const char* format, ...);
-void WTFLogVerbose(const char* file, int line, const char* function, WTFLogChannel* channel, const char* format, ...);
+void WTFReportFatalError(const char* file, int line, const char* function, const char* format, ...) WTF_ATTRIBUTE_PRINTF(4, 5);
+void WTFReportError(const char* file, int line, const char* function, const char* format, ...) WTF_ATTRIBUTE_PRINTF(4, 5);
+void WTFLog(WTFLogChannel* channel, const char* format, ...) WTF_ATTRIBUTE_PRINTF(2, 3);
+void WTFLogVerbose(const char* file, int line, const char* function, WTFLogChannel* channel, const char* format, ...) WTF_ATTRIBUTE_PRINTF(5, 6);
 
 #ifdef __cplusplus
 }
index 0b9f70c867980da2fa6fe87b286220cf6af8ade7..b7b551b65c003d7d96b870a38842997674f50439 100644 (file)
@@ -1,3 +1,19 @@
+2007-11-21  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Tim Hatcher.
+
+        Changes due to <rdar://problem/5602936> Need to resolve new GCC 4.2 warnings
+
+        Update format strings to use format specifiers that match the argument types.
+
+        * loader/icon/IconDatabase.cpp:
+        (WebCore::IconDatabase::performURLImport):
+        (WebCore::IconDatabase::writeToDatabase):
+        * platform/mac/TextCodecMac.cpp:
+        (WebCore::TextCodecMac::decode):
+        * storage/Database.cpp:
+        (WebCore::Database::deliverAllPendingCallbacks):
+
 2007-11-21  Xan Lopez  <xan@gnome.org>
 
         Reviewed by Alp Toker.
index 562e5b8f4576d511e748e0991f7a354b085b4028..6727b34ae5ce9675248588d44e2f4013bb13ed71 100644 (file)
@@ -1287,7 +1287,7 @@ void IconDatabase::performURLImport()
         }
     }
 
-    LOG(IconDatabase, "Notifying %i interested page URLs that their icon URL is known due to the import", urlsToNotify.size());
+    LOG(IconDatabase, "Notifying %zu interested page URLs that their icon URL is known due to the import", urlsToNotify.size());
     // Now that we don't hold any locks, perform the actual notifications
     for (unsigned i = 0; i < urlsToNotify.size(); ++i) {
         LOG(IconDatabase, "Notifying icon info known for pageURL %s", urlsToNotify[i].ascii().data());
@@ -1527,7 +1527,7 @@ bool IconDatabase::writeToDatabase()
     
     for (unsigned i = 0; i < iconSnapshots.size(); ++i) {
         writeIconSnapshotToSQLDatabase(iconSnapshots[i]);
-        LOG(IconDatabase, "Wrote IconRecord for IconURL %s with timeStamp of %li to the DB", urlForLogging(iconSnapshots[i].iconURL).ascii().data(), iconSnapshots[i].timestamp);
+        LOG(IconDatabase, "Wrote IconRecord for IconURL %s with timeStamp of %i to the DB", urlForLogging(iconSnapshots[i].iconURL).ascii().data(), iconSnapshots[i].timestamp);
     }
     
     for (unsigned i = 0; i < pageSnapshots.size(); ++i) {
index fc6d71b78e44d084571d1aed3b7a0187688432b9..b233e66131861a3752ec164035bf472410552b0d 100644 (file)
@@ -146,7 +146,7 @@ OSStatus TextCodecMac::decode(const unsigned char* inputBuffer, int inputBufferL
         if (status == kTECPartialCharErr && bytesRead == 0) {
             // Handle the case where the partial character was not converted.
             if (bytesToPutInBuffer >= spaceInBuffer) {
-                LOG_ERROR("TECConvertText gave a kTECPartialCharErr but read none of the %u bytes in the buffer", sizeof(m_bufferedBytes));
+                LOG_ERROR("TECConvertText gave a kTECPartialCharErr but read none of the %zu bytes in the buffer", sizeof(m_bufferedBytes));
                 m_numBufferedBytes = 0;
                 status = kTECUnmappableElementErr; // should never happen, but use this error code
             } else {
@@ -236,7 +236,7 @@ String TextCodecMac::decode(const char* bytes, size_t length, bool flush)
                 break;
             }
             default:
-                LOG_ERROR("text decoding failed with error %d", status);
+                LOG_ERROR("text decoding failed with error %zu", status);
                 m_error = true;
                 return String();
         }
index 0b83be49e015244afa628cb7cf6211e6d632f1fa..e9fcd63bc7ab885cfbd1a09af87adaa82f1e53f2 100644 (file)
@@ -505,7 +505,7 @@ void Database::deliverAllPendingCallbacks()
         s_globalCallbackScheduled = false;
     }
 
-    LOG(StorageAPI, "Having %u databases deliver their pending callbacks", databases.size());
+    LOG(StorageAPI, "Having %zu databases deliver their pending callbacks", databases.size());
     for (unsigned i = 0; i < databases.size(); ++i)
         databases[i]->deliverPendingCallback();
 }
index a6b03a6a3691090cfe8db4e5c9d7c9984104783e..5c32b35d6988000fa9cc2f9c7ca58ccdf361a058 100644 (file)
@@ -1,3 +1,14 @@
+2007-11-21  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Tim Hatcher.
+
+        Changes due to <rdar://problem/5602936> Need to resolve new GCC 4.2 warnings
+
+        Update format strings to use format specifiers that match the argument types.
+
+        * Misc/WebGraphicsExtras.c:
+        (WebConvertBGRAToARGB):
+
 2007-11-19  Brady Eidson <beidson@apple.com>
 
         Reviewed by Maciej
index bbc36b05571273f4c326c89244f3e3b537809501..0832c6c21c06e8b18978acc99bd7e0c771d34aba 100644 (file)
@@ -49,7 +49,7 @@ unsigned WebConvertBGRAToARGB(unsigned char *offscreenBuffer, int rowBytes, int
     uint8_t vImagePermuteMap[4] = { 3, 2, 1, 0 }; // Where { 0, 1, 2, 3 } would leave the channels unchanged; this map converts BGRA to ARGB
     vImage_Error vImageError = softLink_vImagePermuteChannels_ARGB8888(&vImage, &vImage, vImagePermuteMap, 0);
     if (vImageError) {
-        LOG_ERROR("Could not convert BGRA image to ARGB: %d", vImageError);
+        LOG_ERROR("Could not convert BGRA image to ARGB: %zd", vImageError);
         return FALSE;
     }