SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
  zero:i32 @offset(0)
}

main_out = struct @align(16) {
  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
}

%b1 = block {  # root
  %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%func_i1_ = func(%x:ptr<function, i32, read_write>):i32 -> %b2 {
  %b2 = block {
    %x_45:i32 = load %x
    %6:bool = eq %x_45, 10i
    if %6 [t: %b3] {  # if_1
      %b3 = block {  # true
        discard
        exit_if  # if_1
      }
    }
    %x_49:i32 = load %x
    ret %x_49
  }
}
%main_1 = func():void -> %b4 {
  %b4 = block {
    %a:ptr<function, i32, read_write> = var
    %b:ptr<function, i32, read_write> = var
    %param:ptr<function, i32, read_write> = var
    %x_37:ptr<function, i32, read_write> = var
    %x_35_phi:ptr<function, i32, read_write> = var
    store %a, 0i
    %14:ptr<uniform, i32, read> = access %x_9, 0u
    %x_33:i32 = load %14
    store %b, %x_33
    store %x_35_phi, %x_33
    loop [b: %b5, c: %b6] {  # loop_1
      %b5 = block {  # body
        %x_35:i32 = load %x_35_phi
        store %param, %x_35
        %17:i32 = call %func_i1_, %param
        store %x_37, %17
        %18:i32 = load %x_37
        store %a, %18
        %x_36:i32 = add %x_35, 1i
        store %b, %x_36
        store %x_35_phi, %x_36
        %20:bool = lt %x_36, 4i
        if %20 [t: %b7, f: %b8] {  # if_2
          %b7 = block {  # true
            exit_if  # if_2
          }
          %b8 = block {  # false
            exit_loop  # loop_1
          }
        }
        continue %b6
      }
      %b6 = block {  # continuing
        next_iteration %b5
      }
    }
    %21:i32 = load %x_37
    %22:bool = eq %21, 3i
    if %22 [t: %b9, f: %b10] {  # if_3
      %b9 = block {  # true
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_3
      }
      %b10 = block {  # false
        store %x_GLF_color, vec4<f32>(0.0f)
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b11 {
  %b11 = block {
    %24:void = call %main_1
    %25:vec4<f32> = load %x_GLF_color
    %26:main_out = construct %25
    ret %26
  }
}

unhandled variable address space
********************************************************************
*  The tint shader compiler has encountered an unexpected error.   *
*                                                                  *
*  Please help us fix this issue by submitting a bug report at     *
*  crbug.com/tint with the source program that triggered the bug.  *
********************************************************************
