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: {
    %f:ptr<function, f32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %x_66:ptr<function, bool, read_write> = var
    %x_67_phi:ptr<function, bool, read_write> = var
    %9:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %10:f32 = load %9
    %x_34:f32 = let %10
    store %f, %x_34
    %12:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
    %13:i32 = load %12
    %x_36:i32 = let %13
    store %i, %x_36
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %15:i32 = load %i
        %x_41:i32 = let %15
        %17:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %18:i32 = load %17
        %x_43:i32 = let %18
        %20:bool = lt %x_41, %x_43
        if %20 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %21:ptr<uniform, f32, read> = access %x_6, 0u, 3i, 0u
        %22:f32 = load %21
        %x_47:f32 = let %22
        %24:f32 = load %f
        %x_49:f32 = let %24
        %26:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %27:f32 = load %26
        %x_53:f32 = let %27
        %29:f32 = negation %x_47
        %30:f32 = mul %29, %x_49
        %31:f32 = abs %30
        %32:f32 = add %31, %x_53
        store %f, %32
        continue  # -> $B4
      }
      $B4: {  # continuing
        %33:i32 = load %i
        %x_55:i32 = let %33
        %35:i32 = add %x_55, 1i
        store %i, %35
        next_iteration  # -> $B3
      }
    }
    %36:f32 = load %f
    %x_57:f32 = let %36
    %38:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %39:f32 = load %38
    %x_59:f32 = let %39
    %41:bool = gt %x_57, %x_59
    %x_60:bool = let %41
    store %x_67_phi, %x_60
    if %x_60 [t: $B7] {  # if_2
      $B7: {  # true
        %43:f32 = load %f
        %x_63:f32 = let %43
        %45:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
        %46:f32 = load %45
        %x_65:f32 = let %46
        %48:bool = lt %x_63, %x_65
        store %x_66, %48
        %49:bool = load %x_66
        store %x_67_phi, %49
        exit_if  # if_2
      }
    }
    %50:bool = load %x_67_phi
    %x_67:bool = let %50
    if %x_67 [t: $B8, f: $B9] {  # if_3
      $B8: {  # true
        %52:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
        %53:i32 = load %52
        %x_72:i32 = let %53
        %55:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %56:i32 = load %55
        %x_75:i32 = let %56
        %58:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %59:i32 = load %58
        %x_78:i32 = let %59
        %61:ptr<uniform, i32, read> = access %x_9, 0u, 2i, 0u
        %62:i32 = load %61
        %x_81:i32 = let %62
        %64:f32 = convert %x_72
        %65:f32 = let %64
        %66:f32 = convert %x_75
        %67:f32 = let %66
        %68:f32 = convert %x_78
        %69:f32 = let %68
        %70:f32 = convert %x_81
        %71:vec4<f32> = construct %65, %67, %69, %70
        store %x_GLF_color, %71
        exit_if  # if_3
      }
      $B9: {  # false
        %72:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %73:i32 = load %72
        %x_85:i32 = let %73
        %75:f32 = convert %x_85
        %x_86:f32 = let %75
        %77:vec4<f32> = construct %x_86, %x_86, %x_86, %x_86
        store %x_GLF_color, %77
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B10: {
    %79:void = call %main_1
    %80:vec4<f32> = load %x_GLF_color
    %81:main_out = construct %80
    ret %81
  }
}

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