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
    %10:i32 = load %9
    %11:u32 = bitcast %10
    %12:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
    %13:i32 = load %12
    %14:u32 = bitcast %13
    %15:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
    %16:i32 = load %15
    %17:u32 = bitcast %16
    %18:vec4<u32> = construct %11, %14, %17, 92985u
    %19:vec4<f32> = bitcast %18
    store %I, %19
    %20:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
    %21:f32 = load %20
    %22:vec4<f32> = construct %21
    store %N, %22
    %23:vec4<f32> = load %I
    %24:vec4<f32> = reflect %23, vec4<f32>(0.5f)
    store %R, %24
    %25:vec4<f32> = load %I
    %26:vec4<f32> = load %N
    %27:ptr<uniform, f32, read> = access %x_9, 0u, 2i, 0u
    %28:f32 = load %27
    %29:vec4<f32> = load %N
    %30:vec4<f32> = load %I
    %31:f32 = dot %29, %30
    %32:f32 = mul %28, %31
    %33:vec4<f32> = mul %26, %32
    %34:vec4<f32> = sub %25, %33
    store %r, %34
    %35:vec4<f32> = load %R
    %36:vec4<f32> = load %r
    %37:f32 = distance %35, %36
    %38:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
    %39:f32 = load %38
    %40:bool = lt %37, %39
    if %40 [t: %b3, f: %b4] {  # if_1
      %b3 = block {  # true
        %41:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %42:i32 = load %41
        %43:f32 = convert %42
        %44:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %45:i32 = load %44
        %46:f32 = convert %45
        %47:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %48:i32 = load %47
        %49:f32 = convert %48
        %50:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %51:i32 = load %50
        %52:f32 = convert %51
        %53:vec4<f32> = construct %43, %46, %49, %52
        store %x_GLF_color, %53
        exit_if  # if_1
      }
      %b4 = block {  # false
        %54:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %55:i32 = load %54
        %56:f32 = convert %55
        %57:vec4<f32> = construct %56
        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.  *
********************************************************************
