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, 5> @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_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: {
    %M1:ptr<function, mat2x2<f32>, read_write> = var
    %a:ptr<function, f32, read_write> = var
    %c:ptr<function, i32, read_write> = var
    %8:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %9:f32 = load %8
    %x_41:f32 = let %9
    %11:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
    %12:f32 = load %11
    %x_43:f32 = let %12
    %14:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
    %15:f32 = load %14
    %x_45:f32 = let %15
    %17:ptr<uniform, f32, read> = access %x_6, 0u, 4i, 0u
    %18:f32 = load %17
    %x_47:f32 = let %18
    %20:vec2<f32> = construct %x_41, %x_43
    %21:vec2<f32> = let %20
    %22:vec2<f32> = construct %x_45, %x_47
    %23:mat2x2<f32> = construct %21, %22
    store %M1, %23
    %24:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %25:f32 = load %24
    %x_52:f32 = let %25
    store %a, %x_52
    %27:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
    %28:i32 = load %27
    %x_54:i32 = let %28
    store %c, %x_54
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %30:i32 = load %c
        %x_59:i32 = let %30
        %32:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %33:i32 = load %32
        %x_61:i32 = let %33
        %35:bool = lt %x_59, %x_61
        if %35 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %36:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %37:i32 = load %36
        %x_65:i32 = let %37
        %39:i32 = load %c
        %x_66:i32 = let %39
        %41:ptr<function, vec2<f32>, read_write> = access %M1, %x_65
        %42:i32 = complement %x_66
        %43:i32 = max %42, 0i
        %44:i32 = min %43, 1i
        %45:f32 = load_vector_element %41, %44
        %x_70:f32 = let %45
        %47:f32 = load %a
        %x_71:f32 = let %47
        %49:f32 = add %x_71, %x_70
        store %a, %49
        continue  # -> $B4
      }
      $B4: {  # continuing
        %50:i32 = load %c
        %x_73:i32 = let %50
        %52:i32 = add %x_73, 1i
        store %c, %52
        next_iteration  # -> $B3
      }
    }
    %53:f32 = load %a
    %x_75:f32 = let %53
    %55:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %56:f32 = load %55
    %x_77:f32 = let %56
    %58:bool = eq %x_75, %x_77
    if %58 [t: $B7, f: $B8] {  # if_2
      $B7: {  # true
        %59:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %60:i32 = load %59
        %x_83:i32 = let %60
        %62:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %63:i32 = load %62
        %x_86:i32 = let %63
        %65:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %66:i32 = load %65
        %x_89:i32 = let %66
        %68:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %69:i32 = load %68
        %x_92:i32 = let %69
        %71:f32 = convert %x_83
        %72:f32 = let %71
        %73:f32 = convert %x_86
        %74:f32 = let %73
        %75:f32 = convert %x_89
        %76:f32 = let %75
        %77:f32 = convert %x_92
        %78:vec4<f32> = construct %72, %74, %76, %77
        store %x_GLF_color, %78
        exit_if  # if_2
      }
      $B8: {  # false
        %79:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %80:i32 = load %79
        %x_96:i32 = let %80
        %82:f32 = convert %x_96
        %x_97:f32 = let %82
        %84:vec4<f32> = construct %x_97, %x_97, %x_97, %x_97
        store %x_GLF_color, %84
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B9: {
    %86:void = call %main_1
    %87:vec4<f32> = load %x_GLF_color
    %88:main_out = construct %87
    ret %88
  }
}

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