SKIP: FAILED

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

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

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

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

%main_1 = func():void {
  $B2: {
    %a:ptr<function, f32, read_write> = var
    %b:ptr<function, f32, read_write> = var
    %c:ptr<function, f32, read_write> = var
    store %a, -1.0f
    store %b, 1.70000004768371582031f
    %7:f32 = load %a
    %x_27:f32 = let %7
    %9:f32 = load %b
    %x_28:f32 = let %9
    %11:f32 = pow %x_27, %x_28
    store %c, %11
    %12:f32 = load %c
    %x_30:f32 = let %12
    %14:vec4<f32> = construct %x_30, %x_30, %x_30, %x_30
    store %x_GLF_color, %14
    %15:f32 = load %a
    %x_32:f32 = let %15
    %17:f32 = load %b
    %x_34:f32 = let %17
    %19:bool = eq %x_32, -1.0f
    %20:bool = eq %x_34, 1.70000004768371582031f
    %21:bool = and %19, %20
    if %21 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %22:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
        %23:f32 = load %22
        %x_41:f32 = let %23
        %25:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
        %26:f32 = load %25
        %x_43:f32 = let %26
        %28:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
        %29:f32 = load %28
        %x_45:f32 = let %29
        %31:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
        %32:f32 = load %31
        %x_47:f32 = let %32
        %34:vec4<f32> = construct %x_41, %x_43, %x_45, %x_47
        store %x_GLF_color, %34
        exit_if  # if_1
      }
      $B4: {  # false
        %35:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
        %36:f32 = load %35
        %x_50:f32 = let %36
        %38:vec4<f32> = construct %x_50, %x_50, %x_50, %x_50
        store %x_GLF_color, %38
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B5: {
    %40:void = call %main_1
    %41:vec4<f32> = load %x_GLF_color
    %42:main_out = construct %41
    ret %42
  }
}

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