SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 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 = block {  # 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 {
  %b2 = block {
    %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
    %x_40:i32 = load %9
    %11:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
    %x_43:i32 = load %11
    %13:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
    %x_46:i32 = load %13
    %15:u32 = bitcast %x_40
    %16:u32 = bitcast %x_43
    %17:u32 = bitcast %x_46
    %18:vec4<u32> = construct %15, %16, %17, 92985u
    %19:vec4<f32> = bitcast %18
    store %I, %19
    %20:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
    %x_51:f32 = load %20
    %22:vec4<f32> = construct %x_51, %x_51, %x_51, %x_51
    store %N, %22
    %x_53:vec4<f32> = load %I
    %24:vec4<f32> = reflect %x_53, vec4<f32>(0.5f)
    store %R, %24
    %x_55:vec4<f32> = load %I
    %26:ptr<uniform, f32, read> = access %x_9, 0u, 2i, 0u
    %x_57:f32 = load %26
    %x_58:vec4<f32> = load %N
    %x_59:vec4<f32> = load %I
    %x_62:vec4<f32> = load %N
    %31:f32 = dot %x_58, %x_59
    %32:f32 = mul %x_57, %31
    %33:vec4<f32> = mul %x_62, %32
    %34:vec4<f32> = sub %x_55, %33
    store %r, %34
    %x_65:vec4<f32> = load %R
    %x_66:vec4<f32> = load %r
    %37:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
    %x_69:f32 = load %37
    %39:f32 = distance %x_65, %x_66
    %40:bool = lt %39, %x_69
    if %40 [t: %b3, f: %b4] {  # if_1
      %b3 = block {  # true
        %41:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %x_75:i32 = load %41
        %43:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %x_78:i32 = load %43
        %45:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %x_81:i32 = load %45
        %47:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %x_84:i32 = load %47
        %49:f32 = convert %x_75
        %50:f32 = convert %x_78
        %51:f32 = convert %x_81
        %52:f32 = convert %x_84
        %53:vec4<f32> = construct %49, %50, %51, %52
        store %x_GLF_color, %53
        exit_if  # if_1
      }
      %b4 = block {  # false
        %54:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %x_88:i32 = load %54
        %x_89:f32 = convert %x_88
        %57:vec4<f32> = construct %x_89, %x_89, %x_89, %x_89
        store %x_GLF_color, %57
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b5 {
  %b5 = block {
    %59:void = call %main_1
    %60:vec4<f32> = load %x_GLF_color
    %61:main_out = construct %60
    ret %61
  }
}

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