diff --git a/src/common/BitSetIterator.h b/src/common/BitSetIterator.h
index d35bc8a..14ba485 100644
--- a/src/common/BitSetIterator.h
+++ b/src/common/BitSetIterator.h
@@ -48,7 +48,7 @@
 
         T operator*() const {
             using U = UnderlyingType<T>;
-            ASSERT(mCurrentBit <= std::numeric_limits<U>::max());
+            ASSERT(static_cast<U>(mCurrentBit) <= std::numeric_limits<U>::max());
             return static_cast<T>(static_cast<U>(mCurrentBit));
         }
 
diff --git a/src/common/HashUtils.h b/src/common/HashUtils.h
index 9d10ca7..1c33a3f 100644
--- a/src/common/HashUtils.h
+++ b/src/common/HashUtils.h
@@ -90,7 +90,7 @@
 
 namespace std {
     template <typename Index, size_t N>
-    class hash<ityp::bitset<Index, N>> {
+    struct hash<ityp::bitset<Index, N>> {
       public:
         size_t operator()(const ityp::bitset<Index, N>& value) const {
             return Hash(static_cast<const std::bitset<N>&>(value));
diff --git a/src/common/ityp_array.h b/src/common/ityp_array.h
index d413ebc..fc77217 100644
--- a/src/common/ityp_array.h
+++ b/src/common/ityp_array.h
@@ -65,19 +65,19 @@
             return Base::at(index);
         }
 
-        Value* begin() noexcept {
+        typename Base::iterator begin() noexcept {
             return Base::begin();
         }
 
-        const Value* begin() const noexcept {
+        typename Base::const_iterator begin() const noexcept {
             return Base::begin();
         }
 
-        Value* end() noexcept {
+        typename Base::iterator end() noexcept {
             return Base::end();
         }
 
-        const Value* end() const noexcept {
+        typename Base::const_iterator end() const noexcept {
             return Base::end();
         }
 
diff --git a/src/common/ityp_bitset.h b/src/common/ityp_bitset.h
index ef351d4..339cf18 100644
--- a/src/common/ityp_bitset.h
+++ b/src/common/ityp_bitset.h
@@ -126,7 +126,7 @@
             return BitSetIterator<N, Index>(static_cast<const Base&>(bitset));
         }
 
-        friend class std::hash<bitset>;
+        friend struct std::hash<bitset>;
     };
 
 }  // namespace ityp
diff --git a/src/common/vulkan_platform.h b/src/common/vulkan_platform.h
index 113e831..236c682 100644
--- a/src/common/vulkan_platform.h
+++ b/src/common/vulkan_platform.h
@@ -37,8 +37,18 @@
 
 #if defined(DAWN_PLATFORM_64_BIT)
 #    define DAWN_DEFINE_NATIVE_NON_DISPATCHABLE_HANDLE(object) using object = struct object##_T*;
+// This function is needed because MSVC doesn't accept reinterpret_cast from uint64_t from uint64_t
+// TODO(cwallez@chromium.org): Remove this once we rework vulkan_platform.h
+template <typename T>
+T NativeNonDispatachableHandleFromU64(uint64_t u64) {
+    return reinterpret_cast<T>(u64);
+}
 #elif defined(DAWN_PLATFORM_32_BIT)
 #    define DAWN_DEFINE_NATIVE_NON_DISPATCHABLE_HANDLE(object) using object = uint64_t;
+template <typename T>
+T NativeNonDispatachableHandleFromU64(uint64_t u64) {
+    return u64;
+}
 #else
 #    error "Unsupported platform"
 #endif
diff --git a/src/dawn_native/vulkan/SwapChainVk.cpp b/src/dawn_native/vulkan/SwapChainVk.cpp
index 6601287..30d774d 100644
--- a/src/dawn_native/vulkan/SwapChainVk.cpp
+++ b/src/dawn_native/vulkan/SwapChainVk.cpp
@@ -47,8 +47,8 @@
             return nullptr;
         }
 
-        VkImage nativeTexture =
-            VkImage::CreateFromHandle(reinterpret_cast<::VkImage>(next.texture.u64));
+        ::VkImage image = NativeNonDispatachableHandleFromU64<::VkImage>(next.texture.u64);
+        VkImage nativeTexture = VkImage::CreateFromHandle(image);
         return Texture::CreateForSwapChain(ToBackend(GetDevice()), descriptor, nativeTexture)
             .Detach();
     }
diff --git a/src/tests/unittests/ITypArrayTests.cpp b/src/tests/unittests/ITypArrayTests.cpp
index d147b4b..ce71cda 100644
--- a/src/tests/unittests/ITypArrayTests.cpp
+++ b/src/tests/unittests/ITypArrayTests.cpp
@@ -79,16 +79,12 @@
     Array arr;
 
     // non-const versions
-    ASSERT_EQ(arr.begin(), &arr[Key(0)]);
-    ASSERT_EQ(arr.end(), &arr[Key(0)] + static_cast<uint32_t>(arr.size()));
     ASSERT_EQ(&arr.front(), &arr[Key(0)]);
     ASSERT_EQ(&arr.back(), &arr[Key(9)]);
     ASSERT_EQ(arr.data(), &arr[Key(0)]);
 
     // const versions
     const Array& constArr = arr;
-    ASSERT_EQ(constArr.begin(), &constArr[Key(0)]);
-    ASSERT_EQ(constArr.end(), &constArr[Key(0)] + static_cast<uint32_t>(constArr.size()));
     ASSERT_EQ(&constArr.front(), &constArr[Key(0)]);
     ASSERT_EQ(&constArr.back(), &constArr[Key(9)]);
     ASSERT_EQ(constArr.data(), &constArr[Key(0)]);
diff --git a/src/tests/unittests/ITypBitsetTests.cpp b/src/tests/unittests/ITypBitsetTests.cpp
index 93f9be2..88390a5 100644
--- a/src/tests/unittests/ITypBitsetTests.cpp
+++ b/src/tests/unittests/ITypBitsetTests.cpp
@@ -49,7 +49,7 @@
                 ASSERT_FALSE(bits[Key(i)]) << i;
                 ASSERT_FALSE(bits.test(Key(i))) << i;
             } else {
-                mask |= (1 << i);
+                mask |= (size_t(1) << i);
                 ASSERT_TRUE(bits[Key(i)]) << i;
                 ASSERT_TRUE(bits.test(Key(i))) << i;
             }
