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)
}

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_11: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
    %b:ptr<function, f32, read_write> = var
    %c:ptr<function, f32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %9:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %10:f32 = load %9
    %x_35:f32 = let %10
    store %a, %x_35
    %12:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %13:f32 = load %12
    %x_37:f32 = let %13
    store %b, %x_37
    %15:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %16:f32 = load %15
    %x_39:f32 = let %16
    store %c, %x_39
    %18:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
    %19:i32 = load %18
    %x_41:i32 = let %19
    store %i, %x_41
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %21:i32 = load %i
        %x_46:i32 = let %21
        %23:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
        %24:i32 = load %23
        %x_48:i32 = let %24
        %26:bool = lt %x_46, %x_48
        if %26 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %27:i32 = load %i
        %x_51:i32 = let %27
        %29:ptr<uniform, i32, read> = access %x_11, 0u, 2i, 0u
        %30:i32 = load %29
        %x_53:i32 = let %30
        %32:bool = eq %x_51, %x_53
        if %32 [t: $B7] {  # if_2
          $B7: {  # true
            %33:f32 = load %a
            %x_57:f32 = let %33
            %35:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
            %36:f32 = load %35
            %x_60:f32 = let %36
            %38:f32 = dpdx %x_57
            %39:f32 = add %38, %x_60
            store %b, %39
            exit_if  # if_2
          }
        }
        %40:f32 = load %a
        %x_62:f32 = let %40
        %42:f32 = dpdx %x_62
        store %c, %42
        %43:f32 = load %c
        %x_64:f32 = let %43
        %45:f32 = load %b
        %x_65:f32 = let %45
        %47:f32 = div %x_64, %x_65
        store %a, %47
        continue  # -> $B4
      }
      $B4: {  # continuing
        %48:i32 = load %i
        %x_67:i32 = let %48
        %50:i32 = add %x_67, 1i
        store %i, %50
        next_iteration  # -> $B3
      }
    }
    %51:f32 = load %a
    %x_69:f32 = let %51
    %53:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %54:f32 = load %53
    %x_71:f32 = let %54
    %56:bool = eq %x_69, %x_71
    if %56 [t: $B8, f: $B9] {  # if_3
      $B8: {  # true
        %57:ptr<uniform, i32, read> = access %x_11, 0u, 2i, 0u
        %58:i32 = load %57
        %x_77:i32 = let %58
        %60:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
        %61:i32 = load %60
        %x_80:i32 = let %61
        %63:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
        %64:i32 = load %63
        %x_83:i32 = let %64
        %66:ptr<uniform, i32, read> = access %x_11, 0u, 2i, 0u
        %67:i32 = load %66
        %x_86:i32 = let %67
        %69:f32 = convert %x_77
        %70:f32 = let %69
        %71:f32 = convert %x_80
        %72:f32 = let %71
        %73:f32 = convert %x_83
        %74:f32 = let %73
        %75:f32 = convert %x_86
        %76:vec4<f32> = construct %70, %72, %74, %75
        store %x_GLF_color, %76
        exit_if  # if_3
      }
      $B9: {  # false
        %77:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
        %78:i32 = load %77
        %x_90:i32 = let %78
        %80:f32 = convert %x_90
        %x_91:f32 = let %80
        %82:vec4<f32> = construct %x_91, %x_91, %x_91, %x_91
        store %x_GLF_color, %82
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B10: {
    %84:void = call %main_1
    %85:vec4<f32> = load %x_GLF_color
    %86:main_out = construct %85
    ret %86
  }
}

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