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 {
    %a:ptr<function, f32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %b:ptr<function, f32, read_write> = var
    %c:ptr<function, f32, read_write> = var
    %d:ptr<function, f32, read_write> = var
    %x_67:ptr<function, bool, read_write> = var
    %x_68:ptr<function, bool, read_write> = var
    %12:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %13:f32 = load %12
    store %a, %13
    %14:ptr<uniform, i32, read> = access %x_9, 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_9, 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 %a
        store %b, %20
        %21:f32 = load %b
        store %c, %21
        %22:f32 = load %c
        %23:f32 = asin %22
        store %d, %23
        %24:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
        %25:f32 = load %24
        store %c, %25
        %26:f32 = load %d
        store %a, %26
        continue %b4
      }
      %b4 = block {  # continuing
        %27:i32 = load %i
        %28:i32 = add %27, 1i
        store %i, %28
        next_iteration %b3
      }
    }
    %29:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
    %30:f32 = load %29
    %31:f32 = load %a
    %x_61:bool = lt %30, %31
    store %x_68, %x_61
    if %x_61 [t: %b7] {  # if_2
      %b7 = block {  # true
        %33:f32 = load %a
        %34:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
        %35:f32 = load %34
        %36:bool = lt %33, %35
        store %x_67, %36
        %37:bool = load %x_67
        store %x_68, %37
        exit_if  # if_2
      }
    }
    %38:bool = load %x_68
    if %38 [t: %b8, f: %b9] {  # if_3
      %b8 = block {  # true
        %39:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
        %40:i32 = load %39
        %41:f32 = convert %40
        %42:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %43:i32 = load %42
        %44:f32 = convert %43
        %45:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %46:i32 = load %45
        %47:f32 = convert %46
        %48:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
        %49:i32 = load %48
        %50:f32 = convert %49
        %51:vec4<f32> = construct %41, %44, %47, %50
        store %x_GLF_color, %51
        exit_if  # if_3
      }
      %b9 = block {  # false
        %52:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %53:i32 = load %52
        %54:f32 = convert %53
        %55:vec4<f32> = construct %54
        store %x_GLF_color, %55
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b10 {
  %b10 = block {
    %57:void = call %main_1
    %58:vec4<f32> = load %x_GLF_color
    %59:main_out = construct %58
    ret %59
  }
}

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