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, 2> @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: {
    %arr:ptr<function, array<f32, 5>, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %j:ptr<function, i32, read_write> = var
    %8:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %9:f32 = load %8
    %x_38:f32 = let %9
    %11:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %12:f32 = load %11
    %x_40:f32 = let %12
    %14:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %15:f32 = load %14
    %x_42:f32 = let %15
    %17:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %18:f32 = load %17
    %x_44:f32 = let %18
    %20:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %21:f32 = load %20
    %x_46:f32 = let %21
    %23:array<f32, 5> = construct %x_38, %x_40, %x_42, %x_44, %x_46
    store %arr, %23
    %24:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
    %25:i32 = load %24
    %x_49:i32 = let %25
    store %i, %x_49
    store %j, 0i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %27:i32 = load %i
        %x_54:i32 = let %27
        %29:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %30:i32 = load %29
        %x_56:i32 = let %30
        %32:bool = lt %x_54, %x_56
        if %32 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %33:i32 = load %j
        %x_59:i32 = let %33
        %35:bool = lt %x_59, -1i
        if %35 [t: $B7] {  # if_2
          $B7: {  # true
            exit_loop  # loop_1
          }
        }
        %36:i32 = load %j
        %x_63:i32 = let %36
        %38:ptr<function, f32, read_write> = access %arr, %x_63
        %39:f32 = load %38
        %x_65:f32 = let %39
        %41:ptr<function, f32, read_write> = access %arr, %x_63
        %42:f32 = add %x_65, 1.0f
        store %41, %42
        continue  # -> $B4
      }
      $B4: {  # continuing
        %43:i32 = load %i
        %x_68:i32 = let %43
        %45:i32 = add %x_68, 1i
        store %i, %45
        %46:i32 = load %j
        %x_70:i32 = let %46
        %48:i32 = add %x_70, 1i
        store %j, %48
        next_iteration  # -> $B3
      }
    }
    %49:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %50:f32 = load %49
    %x_73:f32 = let %50
    %52:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %53:f32 = load %52
    %x_75:f32 = let %53
    %55:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %56:f32 = load %55
    %x_77:f32 = let %56
    %58:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %59:f32 = load %58
    %x_79:f32 = let %59
    %61:vec4<f32> = construct %x_73, %x_75, %x_77, %x_79
    store %x_GLF_color, %61
    %62:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
    %63:i32 = load %62
    %x_82:i32 = let %63
    store %i, %x_82
    loop [b: $B8, c: $B9] {  # loop_2
      $B8: {  # body
        %65:i32 = load %i
        %x_87:i32 = let %65
        %67:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %68:i32 = load %67
        %x_89:i32 = let %68
        %70:bool = lt %x_87, %x_89
        if %70 [t: $B10, f: $B11] {  # if_3
          $B10: {  # true
            exit_if  # if_3
          }
          $B11: {  # false
            exit_loop  # loop_2
          }
        }
        %71:i32 = load %i
        %x_92:i32 = let %71
        %73:ptr<function, f32, read_write> = access %arr, %x_92
        %74:f32 = load %73
        %x_94:f32 = let %74
        %76:bool = eq %x_94, 2.0f
        %77:bool = eq %76, false
        if %77 [t: $B12] {  # if_4
          $B12: {  # true
            %78:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
            %79:f32 = load %78
            %x_99:f32 = let %79
            %81:vec4<f32> = construct %x_99, %x_99, %x_99, %x_99
            store %x_GLF_color, %81
            exit_if  # if_4
          }
        }
        continue  # -> $B9
      }
      $B9: {  # continuing
        %82:i32 = load %i
        %x_101:i32 = let %82
        %84:i32 = add %x_101, 1i
        store %i, %84
        next_iteration  # -> $B8
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B13: {
    %86:void = call %main_1
    %87:vec4<f32> = load %x_GLF_color
    %88:main_out = construct %87
    ret %88
  }
}

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