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, 4> @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_10:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void {
  $B2: {
    %v0:ptr<function, vec4<f32>, read_write> = var
    %v1:ptr<function, vec4<f32>, read_write> = var
    %a:ptr<function, i32, read_write> = var
    %c:ptr<function, i32, read_write> = var
    %9:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %10:f32 = load %9
    %11:vec4<f32> = construct %10
    store %v0, %11
    %12:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %13:f32 = load %12
    %14:vec4<f32> = construct %13
    store %v1, %14
    %15:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
    %16:i32 = load %15
    store %a, %16
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %17:i32 = load %a
        %18:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %19:i32 = load %18
        %20:bool = lt %17, %19
        if %20 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %21:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
        %22:i32 = load %21
        store %c, %22
        loop [b: $B7, c: $B8] {  # loop_2
          $B7: {  # body
            %23:i32 = load %c
            %24:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
            %25:i32 = load %24
            %26:bool = lt %23, %25
            if %26 [t: $B9, f: $B10] {  # if_2
              $B9: {  # true
                exit_if  # if_2
              }
              $B10: {  # false
                exit_loop  # loop_2
              }
            }
            %27:i32 = load %c
            %28:i32 = max %27, 0i
            %29:i32 = min %28, 3i
            %x_69:i32 = let %29
            %31:f32 = load_vector_element %v0, %x_69
            %32:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
            %33:f32 = load %32
            %34:f32 = sub %31, %33
            store_vector_element %v0, %x_69, %34
            %35:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
            %36:i32 = load %35
            %37:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
            %38:i32 = load %37
            %39:bool = eq %36, %38
            if %39 [t: $B11] {  # if_3
              $B11: {  # true
                %40:i32 = load %a
                %x_83:i32 = let %40
                %42:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
                %43:f32 = load %42
                %44:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
                %45:f32 = load %44
                %46:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
                %47:f32 = load %46
                %48:vec4<f32> = construct %43, %45, %47, 3.0f
                %49:vec4<f32> = load %v0
                %50:vec4<f32> = smoothstep %48, vec4<f32>(1.0f), %49
                %51:i32 = load %a
                %52:f32 = access %50, %51
                store_vector_element %v1, %x_83, %52
                exit_if  # if_3
              }
            }
            continue  # -> $B8
          }
          $B8: {  # continuing
            %53:i32 = load %c
            %54:i32 = add %53, 1i
            store %c, %54
            next_iteration  # -> $B7
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %55:i32 = load %a
        %56:i32 = add %55, 1i
        store %a, %56
        next_iteration  # -> $B3
      }
    }
    %57:f32 = load_vector_element %v1, 0u
    %58:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %59:f32 = load %58
    %60:bool = eq %57, %59
    if %60 [t: $B12, f: $B13] {  # if_4
      $B12: {  # true
        %61:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %62:i32 = load %61
        %63:f32 = convert %62
        %64:f32 = let %63
        %65:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
        %66:i32 = load %65
        %67:f32 = convert %66
        %68:f32 = let %67
        %69:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
        %70:i32 = load %69
        %71:f32 = convert %70
        %72:f32 = let %71
        %73:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %74:i32 = load %73
        %75:f32 = convert %74
        %76:vec4<f32> = construct %64, %68, %72, %75
        store %x_GLF_color, %76
        exit_if  # if_4
      }
      $B13: {  # false
        %77:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
        %78:i32 = load %77
        %79:f32 = convert %78
        %80:vec4<f32> = construct %79
        store %x_GLF_color, %80
        exit_if  # if_4
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B14: {
    %82:void = call %main_1
    %83:vec4<f32> = load %x_GLF_color
    %84:main_out = construct %83
    ret %84
  }
}

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