clang/gcc: enable a bunch more warnings (#91)

* clang/gcc: enable -pedantic warnings

* suppress a GCC-specific warning in stb_image

* And some clang-specific warnings

* -Wconversion (clang) -Wold-style-cast (clang+gcc)

and fix a few warnings that show up with these (and a few more with
-Wconversion on gcc, even though that's not enabled by default)

* bunch more warnings

* fixes

* remove merge error
diff --git a/examples/Animometer.cpp b/examples/Animometer.cpp
index d770bdf..71c5ef8 100644
--- a/examples/Animometer.cpp
+++ b/examples/Animometer.cpp
@@ -130,7 +130,7 @@
     size_t i = 0;
 
     std::vector<nxt::CommandBuffer> commands(50);
-    for (int j = 0; j < 50; j++) {
+    for (size_t j = 0; j < 50; j++) {
 
         nxt::CommandBufferBuilder builder = device.CreateCommandBufferBuilder()
             .BeginRenderPass(renderpass, framebuffer)
diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
index addb21c..eda1db9 100644
--- a/examples/CMakeLists.txt
+++ b/examples/CMakeLists.txt
@@ -38,6 +38,9 @@
         set_property(TARGET ${target} APPEND PROPERTY COMPILE_OPTIONS "/wd4456")
         # declaration hides previous declaration -- for picojson
         set_property(TARGET ${target} APPEND PROPERTY COMPILE_OPTIONS "/wd4706")
+    else()
+        # re-enable old style casts -- for GLM
+        set_property(TARGET ${target} APPEND PROPERTY COMPILE_OPTIONS "-Wno-old-style-cast")
     endif()
 endfunction()
 
diff --git a/examples/ComputeBoids.cpp b/examples/ComputeBoids.cpp
index cb8ab60..c21ff26 100644
--- a/examples/ComputeBoids.cpp
+++ b/examples/ComputeBoids.cpp
@@ -81,7 +81,7 @@
         }
     }
 
-    for (int i = 0; i < 2; i++) {
+    for (size_t i = 0; i < 2; i++) {
         particleBuffers[i] = device.CreateBufferBuilder()
             .SetAllowedUsage(nxt::BufferUsageBit::TransferDst | nxt::BufferUsageBit::Vertex | nxt::BufferUsageBit::Storage)
             .SetInitialUsage(nxt::BufferUsageBit::TransferDst)
@@ -261,7 +261,7 @@
 
 void initCommandBuffers() {
     static const uint32_t zeroOffsets[1] = {0};
-    for (int i = 0; i < 2; ++i) {
+    for (size_t i = 0; i < 2; ++i) {
         auto& bufferSrc = particleBuffers[i];
         auto& bufferDst = particleBuffers[(i + 1) % 2];
         commandBuffers[i] = device.CreateCommandBufferBuilder()
diff --git a/examples/HelloCompute.cpp b/examples/HelloCompute.cpp
index 91b4c04..1ee27e2 100644
--- a/examples/HelloCompute.cpp
+++ b/examples/HelloCompute.cpp
@@ -35,7 +35,7 @@
     queue = device.CreateQueueBuilder().GetResult();
 
     struct {uint32_t a; float b;} s;
-    memset(&s, sizeof(s), 0);
+    memset(&s, 0, sizeof(s));
     buffer = device.CreateBufferBuilder()
         .SetAllowedUsage(nxt::BufferUsageBit::TransferDst | nxt::BufferUsageBit::Uniform | nxt::BufferUsageBit::Storage)
         .SetInitialUsage(nxt::BufferUsageBit::TransferDst)
diff --git a/examples/HelloTriangle.cpp b/examples/HelloTriangle.cpp
index c5335b5..d98bfb8 100644
--- a/examples/HelloTriangle.cpp
+++ b/examples/HelloTriangle.cpp
@@ -63,7 +63,7 @@
     // Initialize the texture with arbitrary data until we can load images
     std::vector<uint8_t> data(4 * 1024 * 1024, 0);
     for (size_t i = 0; i < data.size(); ++i) {
-        data[i] = i % 253;
+        data[i] = static_cast<uint8_t>(i % 253);
     }