SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
  el:i32 @offset(0)
}

buf0 = struct @align(4) {
  x_GLF_uniform_int_values:array<strided_arr, 3> @offset(0)
}

S = struct @align(4) {
  data:i32 @offset(0)
}

main_out = struct @align(16) {
  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
}

$B1: {  # root
  %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%func_struct_S_i11_i1_ = func(%s:ptr<function, S, read_write>, %x:ptr<function, i32, read_write>):void {
  $B2: {
    %6:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
    %7:i32 = load %6
    %x_103:i32 = let %7
    %9:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
    %10:i32 = load %9
    %x_105:i32 = let %10
    %12:bool = eq %x_103, %x_105
    if %12 [t: $B3] {  # if_1
      $B3: {  # true
        ret
      }
    }
    %13:i32 = load %x
    %x_109:i32 = let %13
    %15:ptr<function, i32, read_write> = access %s, 0u
    store %15, %x_109
    ret
  }
}
%main_1 = func():void {
  $B4: {
    %i:ptr<function, i32, read_write> = var
    %arr:ptr<function, array<S, 10>, read_write> = var
    %index:ptr<function, i32, read_write> = var
    %param:ptr<function, S, read_write> = var
    %param_1:ptr<function, i32, read_write> = var
    %param_2:ptr<function, S, read_write> = var
    %param_3:ptr<function, i32, read_write> = var
    store %i, 0i
    loop [b: $B5, c: $B6] {  # loop_1
      $B5: {  # body
        %24:i32 = load %i
        %x_43:i32 = let %24
        %26:bool = lt %x_43, 10i
        if %26 [t: $B7, f: $B8] {  # if_2
          $B7: {  # true
            exit_if  # if_2
          }
          $B8: {  # false
            exit_loop  # loop_1
          }
        }
        %27:i32 = load %i
        %x_46:i32 = let %27
        %29:ptr<function, i32, read_write> = access %arr, %x_46, 0u
        store %29, 0i
        continue  # -> $B6
      }
      $B6: {  # continuing
        %30:i32 = load %i
        %x_48:i32 = let %30
        %32:i32 = add %x_48, 1i
        store %i, %32
        next_iteration  # -> $B5
      }
    }
    %33:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
    %34:i32 = load %33
    %x_51:i32 = let %34
    %36:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
    %37:i32 = load %36
    %x_53:i32 = let %37
    %39:bool = eq %x_51, %x_53
    if %39 [t: $B9, f: $B10] {  # if_3
      $B9: {  # true
        %40:i32 = load %index
        %x_58:i32 = let %40
        %42:ptr<function, S, read_write> = access %arr, %x_58
        %43:S = load %42
        %x_60:S = let %43
        store %param, %x_60
        %45:i32 = load %index
        %x_61:i32 = let %45
        store %param_1, %x_61
        %47:void = call %func_struct_S_i11_i1_, %param, %param_1
        %48:S = load %param
        %x_63:S = let %48
        %50:ptr<function, S, read_write> = access %arr, %x_58
        store %50, %x_63
        exit_if  # if_3
      }
      $B10: {  # false
        %51:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %52:i32 = load %51
        %x_66:i32 = let %52
        %54:ptr<function, S, read_write> = access %arr, %x_66
        %55:S = load %54
        %x_68:S = let %55
        store %param_2, %x_68
        %57:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %58:i32 = load %57
        %x_70:i32 = let %58
        store %param_3, %x_70
        %60:void = call %func_struct_S_i11_i1_, %param_2, %param_3
        %61:S = load %param_2
        %x_72:S = let %61
        %63:ptr<function, S, read_write> = access %arr, %x_66
        store %63, %x_72
        exit_if  # if_3
      }
    }
    %64:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
    %65:i32 = load %64
    %x_75:i32 = let %65
    %67:ptr<function, i32, read_write> = access %arr, %x_75, 0u
    %68:i32 = load %67
    %x_77:i32 = let %68
    %70:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
    %71:i32 = load %70
    %x_79:i32 = let %71
    %73:bool = eq %x_77, %x_79
    if %73 [t: $B11, f: $B12] {  # if_4
      $B11: {  # true
        %74:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %75:i32 = load %74
        %x_85:i32 = let %75
        %77:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %78:i32 = load %77
        %x_88:i32 = let %78
        %80:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %81:i32 = load %80
        %x_91:i32 = let %81
        %83:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %84:i32 = load %83
        %x_94:i32 = let %84
        %86:f32 = convert %x_85
        %87:f32 = let %86
        %88:f32 = convert %x_88
        %89:f32 = let %88
        %90:f32 = convert %x_91
        %91:f32 = let %90
        %92:f32 = convert %x_94
        %93:vec4<f32> = construct %87, %89, %91, %92
        store %x_GLF_color, %93
        exit_if  # if_4
      }
      $B12: {  # false
        %94:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %95:i32 = load %94
        %x_98:i32 = let %95
        %97:f32 = convert %x_98
        %x_99:f32 = let %97
        %99:vec4<f32> = construct %x_99, %x_99, %x_99, %x_99
        store %x_GLF_color, %99
        exit_if  # if_4
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B13: {
    %101:void = call %main_1
    %102:vec4<f32> = load %x_GLF_color
    %103:main_out = construct %102
    ret %103
  }
}

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