CLD2Owners/cld2

Build warning on Windows with clang

Opened this issue · 2 comments

Originally reported on Google Code with ID 21

http://build.chromium.org/p/chromium.fyi/builders/Cr%20Win%20Clang/builds/108/steps/compile/logs/stdio

..\..\third_party\cld_2\src\internal\offsetmap.cc(82,43) :  warning(clang): format
specifies type 'long' but the argument has type 'size_type' (aka 'unsigned int') [-Wformat]
  fprintf(fout, "Offsetmap: %ld bytes\n", diffs_.size());
                            ~~~           ^~~~~~~~~~~~~
                            %u

There's no great portable way to printf size_t types. Since this is debugging code,
I suggest this patch:

Nicos-MacBook-Pro:src thakis$ svn diff
Index: internal/offsetmap.cc
===================================================================
--- internal/offsetmap.cc   (revision 165)
+++ internal/offsetmap.cc   (working copy)
@@ -79,7 +79,8 @@
   }

   Flush();    // Make sure any pending entry gets printed
-  fprintf(fout, "Offsetmap: %ld bytes\n", diffs_.size());
+  fprintf(fout, "Offsetmap: %lu bytes\n",
+          static_cast<unsigned long>(diffs_.size()));
   for (int i = 0; i < static_cast<int>(diffs_.size()); ++i) {
     fprintf(fout, "%c%02d ", "&=+-"[OpPart(diffs_[i])], LenPart(diffs_[i]));
     if ((i % 20) == 19) {fprintf(fout, "\n");}

Can you land this, please?

Reported by thakis@chromium.org on 2014-08-18 14:24:33

Committed as r167. For consistency with the for-loop immediately following, I stuck
with static_cast<int> and %d. This should fix your error, please confirm!

Index: offsetmap.cc
===================================================================
--- offsetmap.cc        (revision 166)
+++ offsetmap.cc        (working copy)
@@ -79,7 +79,7 @@
   }

   Flush();    // Make sure any pending entry gets printed
-  fprintf(fout, "Offsetmap: %ld bytes\n", diffs_.size());
+  fprintf(fout, "Offsetmap: %d bytes\n", static_cast<int>(diffs_.size()));
   for (int i = 0; i < static_cast<int>(diffs_.size()); ++i) {
     fprintf(fout, "%c%02d ", "&=+-"[OpPart(diffs_[i])], LenPart(diffs_[i]));
     if ((i % 20) == 19) {fprintf(fout, "\n");}

Reported by andrewhayden@google.com on 2014-08-19 09:18:37

  • Status changed: Fixed
That was fast, thanks!

Reported by thakis@chromium.org on 2014-08-19 15:21:41