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, 3> @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_10: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 {
    %f0:ptr<function, f32, read_write> = var
    %f1:ptr<function, f32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %x_63:ptr<function, bool, read_write> = var
    %x_64:ptr<function, bool, read_write> = var
    %10:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %11:f32 = load %10
    store %f0, %11
    %12:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %13:f32 = load %12
    store %f1, %13
    %14:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
    %15:i32 = load %14
    store %i, %15
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %16:i32 = load %i
        %17:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %18:i32 = load %17
        %19:bool = lt %16, %18
        if %19 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # false
            exit_loop  # loop_1
          }
        }
        %20:f32 = load %f0
        %21:f32 = mul 1.10000002384185791016f, %20
        %22:f32 = abs %21
        store %f0, %22
        %23:f32 = load %f0
        store %f1, %23
        continue %b4
      }
      %b4 = block {  # continuing
        %24:i32 = load %i
        %25:i32 = add %24, 1i
        store %i, %25
        next_iteration %b3
      }
    }
    %26:f32 = load %f1
    %27:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %28:f32 = load %27
    %x_57:bool = gt %26, %28
    store %x_64, %x_57
    if %x_57 [t: %b7] {  # if_2
      %b7 = block {  # true
        %30:f32 = load %f1
        %31:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
        %32:f32 = load %31
        %33:bool = lt %30, %32
        store %x_63, %33
        %34:bool = load %x_63
        store %x_64, %34
        exit_if  # if_2
      }
    }
    %35:bool = load %x_64
    if %35 [t: %b8, f: %b9] {  # if_3
      %b8 = block {  # true
        %36:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %37:i32 = load %36
        %38:f32 = convert %37
        %39:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %40:i32 = load %39
        %41:f32 = convert %40
        %42:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %43:i32 = load %42
        %44:f32 = convert %43
        %45:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %46:i32 = load %45
        %47:f32 = convert %46
        %48:vec4<f32> = construct %38, %41, %44, %47
        store %x_GLF_color, %48
        exit_if  # if_3
      }
      %b9 = block {  # false
        %49:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %50:i32 = load %49
        %51:f32 = convert %50
        %52:vec4<f32> = construct %51
        store %x_GLF_color, %52
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b10 {
  %b10 = block {
    %54:void = call %main_1
    %55:vec4<f32> = load %x_GLF_color
    %56:main_out = construct %55
    ret %56
  }
}

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