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
    %11:u32 = bitcast %10
    %12:u32 = let %11
    %13:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
    %14:i32 = load %13
    %15:u32 = bitcast %14
    %16:u32 = let %15
    %17:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
    %18:i32 = load %17
    %19:u32 = bitcast %18
    %20:vec4<u32> = construct %12, %16, %19, 92985u
    %21:vec4<f32> = bitcast %20
    store %I, %21
    %22:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
    %23:f32 = load %22
    %24:vec4<f32> = construct %23
    store %N, %24
    %25:vec4<f32> = load %I
    %26:vec4<f32> = reflect %25, vec4<f32>(0.5f)
    store %R, %26
    %27:vec4<f32> = load %I
    %28:vec4<f32> = let %27
    %29:vec4<f32> = load %N
    %30:vec4<f32> = let %29
    %31:ptr<uniform, f32, read> = access %x_9, 0u, 2i, 0u
    %32:f32 = load %31
    %33:f32 = let %32
    %34:vec4<f32> = load %N
    %35:vec4<f32> = load %I
    %36:f32 = dot %34, %35
    %37:f32 = mul %33, %36
    %38:vec4<f32> = mul %30, %37
    %39:vec4<f32> = sub %28, %38
    store %r, %39
    %40:vec4<f32> = load %R
    %41:vec4<f32> = load %r
    %42:f32 = distance %40, %41
    %43:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
    %44:f32 = load %43
    %45:bool = lt %42, %44
    if %45 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %46:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %47:i32 = load %46
        %48:f32 = convert %47
        %49:f32 = let %48
        %50:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %51:i32 = load %50
        %52:f32 = convert %51
        %53:f32 = let %52
        %54:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %55:i32 = load %54
        %56:f32 = convert %55
        %57:f32 = let %56
        %58:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %59:i32 = load %58
        %60:f32 = convert %59
        %61:vec4<f32> = construct %49, %53, %57, %60
        store %x_GLF_color, %61
        exit_if  # if_1
      }
      $B4: {  # false
        %62:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %63:i32 = load %62
        %64:f32 = convert %63
        %65:vec4<f32> = construct %64
        store %x_GLF_color, %65
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B5: {
    %67:void = call %main_1
    %68:vec4<f32> = load %x_GLF_color
    %69:main_out = construct %68
    ret %69
  }
}

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