SKIP: FAILED

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

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

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

buf1 = struct @align(4) {
  x_GLF_uniform_int_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 {
    %f:ptr<function, f32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %x_66:ptr<function, bool, read_write> = var
    %x_67_phi:ptr<function, bool, read_write> = var
    %9:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %x_34:f32 = load %9
    store %f, %x_34
    %11:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
    %x_36:i32 = load %11
    store %i, %x_36
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %x_41:i32 = load %i
        %14:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %x_43:i32 = load %14
        %16:bool = lt %x_41, %x_43
        if %16 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # false
            exit_loop  # loop_1
          }
        }
        %17:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
        %x_47:f32 = load %17
        %x_49:f32 = load %f
        %20:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %x_53:f32 = load %20
        %22:f32 = negation %x_47
        %23:f32 = mul %22, %x_49
        %24:f32 = abs %23
        %25:f32 = add %24, %x_53
        store %f, %25
        continue %b4
      }
      %b4 = block {  # continuing
        %x_55:i32 = load %i
        %27:i32 = add %x_55, 1i
        store %i, %27
        next_iteration %b3
      }
    }
    %x_57:f32 = load %f
    %29:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %x_59:f32 = load %29
    %x_60:bool = gt %x_57, %x_59
    store %x_67_phi, %x_60
    if %x_60 [t: %b7] {  # if_2
      %b7 = block {  # true
        %x_63:f32 = load %f
        %33:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
        %x_65:f32 = load %33
        %35:bool = lt %x_63, %x_65
        store %x_66, %35
        %36:bool = load %x_66
        store %x_67_phi, %36
        exit_if  # if_2
      }
    }
    %x_67:bool = load %x_67_phi
    if %x_67 [t: %b8, f: %b9] {  # if_3
      %b8 = block {  # true
        %38:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
        %x_72:i32 = load %38
        %40:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %x_75:i32 = load %40
        %42:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %x_78:i32 = load %42
        %44:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
        %x_81:i32 = load %44
        %46:f32 = convert %x_72
        %47:f32 = convert %x_75
        %48:f32 = convert %x_78
        %49:f32 = convert %x_81
        %50:vec4<f32> = construct %46, %47, %48, %49
        store %x_GLF_color, %50
        exit_if  # if_3
      }
      %b9 = block {  # false
        %51:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %x_85:i32 = load %51
        %x_86:f32 = convert %x_85
        %54:vec4<f32> = construct %x_86, %x_86, %x_86, %x_86
        store %x_GLF_color, %54
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b10 {
  %b10 = block {
    %56:void = call %main_1
    %57:vec4<f32> = load %x_GLF_color
    %58:main_out = construct %57
    ret %58
  }
}

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