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, 5> @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, 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: {
    %I:ptr<function, vec4<f32>, read_write> = var
    %N:ptr<function, vec4<f32>, read_write> = var
    %R:ptr<function, vec4<f32>, read_write> = var
    %r:ptr<function, vec4<f32>, read_write> = var
    %9:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %10:i32 = load %9
    %x_40:i32 = let %10
    %12:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
    %13:i32 = load %12
    %x_43:i32 = let %13
    %15:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
    %16:i32 = load %15
    %x_46:i32 = let %16
    %18:u32 = bitcast %x_40
    %19:u32 = let %18
    %20:u32 = bitcast %x_43
    %21:u32 = let %20
    %22:u32 = bitcast %x_46
    %23:vec4<u32> = construct %19, %21, %22, 92985u
    %24:vec4<f32> = bitcast %23
    store %I, %24
    %25:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
    %26:f32 = load %25
    %x_51:f32 = let %26
    %28:vec4<f32> = construct %x_51, %x_51, %x_51, %x_51
    store %N, %28
    %29:vec4<f32> = load %I
    %x_53:vec4<f32> = let %29
    %31:vec4<f32> = reflect %x_53, vec4<f32>(0.5f)
    store %R, %31
    %32:vec4<f32> = load %I
    %x_55:vec4<f32> = let %32
    %34:ptr<uniform, f32, read> = access %x_9, 0u, 2i, 0u
    %35:f32 = load %34
    %x_57:f32 = let %35
    %37:vec4<f32> = load %N
    %x_58:vec4<f32> = let %37
    %39:vec4<f32> = load %I
    %x_59:vec4<f32> = let %39
    %41:vec4<f32> = load %N
    %x_62:vec4<f32> = let %41
    %43:f32 = dot %x_58, %x_59
    %44:f32 = mul %x_57, %43
    %45:vec4<f32> = mul %x_62, %44
    %46:vec4<f32> = sub %x_55, %45
    store %r, %46
    %47:vec4<f32> = load %R
    %x_65:vec4<f32> = let %47
    %49:vec4<f32> = load %r
    %x_66:vec4<f32> = let %49
    %51:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
    %52:f32 = load %51
    %x_69:f32 = let %52
    %54:f32 = distance %x_65, %x_66
    %55:bool = lt %54, %x_69
    if %55 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %56:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %57:i32 = load %56
        %x_75:i32 = let %57
        %59:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %60:i32 = load %59
        %x_78:i32 = let %60
        %62:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %63:i32 = load %62
        %x_81:i32 = let %63
        %65:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %66:i32 = load %65
        %x_84:i32 = let %66
        %68:f32 = convert %x_75
        %69:f32 = let %68
        %70:f32 = convert %x_78
        %71:f32 = let %70
        %72:f32 = convert %x_81
        %73:f32 = let %72
        %74:f32 = convert %x_84
        %75:vec4<f32> = construct %69, %71, %73, %74
        store %x_GLF_color, %75
        exit_if  # if_1
      }
      $B4: {  # false
        %76:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %77:i32 = load %76
        %x_88:i32 = let %77
        %79:f32 = convert %x_88
        %x_89:f32 = let %79
        %81:vec4<f32> = construct %x_89, %x_89, %x_89, %x_89
        store %x_GLF_color, %81
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B5: {
    %83:void = call %main_1
    %84:vec4<f32> = load %x_GLF_color
    %85:main_out = construct %84
    ret %85
  }
}

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