SKIP: FAILED

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

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

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

buf1 = struct @align(4) {
  x_GLF_uniform_float_values:array<strided_arr_1, 2> @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: {
    %m:ptr<function, mat3x3<f32>, read_write> = var
    %a:ptr<function, i32, read_write> = var
    %arr:ptr<function, array<vec3<f32>, 2>, read_write> = var
    %v:ptr<function, vec3<f32>, read_write> = var
    %9:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %10:i32 = load %9
    %x_45:i32 = let %10
    %12:f32 = convert %x_45
    %x_46:f32 = let %12
    %14:vec3<f32> = construct %x_46, 0.0f, 0.0f
    %15:vec3<f32> = let %14
    %16:vec3<f32> = construct 0.0f, %x_46, 0.0f
    %17:vec3<f32> = let %16
    %18:vec3<f32> = construct 0.0f, 0.0f, %x_46
    %19:mat3x3<f32> = construct %15, %17, %18
    store %m, %19
    %20:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %21:i32 = load %20
    %x_52:i32 = let %21
    store %a, %x_52
    %23:i32 = load %a
    %x_53:i32 = let %23
    %25:i32 = load %a
    %x_54:i32 = let %25
    %27:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
    %28:f32 = load %27
    %x_56:f32 = let %28
    %30:ptr<function, vec3<f32>, read_write> = access %m, %x_53
    store_vector_element %30, %x_54, %x_56
    %31:ptr<function, vec3<f32>, read_write> = access %m, 1i
    %32:vec3<f32> = load %31
    %x_59:vec3<f32> = let %32
    %34:ptr<function, vec3<f32>, read_write> = access %m, 1i
    %35:vec3<f32> = load %34
    %x_61:vec3<f32> = let %35
    %37:array<vec3<f32>, 2> = construct %x_59, %x_61
    store %arr, %37
    %38:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
    %39:f32 = load %38
    %x_64:f32 = let %39
    %41:vec3<f32> = construct %x_64, %x_64, %x_64
    store %v, %41
    %42:i32 = load %a
    %x_66:i32 = let %42
    %44:ptr<function, vec3<f32>, read_write> = access %arr, %x_66
    %45:vec3<f32> = load %44
    %x_68:vec3<f32> = let %45
    %47:vec3<f32> = load %v
    %x_69:vec3<f32> = let %47
    %49:vec3<f32> = add %x_69, %x_68
    store %v, %49
    %50:vec3<f32> = load %v
    %x_71:vec3<f32> = let %50
    %52:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %53:i32 = load %52
    %x_73:i32 = let %53
    %55:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %56:i32 = load %55
    %x_76:i32 = let %56
    %58:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %59:i32 = load %58
    %x_79:i32 = let %59
    %61:f32 = convert %x_73
    %62:f32 = let %61
    %63:f32 = convert %x_76
    %64:f32 = let %63
    %65:f32 = convert %x_79
    %66:vec3<f32> = construct %62, %64, %65
    %67:vec3<bool> = eq %x_71, %66
    %68:bool = all %67
    if %68 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %69:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %70:i32 = load %69
        %x_88:i32 = let %70
        %72:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %73:i32 = load %72
        %x_91:i32 = let %73
        %75:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %76:i32 = load %75
        %x_94:i32 = let %76
        %78:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %79:i32 = load %78
        %x_97:i32 = let %79
        %81:f32 = convert %x_88
        %82:f32 = let %81
        %83:f32 = convert %x_91
        %84:f32 = let %83
        %85:f32 = convert %x_94
        %86:f32 = let %85
        %87:f32 = convert %x_97
        %88:vec4<f32> = construct %82, %84, %86, %87
        store %x_GLF_color, %88
        exit_if  # if_1
      }
      $B4: {  # false
        %89:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %90:i32 = load %89
        %x_101:i32 = let %90
        %92:f32 = convert %x_101
        %x_102:f32 = let %92
        %94:vec4<f32> = construct %x_102, %x_102, %x_102, %x_102
        store %x_GLF_color, %94
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B5: {
    %96:void = call %main_1
    %97:vec4<f32> = load %x_GLF_color
    %98:main_out = construct %97
    ret %98
  }
}

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