diff --git a/src/core/transport/chttp2/frame_data.c b/src/core/transport/chttp2/frame_data.c
index 95c27ad286a1044d2d88900c4e7a486ac989da1d..a1ae9ed2e653f712d6c93a3829900ccb08325fb6 100644
--- a/src/core/transport/chttp2/frame_data.c
+++ b/src/core/transport/chttp2/frame_data.c
@@ -135,7 +135,7 @@ grpc_chttp2_parse_error grpc_chttp2_data_parser_parse(
     case GRPC_CHTTP2_DATA_FRAME:
       if (cur == end) {
         return GRPC_CHTTP2_PARSE_OK;
-      } else if (end - cur == p->frame_size) {
+      } else if ((gpr_uint32)(end - cur) == p->frame_size) {
         state->need_flush_reads = 1;
         grpc_sopb_add_slice(&p->incoming_sopb,
                             gpr_slice_sub(slice, cur - beg, end - beg));
diff --git a/src/core/transport/chttp2_transport.c b/src/core/transport/chttp2_transport.c
index 5b2d0a5e5b7732988549dabf9c9997fdad48ddca..982417ec8a41710c457e3a194d9b32f7ed9052f7 100644
--- a/src/core/transport/chttp2_transport.c
+++ b/src/core/transport/chttp2_transport.c
@@ -1631,7 +1631,7 @@ static int process_read(transport *t, gpr_slice slice) {
     /* fallthrough */
     case DTS_FRAME:
       GPR_ASSERT(cur < end);
-      if (end - cur == t->incoming_frame_size) {
+      if ((gpr_uint32)(end - cur) == t->incoming_frame_size) {
         if (!parse_frame_slice(
                 t, gpr_slice_sub_no_ref(slice, cur - beg, end - beg), 1)) {
           return 0;
diff --git a/src/core/tsi/ssl_transport_security.c b/src/core/tsi/ssl_transport_security.c
index 2e59275ff80d55709ee2d0d82bbce5e3588b7244..92fcb96dd23cbfc4e957502e93e5bbb6c5789e0f 100644
--- a/src/core/tsi/ssl_transport_security.c
+++ b/src/core/tsi/ssl_transport_security.c
@@ -1084,7 +1084,7 @@ static int server_handshaker_factory_alpn_callback(
   tsi_ssl_server_handshaker_factory* factory =
       (tsi_ssl_server_handshaker_factory*)arg;
   const unsigned char* client_current = in;
-  while ((client_current - in) < inlen) {
+  while ((unsigned int)(client_current - in) < inlen) {
     unsigned char client_current_len = *(client_current++);
     const unsigned char* server_current = factory->alpn_protocol_list;
     while ((server_current >= factory->alpn_protocol_list) &&
diff --git a/test/core/iomgr/tcp_posix_test.c b/test/core/iomgr/tcp_posix_test.c
index 044802b80258532b3a195924e62de18871dc0ada..0f81ba77344a9b4064e727eab9952fcd93585adc 100644
--- a/test/core/iomgr/tcp_posix_test.c
+++ b/test/core/iomgr/tcp_posix_test.c
@@ -250,7 +250,7 @@ struct write_socket_state {
 
 static gpr_slice *allocate_blocks(ssize_t num_bytes, ssize_t slice_size,
                                   size_t *num_blocks, int *current_data) {
-  ssize_t nslices = num_bytes / slice_size + (num_bytes % slice_size ? 1 : 0);
+  size_t nslices = num_bytes / slice_size + (num_bytes % slice_size ? 1 : 0);
   gpr_slice *slices = gpr_malloc(sizeof(gpr_slice) * nslices);
   ssize_t num_bytes_left = num_bytes;
   unsigned i, j;
diff --git a/test/core/statistics/hash_table_test.c b/test/core/statistics/hash_table_test.c
index 9b7a712c18c627f61c2840b77ac1ef39ad7a44f6..2752d6d89d549c5fc1f14fd1c201c0d532996f07 100644
--- a/test/core/statistics/hash_table_test.c
+++ b/test/core/statistics/hash_table_test.c
@@ -97,7 +97,7 @@ static void test_table_with_int_key(void) {
   for (i = 0; i < 20; ++i) {
     census_ht_key key;
     key.val = i;
-    census_ht_insert(ht, key, (void*)i);
+    census_ht_insert(ht, key, (void*)(gpr_intptr)i);
     GPR_ASSERT(census_ht_get_size(ht) == i + 1);
   }
   for (i = 0; i < 20; i++) {
@@ -105,7 +105,7 @@ static void test_table_with_int_key(void) {
     census_ht_key key;
     key.val = i;
     val = census_ht_find(ht, key);
-    GPR_ASSERT(val == (void*)i);
+    GPR_ASSERT(val == (void*)(gpr_intptr)i);
   }
   elements = census_ht_get_all_elements(ht, &num_elements);
   GPR_ASSERT(elements != NULL);