ir-to-program: support unary op in root block

Fixed: crbug.com/428196804
Change-Id: Ibc48871b807767f65968ab13a5188d06c3e5cc6e
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/249535
Reviewed-by: James Price <jrprice@google.com>
Auto-Submit: David Neto <dneto@google.com>
Commit-Queue: James Price <jrprice@google.com>
diff --git a/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program.cc b/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program.cc
index ea5516c..becc9f4 100644
--- a/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program.cc
+++ b/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program.cc
@@ -191,6 +191,7 @@
                 [&](const core::ir::Var* var) { Var(var); },                        //
                 [&](const core::ir::Override* override_) { Override(override_); },  //
                 [&](const core::ir::Binary* binary) { Binary(binary); },            //
+                [&](const core::ir::Unary* unary) { Unary(unary); },                //
                 TINT_ICE_ON_NO_MATCH);
         }
     }
diff --git a/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program_test.cc b/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program_test.cc
index bbb5f7e..ec2db5d 100644
--- a/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program_test.cc
+++ b/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program_test.cc
@@ -3386,6 +3386,29 @@
 )");
 }
 
+TEST_F(IRToProgramTest, Override_UnaryInitializer) {
+    core::ir::Override* o;
+    b.Append(b.ir.root_block, [&] {
+        auto* lhs = b.Override("cond", true);
+        lhs->SetOverrideId(OverrideId{10});
+
+        o = b.Override("o", b.Not<bool>(lhs));
+    });
+
+    auto* fn = b.Function("f", ty.bool_());
+    b.Append(fn->Block(), [&] { b.Return(fn, o); });
+
+    EXPECT_WGSL(R"(
+@id(10) override cond : bool = true;
+
+override o : bool = !(cond);
+
+fn f() -> bool {
+  return o;
+}
+)");
+}
+
 TEST_F(IRToProgramTest, Override_BinaryInitializer) {
     core::ir::Override* o;
     b.Append(b.ir.root_block, [&] {