[dawn][frontend] Fix IsRangeOverlapped early out.

A rewrite of TypedInteger initializers turned T{1} into T{} instead of
T{1u}, which made the early out never happen, and allowed an ASSERT in
RangesOverlap to be triggered.

Adds a test that reproes the issue.

Fixed: 519939415
Change-Id: I92d9f95ffe4cbd13b66928248c971df7956143b6
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/314795
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Commit-Queue: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/dawn/native/CommandValidation.h b/src/dawn/native/CommandValidation.h
index 95cf503..5859bf5 100644
--- a/src/dawn/native/CommandValidation.h
+++ b/src/dawn/native/CommandValidation.h
@@ -110,7 +110,7 @@
 // Returns true if [startA, startA + length[ overlaps [startB, startB + length[
 template <typename T>
 bool IsRangeOverlapped(T startA, T startB, T length) {
-    if (length < T{}) {
+    if (length < T{1u}) {
         return false;
     }
     return RangesOverlap(static_cast<uint64_t>(startA),
diff --git a/src/dawn/tests/unittests/validation/CopyCommandsValidationTests.cpp b/src/dawn/tests/unittests/validation/CopyCommandsValidationTests.cpp
index 4c28e32..2d23b95 100644
--- a/src/dawn/tests/unittests/validation/CopyCommandsValidationTests.cpp
+++ b/src/dawn/tests/unittests/validation/CopyCommandsValidationTests.cpp
@@ -2104,6 +2104,15 @@
             TestT2TCopy(utils::Expectation::Success, texture, 0, {0, 0, kSrcBaseArrayLayer},
                         texture, 0, {0, 0, kDstBaseArrayLayer}, {1, 1, kCopyArrayLayerCount});
         }
+
+        // Case where kCopyArrayLayerCount == 0
+        {
+            constexpr uint32_t kSameBaseArrayLayer = 0;
+            constexpr uint32_t kZeroLayersToCopy = 0;
+
+            TestT2TCopy(utils::Expectation::Success, texture, 0, {0, 0, kSameBaseArrayLayer},
+                        texture, 0, {0, 0, kSameBaseArrayLayer}, {1, 1, kZeroLayersToCopy});
+        }
     }
 
     // Copy between different mipmap levels is allowed.