SKIP: FAILED

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

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

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

%main_1 = func():void -> %b2 {
  %b2 = block {
    %x_30:ptr<function, bool, read_write> = var
    %x_31_phi:ptr<function, bool, read_write> = var
    store %x_GLF_color, vec4<f32>(0.0f)
    %6:ptr<uniform, f32, read> = access %x_5, 0u
    %x_23:f32 = load %6
    %x_24:bool = lt %x_23, 0.0f
    store %x_31_phi, %x_24
    %9:bool = eq %x_24, false
    if %9 [t: %b3] {  # if_1
      %b3 = block {  # true
        %10:ptr<uniform, f32, read> = access %x_5, 0u
        %x_29:f32 = load %10
        %12:bool = lt %x_29, 1.0f
        store %x_30, %12
        %13:bool = load %x_30
        store %x_31_phi, %13
        exit_if  # if_1
      }
    }
    %x_31:bool = load %x_31_phi
    if %x_31 [t: %b4] {  # if_2
      %b4 = block {  # true
        ret
      }
    }
    %15:ptr<uniform, f32, read> = access %x_5, 0u
    %x_35:f32 = load %15
    %17:bool = lt %x_35, 0.0f
    if %17 [t: %b5, f: %b6] {  # if_3
      %b5 = block {  # true
        loop [b: %b7, c: %b8] {  # loop_1
          %b7 = block {  # body
            %18:ptr<uniform, f32, read> = access %x_5, 0u
            %x_45:f32 = load %18
            %20:bool = lt %x_45, 0.0f
            if %20 [t: %b9, f: %b10] {  # if_4
              %b9 = block {  # true
                exit_if  # if_4
              }
              %b10 = block {  # false
                exit_loop  # loop_1
              }
            }
            store %x_GLF_color, vec4<f32>(1.0f)
            exit_loop  # loop_1
          }
          %b8 = block {  # continuing
            next_iteration %b7
          }
        }
        exit_if  # if_3
      }
      %b6 = block {  # false
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b11 {
  %b11 = block {
    %22:void = call %main_1
    %23:vec4<f32> = load %x_GLF_color
    %24:main_out = construct %23
    ret %24
  }
}

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.  *
********************************************************************
