SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
  el:f32 @offset(0)
}

buf0 = struct @align(4) {
  x_GLF_uniform_float_values:array<strided_arr, 2> @offset(0)
}

strided_arr_1 = struct @align(4) {
  el:i32 @offset(0)
}

buf1 = struct @align(4) {
  x_GLF_uniform_int_values:array<strided_arr_1, 3> @offset(0)
}

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

$B1: {  # root
  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void {
  $B2: {
    %f:ptr<function, f32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %a:ptr<function, f32, read_write> = var
    %8:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %9:f32 = load %8
    %x_37:f32 = let %9
    store %f, %x_37
    %11:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
    %12:i32 = load %11
    %x_39:i32 = let %12
    store %i, %x_39
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %14:i32 = load %i
        %x_44:i32 = let %14
        %16:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %17:i32 = load %16
        %x_46:i32 = let %17
        %19:bool = gt %x_44, %x_46
        if %19 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %20:i32 = load %i
        %x_49:i32 = let %20
        %22:f32 = convert %x_49
        %23:f32 = max 1.0f, %22
        %24:f32 = sub 1.0f, %23
        store %a, %24
        %25:f32 = load %a
        %x_53:f32 = let %25
        %27:f32 = max %x_53, 0.0f
        %28:f32 = min %27, 0.0f
        store %f, %28
        continue  # -> $B4
      }
      $B4: {  # continuing
        %29:i32 = load %i
        %x_56:i32 = let %29
        %31:i32 = sub %x_56, 1i
        store %i, %31
        next_iteration  # -> $B3
      }
    }
    %32:f32 = load %f
    %x_58:f32 = let %32
    %34:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %35:f32 = load %34
    %x_60:f32 = let %35
    %37:bool = eq %x_58, %x_60
    if %37 [t: $B7, f: $B8] {  # if_2
      $B7: {  # true
        %38:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
        %39:i32 = load %38
        %x_66:i32 = let %39
        %41:f32 = load %f
        %x_68:f32 = let %41
        %43:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %44:i32 = load %43
        %x_70:i32 = let %44
        %46:f32 = convert %x_66
        %47:f32 = let %46
        %48:f32 = convert %x_70
        %49:vec4<f32> = construct %47, %x_68, %48, 1.0f
        store %x_GLF_color, %49
        exit_if  # if_2
      }
      $B8: {  # false
        store %x_GLF_color, vec4<f32>(0.0f)
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B9: {
    %51:void = call %main_1
    %52:vec4<f32> = load %x_GLF_color
    %53:main_out = construct %52
    ret %53
  }
}

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