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
    store %a, %10
    %11:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %12:f32 = load %11
    store %b, %12
    %13:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %14:f32 = load %13
    store %c, %14
    %15:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
    %16:i32 = load %15
    store %i, %16
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %17:i32 = load %i
        %18:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
        %19:i32 = load %18
        %20:bool = lt %17, %19
        if %20 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %21:i32 = load %i
        %22:ptr<uniform, i32, read> = access %x_11, 0u, 2i, 0u
        %23:i32 = load %22
        %24:bool = eq %21, %23
        if %24 [t: $B7] {  # if_2
          $B7: {  # true
            %25:f32 = load %a
            %x_57:f32 = let %25
            %27:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
            %28:f32 = load %27
            %x_60:f32 = let %28
            %30:f32 = dpdx %x_57
            %31:f32 = add %30, %x_60
            store %b, %31
            exit_if  # if_2
          }
        }
        %32:f32 = load %a
        %x_62:f32 = let %32
        %34:f32 = dpdx %x_62
        store %c, %34
        %35:f32 = load %c
        %36:f32 = load %b
        %37:f32 = div %35, %36
        store %a, %37
        continue  # -> $B4
      }
      $B4: {  # continuing
        %38:i32 = load %i
        %39:i32 = add %38, 1i
        store %i, %39
        next_iteration  # -> $B3
      }
    }
    %40:f32 = load %a
    %41:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %42:f32 = load %41
    %43:bool = eq %40, %42
    if %43 [t: $B8, f: $B9] {  # if_3
      $B8: {  # true
        %44:ptr<uniform, i32, read> = access %x_11, 0u, 2i, 0u
        %45:i32 = load %44
        %46:f32 = convert %45
        %47:f32 = let %46
        %48:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
        %49:i32 = load %48
        %50:f32 = convert %49
        %51:f32 = let %50
        %52:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
        %53:i32 = load %52
        %54:f32 = convert %53
        %55:f32 = let %54
        %56:ptr<uniform, i32, read> = access %x_11, 0u, 2i, 0u
        %57:i32 = load %56
        %58:f32 = convert %57
        %59:vec4<f32> = construct %47, %51, %55, %58
        store %x_GLF_color, %59
        exit_if  # if_3
      }
      $B9: {  # false
        %60:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
        %61:i32 = load %60
        %62:f32 = convert %61
        %63:vec4<f32> = construct %62
        store %x_GLF_color, %63
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B10: {
    %65:void = call %main_1
    %66:vec4<f32> = load %x_GLF_color
    %67:main_out = construct %66
    ret %67
  }
}

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