SKIP: FAILED

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

buf1 = struct @align(4) {
  x_GLF_uniform_float_values:array<strided_arr, 2> @offset(0)
}

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

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

main_out = struct @align(16) {
  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
}

$B1: {  # root
  %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void {
  $B2: {
    %f:ptr<function, f32, read_write> = var
    %arr:ptr<function, array<f32, 10>, read_write> = var
    store %f, 2.0f
    %7:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %8:f32 = load %7
    %9:f32 = let %8
    %10:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %11:f32 = load %10
    %12:f32 = let %11
    %13:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %14:f32 = load %13
    %15:f32 = let %14
    %16:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %17:f32 = load %16
    %18:f32 = let %17
    %19:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %20:f32 = load %19
    %21:f32 = let %20
    %22:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %23:f32 = load %22
    %24:f32 = let %23
    %25:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %26:f32 = load %25
    %27:f32 = let %26
    %28:f32 = load %f
    %29:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
    %30:f32 = load %29
    %31:f32 = pow %28, %30
    %32:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %33:f32 = load %32
    %34:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %35:f32 = load %34
    %36:array<f32, 10> = construct %9, %12, %15, %18, %21, %24, %27, %31, %33, %35
    store %arr, %36
    %37:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
    %38:i32 = load %37
    %39:ptr<function, f32, read_write> = access %arr, %38
    %40:f32 = load %39
    %41:i32 = call %tint_f32_to_i32, %40
    %43:ptr<uniform, i32, read> = access %x_9, 0u, 3i, 0u
    %44:i32 = load %43
    %45:bool = eq %41, %44
    if %45 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %46:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %47:i32 = load %46
        %48:f32 = convert %47
        %49:f32 = let %48
        %50:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
        %51:i32 = load %50
        %52:f32 = convert %51
        %53:f32 = let %52
        %54:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
        %55:i32 = load %54
        %56:f32 = convert %55
        %57:f32 = let %56
        %58:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 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_9, 0u, 2i, 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
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B6: {
    %71:i32 = convert %value
    %72:bool = gte %value, -2147483648.0f
    %73:i32 = select -2147483648i, %71, %72
    %74:bool = lte %value, 2147483520.0f
    %75:i32 = select 2147483647i, %73, %74
    ret %75
  }
}

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