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, 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: {  # 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: {
    %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: {  # 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: {  # true
            exit_if  # if_1
          }
          $B6: {  # 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: {  # 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
    %32:bool = lt %30, %31
    %x_61:bool = let %32
    store %x_68, %x_61
    if %x_61 [t: $B7] {  # if_2
      $B7: {  # true
        %34:f32 = load %a
        %35:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
        %36:f32 = load %35
        %37:bool = lt %34, %36
        store %x_67, %37
        %38:bool = load %x_67
        store %x_68, %38
        exit_if  # if_2
      }
    }
    %39:bool = load %x_68
    if %39 [t: $B8, f: $B9] {  # if_3
      $B8: {  # true
        %40:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
        %41:i32 = load %40
        %42:f32 = convert %41
        %43:f32 = let %42
        %44:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %45:i32 = load %44
        %46:f32 = convert %45
        %47:f32 = let %46
        %48:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %49:i32 = load %48
        %50:f32 = convert %49
        %51:f32 = let %50
        %52:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
        %53:i32 = load %52
        %54:f32 = convert %53
        %55:vec4<f32> = construct %43, %47, %51, %54
        store %x_GLF_color, %55
        exit_if  # if_3
      }
      $B9: {  # false
        %56:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %57:i32 = load %56
        %58:f32 = convert %57
        %59:vec4<f32> = construct %58
        store %x_GLF_color, %59
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B10: {
    %61:void = call %main_1
    %62:vec4<f32> = load %x_GLF_color
    %63:main_out = construct %62
    ret %63
  }
}

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