diff --git a/src/dawn/CPPLINT.cfg b/src/dawn/CPPLINT.cfg
index b172426..27dc5d4 100644
--- a/src/dawn/CPPLINT.cfg
+++ b/src/dawn/CPPLINT.cfg
@@ -10,4 +10,3 @@
 filter=-runtime/explicit
 filter=-runtime/indentation_namespace
 filter=-runtime/int
-filter=-whitespace/empty_if_body
diff --git a/src/dawn/native/RenderPassEncoder.cpp b/src/dawn/native/RenderPassEncoder.cpp
index b7f7563..31e740d 100644
--- a/src/dawn/native/RenderPassEncoder.cpp
+++ b/src/dawn/native/RenderPassEncoder.cpp
@@ -131,31 +131,30 @@
     }
 
     void RenderPassEncoder::APIEnd() {
-        if (mEncodingContext->TryEncode(
-                this,
-                [&](CommandAllocator* allocator) -> MaybeError {
-                    if (IsValidationEnabled()) {
-                        DAWN_TRY(ValidateProgrammableEncoderEnd());
+        mEncodingContext->TryEncode(
+            this,
+            [&](CommandAllocator* allocator) -> MaybeError {
+                if (IsValidationEnabled()) {
+                    DAWN_TRY(ValidateProgrammableEncoderEnd());
 
-                        DAWN_INVALID_IF(
-                            mOcclusionQueryActive,
-                            "Render pass %s ended with incomplete occlusion query index %u of %s.",
-                            this, mCurrentOcclusionQueryIndex, mOcclusionQuerySet.Get());
-                    }
+                    DAWN_INVALID_IF(
+                        mOcclusionQueryActive,
+                        "Render pass %s ended with incomplete occlusion query index %u of %s.",
+                        this, mCurrentOcclusionQueryIndex, mOcclusionQuerySet.Get());
+                }
 
-                    EndRenderPassCmd* cmd =
-                        allocator->Allocate<EndRenderPassCmd>(Command::EndRenderPass);
-                    // The query availability has already been updated at the beginning of render
-                    // pass, and no need to do update here.
-                    cmd->timestampWrites = std::move(mTimestampWritesAtEnd);
+                EndRenderPassCmd* cmd =
+                    allocator->Allocate<EndRenderPassCmd>(Command::EndRenderPass);
+                // The query availability has already been updated at the beginning of render
+                // pass, and no need to do update here.
+                cmd->timestampWrites = std::move(mTimestampWritesAtEnd);
 
-                    DAWN_TRY(mEncodingContext->ExitRenderPass(this, std::move(mUsageTracker),
-                                                              mCommandEncoder.Get(),
-                                                              std::move(mIndirectDrawMetadata)));
-                    return {};
-                },
-                "encoding %s.End().", this)) {
-        }
+                DAWN_TRY(mEncodingContext->ExitRenderPass(this, std::move(mUsageTracker),
+                                                          mCommandEncoder.Get(),
+                                                          std::move(mIndirectDrawMetadata)));
+                return {};
+            },
+            "encoding %s.End().", this);
     }
 
     void RenderPassEncoder::APIEndPass() {
