SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 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)
}

buf2 = struct @align(4) {
  zero:i32 @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, 2> @offset(0)
}

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

%b1 = block {  # root
  %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %x_8:ptr<uniform, buf2, read> = var @binding_point(0, 2)
  %x_10:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void -> %b2 {
  %b2 = block {
    %f:ptr<function, f32, read_write> = var
    %x_48:ptr<function, bool, read_write> = var
    %x_49:ptr<function, bool, read_write> = var
    %9:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %10:f32 = load %9
    %11:f32 = negation %10
    %12:f32 = pow %11, 1.17520117759704589844f
    store %f, %12
    %13:f32 = load %f
    %14:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %15:f32 = load %14
    %x_40:bool = eq %13, %15
    store %x_49, %x_40
    %17:bool = eq %x_40, false
    if %17 [t: %b3] {  # if_1
      %b3 = block {  # true
        %18:ptr<uniform, i32, read> = access %x_8, 0u
        %19:i32 = load %18
        %20:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %21:i32 = load %20
        %22:bool = eq %19, %21
        store %x_48, %22
        %23:bool = load %x_48
        store %x_49, %23
        exit_if  # if_1
      }
    }
    %24:bool = load %x_49
    if %24 [t: %b4, f: %b5] {  # if_2
      %b4 = block {  # true
        %25:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %26:i32 = load %25
        %27:f32 = convert %26
        %28:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %29:i32 = load %28
        %30:f32 = convert %29
        %31:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %32:i32 = load %31
        %33:f32 = convert %32
        %34:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %35:i32 = load %34
        %36:f32 = convert %35
        %37:vec4<f32> = construct %27, %30, %33, %36
        store %x_GLF_color, %37
        exit_if  # if_2
      }
      %b5 = block {  # false
        %38:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %39:i32 = load %38
        %40:f32 = convert %39
        %41:vec4<f32> = construct %40
        store %x_GLF_color, %41
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b6 {
  %b6 = block {
    %43:void = call %main_1
    %44:vec4<f32> = load %x_GLF_color
    %45:main_out = construct %44
    ret %45
  }
}

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