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: {
    %sums:ptr<function, array<f32, 3>, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %indexable:ptr<function, mat2x4<f32>, read_write> = var
    %8:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %9:f32 = load %8
    %x_40:f32 = let %9
    %11:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %12:f32 = load %11
    %x_42:f32 = let %12
    %14:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %15:f32 = load %14
    %x_44:f32 = let %15
    %17:array<f32, 3> = construct %x_40, %x_42, %x_44
    store %sums, %17
    store %i, 0i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %18:i32 = load %i
        %x_50:i32 = let %18
        %20:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %21:i32 = load %20
        %x_52:i32 = let %21
        %23:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %24:i32 = load %23
        %x_54:i32 = let %24
        %26:i32 = max %x_52, %x_54
        %27:i32 = min %26, 2i
        %28:bool = lt %x_50, %27
        if %28 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %29:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
        %30:i32 = load %29
        %x_59:i32 = let %30
        %32:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %33:f32 = load %32
        %x_61:f32 = let %33
        %35:i32 = load %i
        %x_65:i32 = let %35
        %37:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %38:i32 = load %37
        %x_67:i32 = let %38
        %40:vec4<f32> = construct %x_61, 0.0f, 0.0f, 0.0f
        %41:vec4<f32> = let %40
        %42:vec4<f32> = construct 0.0f, %x_61, 0.0f, 0.0f
        %43:mat2x4<f32> = construct %41, %42
        store %indexable, %43
        %44:ptr<function, vec4<f32>, read_write> = access %indexable, %x_65
        %45:f32 = load_vector_element %44, %x_67
        %x_69:f32 = let %45
        %47:ptr<function, f32, read_write> = access %sums, %x_59
        %48:f32 = load %47
        %x_71:f32 = let %48
        %50:ptr<function, f32, read_write> = access %sums, %x_59
        %51:f32 = add %x_71, %x_69
        store %50, %51
        continue  # -> $B4
      }
      $B4: {  # continuing
        %52:i32 = load %i
        %x_74:i32 = let %52
        %54:i32 = add %x_74, 1i
        store %i, %54
        next_iteration  # -> $B3
      }
    }
    %55:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
    %56:i32 = load %55
    %x_77:i32 = let %56
    %58:ptr<function, f32, read_write> = access %sums, %x_77
    %59:f32 = load %58
    %x_79:f32 = let %59
    %61:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %62:f32 = load %61
    %x_81:f32 = let %62
    %64:bool = eq %x_79, %x_81
    if %64 [t: $B7, f: $B8] {  # if_2
      $B7: {  # true
        %65:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %66:i32 = load %65
        %x_87:i32 = let %66
        %68:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %69:i32 = load %68
        %x_90:i32 = let %69
        %71:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %72:i32 = load %71
        %x_93:i32 = let %72
        %74:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %75:i32 = load %74
        %x_96:i32 = let %75
        %77:f32 = convert %x_87
        %78:f32 = let %77
        %79:f32 = convert %x_90
        %80:f32 = let %79
        %81:f32 = convert %x_93
        %82:f32 = let %81
        %83:f32 = convert %x_96
        %84:vec4<f32> = construct %78, %80, %82, %83
        store %x_GLF_color, %84
        exit_if  # if_2
      }
      $B8: {  # false
        %85:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %86:i32 = load %85
        %x_100:i32 = let %86
        %88:f32 = convert %x_100
        %x_101:f32 = let %88
        %90:vec4<f32> = construct %x_101, %x_101, %x_101, %x_101
        store %x_GLF_color, %90
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B9: {
    %92:void = call %main_1
    %93:vec4<f32> = load %x_GLF_color
    %94:main_out = construct %93
    ret %94
  }
}

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