diff --git a/bzip_extent_writer.cc b/bzip_extent_writer.cc
index e200e2d..9d432c7 100644
--- a/bzip_extent_writer.cc
+++ b/bzip_extent_writer.cc
@@ -50,7 +50,7 @@
                      output_buffer.size() - stream_.avail_out));
     
     if (rc == BZ_STREAM_END)
-      CHECK_EQ(stream_.avail_in, 0);
+      CHECK_EQ(stream_.avail_in, static_cast<unsigned int>(0));
     if (stream_.avail_in == 0)
       break;  // no more input to process
   }
diff --git a/cycle_breaker.cc b/cycle_breaker.cc
index 266c2df..8400366 100644
--- a/cycle_breaker.cc
+++ b/cycle_breaker.cc
@@ -87,7 +87,8 @@
 
 void CycleBreaker::HandleCircuit() {
   stack_.push_back(current_vertex_);
-  CHECK_GE(stack_.size(), 2);
+  CHECK_GE(stack_.size(),
+           static_cast<std::vector<Vertex::Index>::size_type>(2));
   Edge min_edge = make_pair(stack_[0], stack_[1]);
   uint64_t min_edge_weight = kuint64max;
   size_t edges_considered = 0;
diff --git a/delta_diff_generator.cc b/delta_diff_generator.cc
index cc8f352..67b917f 100644
--- a/delta_diff_generator.cc
+++ b/delta_diff_generator.cc
@@ -531,7 +531,7 @@
       vector<char> bsdiff_delta;
       TEST_AND_RETURN_FALSE(
           BsdiffFiles(old_filename, new_filename, &bsdiff_delta));
-      CHECK_GT(bsdiff_delta.size(), 0);
+      CHECK_GT(bsdiff_delta.size(), static_cast<vector<char>::size_type>(0));
       if (bsdiff_delta.size() < current_best_size) {
         operation.set_type(DeltaArchiveManifest_InstallOperation_Type_BSDIFF);
         current_best_size = bsdiff_delta.size();
@@ -748,7 +748,8 @@
         cuts.back().tmp_extents);
 
     // delete the old edge
-    CHECK_EQ(1, (*graph)[it->first].out_edges.erase(it->second));
+    CHECK_EQ(static_cast<Graph::size_type>(1),
+             (*graph)[it->first].out_edges.erase(it->second));
 
     // Add an edge from dst to copy operation
     EdgeProperties write_before_edge_properties;
diff --git a/extent_writer.cc b/extent_writer.cc
index baac66c..c28956b 100644
--- a/extent_writer.cc
+++ b/extent_writer.cc
@@ -23,7 +23,7 @@
     uint64_t bytes_remaining_next_extent =
         extents_[next_extent_index_].num_blocks() * block_size_ -
         extent_bytes_written_;
-    CHECK_NE(bytes_remaining_next_extent, 0);
+    CHECK_NE(bytes_remaining_next_extent, static_cast<uint64_t>(0));
     size_t bytes_to_write =
         static_cast<size_t>(min(static_cast<uint64_t>(count - bytes_written),
                                 bytes_remaining_next_extent));
diff --git a/http_fetcher_unittest.cc b/http_fetcher_unittest.cc
index 8814f1a..eb107ef 100644
--- a/http_fetcher_unittest.cc
+++ b/http_fetcher_unittest.cc
@@ -421,7 +421,7 @@
 
     // Make sure that no bytes were received.
     CHECK_EQ(delegate.times_received_bytes_called_, 0);
-    CHECK_EQ(fetcher->GetBytesDownloaded(), 0);
+    CHECK_EQ(fetcher->GetBytesDownloaded(), static_cast<size_t>(0));
 
     // Make sure that transfer completion was signaled once, and no termination
     // was signaled.
diff --git a/metadata.cc b/metadata.cc
index 7dfc787..6b52f29 100644
--- a/metadata.cc
+++ b/metadata.cc
@@ -151,7 +151,7 @@
       TEST_AND_RETURN_FALSE(ComputeMetadataBsdiff(old_data,
                                                   new_data,
                                                   &bsdiff_delta));
-      CHECK_GT(bsdiff_delta.size(), 0);
+      CHECK_GT(bsdiff_delta.size(), static_cast<vector<char>::size_type>(0));
 
       if (bsdiff_delta.size() < current_best_size) {
         op.set_type(DeltaArchiveManifest_InstallOperation_Type_BSDIFF);
diff --git a/multi_range_http_fetcher.h b/multi_range_http_fetcher.h
index 19982ef..10829cc 100644
--- a/multi_range_http_fetcher.h
+++ b/multi_range_http_fetcher.h
@@ -46,7 +46,7 @@
   void ClearRanges() { ranges_.clear(); }
 
   void AddRange(off_t offset, size_t size) {
-    CHECK_GT(size, 0);
+    CHECK_GT(size, static_cast<size_t>(0));
     ranges_.push_back(Range(offset, size));
   }
 
diff --git a/test_http_server.cc b/test_http_server.cc
index af10968..6257e07 100644
--- a/test_http_server.cc
+++ b/test_http_server.cc
@@ -77,7 +77,7 @@
   // Decode URL line.
   std::vector<string> terms;
   base::SplitStringAlongWhitespace(lines[0], &terms);
-  CHECK_EQ(terms.size(), 3);
+  CHECK_EQ(terms.size(), static_cast<vector<string>::size_type>(3));
   CHECK_EQ(terms[0], "GET");
   request->url = terms[1];
   LOG(INFO) << "URL: " << request->url;
@@ -89,7 +89,7 @@
     base::SplitStringAlongWhitespace(lines[i], &terms);
 
     if (terms[0] == "Range:") {
-      CHECK_EQ(terms.size(), 2);
+      CHECK_EQ(terms.size(), static_cast<vector<string>::size_type>(2));
       string &range = terms[1];
       LOG(INFO) << "range attribute: " << range;
       CHECK(StartsWithASCII(range, "bytes=", true) &&
@@ -108,7 +108,7 @@
         base::StringAppendF(&tmp_str, "unspecified");
       LOG(INFO) << tmp_str;
     } else if (terms[0] == "Host:") {
-      CHECK_EQ(terms.size(), 2);
+      CHECK_EQ(terms.size(), static_cast<vector<string>::size_type>(2));
       request->host = terms[1];
       LOG(INFO) << "host attribute: " << request->host;
     } else {
@@ -192,7 +192,7 @@
 size_t WritePayload(int fd, const off_t start_offset, const off_t end_offset,
                     const char first_byte, const size_t line_len) {
   CHECK_LE(start_offset, end_offset);
-  CHECK_GT(line_len, 0);
+  CHECK_GT(line_len, static_cast<size_t>(0));
 
   LOG(INFO) << "writing payload: " << line_len << "-byte lines starting with `"
             << first_byte << "', offset range " << start_offset << " -> "
@@ -348,7 +348,7 @@
 void HandleRedirect(int fd, const HttpRequest& request) {
   LOG(INFO) << "Redirecting...";
   string url = request.url;
-  CHECK_EQ(0, url.find("/redirect/"));
+  CHECK_EQ(static_cast<size_t>(0), url.find("/redirect/"));
   url.erase(0, strlen("/redirect/"));
   string::size_type url_start = url.find('/');
   CHECK_NE(url_start, string::npos);
@@ -439,7 +439,7 @@
  public:
   UrlTerms(string &url, size_t num_terms) {
     // URL must be non-empty and start with a slash.
-    CHECK_GT(url.size(), 0);
+    CHECK_GT(url.size(), static_cast<size_t>(0));
     CHECK_EQ(url[0], '/');
 
     // Split it into terms delimited by slashes, omitting the preceeding slash.
