[ir] Enable disabled `for` test.

The needed support has been added so the disabled from_program `for`
test can be enabled.

Bug: tint:1718
Change-Id: I31843a5512d4c8306131a62221dbccb4ff30ad7c
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/138180
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Commit-Queue: Dan Sinclair <dsinclair@chromium.org>
diff --git a/src/tint/ir/from_program_test.cc b/src/tint/ir/from_program_test.cc
index c5384bc..da99bb8 100644
--- a/src/tint/ir/from_program_test.cc
+++ b/src/tint/ir/from_program_test.cc
@@ -708,20 +708,7 @@
 )");
 }
 
-// TODO(dsinclair): Enable when variable declarations and increment are supported
-TEST_F(IR_FromProgramTest, DISABLED_For) {
-    // for(var i: 0; i < 10; i++) {
-    // }
-    //
-    // func -> loop -> loop start -> if true
-    //                            -> if false
-    //
-    //   [if true] -> if merge
-    //   [if false] -> loop merge
-    //   [if merge] -> loop continuing
-    //   [loop continuing] -> loop start
-    //   [loop merge] -> func end
-    //
+TEST_F(IR_FromProgramTest, For) {
     auto* ast_for = For(Decl(Var("i", ty.i32())), LessThan("i", 10_a), Increment("i"), Block());
     WrapInFunction(ast_for);
 
@@ -736,7 +723,38 @@
     EXPECT_EQ(2u, loop->Body()->InboundSiblingBranches().Length());
     EXPECT_EQ(1u, loop->Continuing()->InboundSiblingBranches().Length());
 
-    EXPECT_EQ(Disassemble(m), R"()");
+    EXPECT_EQ(Disassemble(m),
+              R"(%test_function = @compute @workgroup_size(1, 1, 1) func():void -> %b1 {
+  %b1 = block {
+    loop [i: %b2, b: %b3, c: %b4] {  # loop_1
+      %b2 = block {  # initializer
+        %i:ptr<function, i32, read_write> = var
+        next_iteration %b3
+      }
+      %b3 = block {  # body
+        %3:i32 = load %i
+        %4:bool = lt %3, 10i
+        if %4 [t: %b5, f: %b6] {  # if_1
+          %b5 = block {  # true
+            exit_if  # if_1
+          }
+          %b6 = block {  # false
+            exit_loop  # loop_1
+          }
+        }
+        continue %b4
+      }
+      %b4 = block {  # continuing
+        %5:i32 = load %i
+        %6:i32 = add %5, 1i
+        store %i, %6
+        next_iteration %b3
+      }
+    }
+    ret
+  }
+}
+)");
 }
 
 TEST_F(IR_FromProgramTest, For_Init_NoCondOrContinuing) {