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, 4> @offset(0)
}

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

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

%func_ = func():void {
  $B2: {
    %x_66:ptr<function, i32, read_write> = var
    %6:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %7:i32 = load %6
    %x_62:i32 = let %7
    %9:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
    %10:i32 = load %9
    store %x_66, %10
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %x_67:ptr<function, i32, read_write> = var
        %12:i32 = load %x_66
        %13:ptr<uniform, i32, read> = access %x_7, 0u, 3i, 0u
        %14:i32 = load %13
        %15:bool = lt %12, %14
        if %15 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %16:i32 = load %x_GLF_global_loop_count
        %17:i32 = add %16, 1i
        store %x_GLF_global_loop_count, %17
        %18:i32 = load %x_66
        %19:i32 = add %18, 1i
        store %x_67, %19
        %20:i32 = load %x_67
        store %x_66, %20
        next_iteration  # -> $B3
      }
    }
    %21:bool = lt %x_62, %x_62
    if %21 [t: $B7] {  # if_2
      $B7: {  # true
        ret
      }
    }
    ret
  }
}
%main_1 = func():void {
  $B8: {
    store %x_GLF_global_loop_count, 0i
    loop [b: $B9, c: $B10] {  # loop_2
      $B9: {  # body
        %23:i32 = load %x_GLF_global_loop_count
        %24:bool = lt %23, 10i
        if %24 [t: $B11, f: $B12] {  # if_3
          $B11: {  # true
            exit_if  # if_3
          }
          $B12: {  # false
            exit_loop  # loop_2
          }
        }
        continue  # -> $B10
      }
      $B10: {  # continuing
        %25:i32 = load %x_GLF_global_loop_count
        %26:i32 = add %25, 1i
        store %x_GLF_global_loop_count, %26
        %27:void = call %func_
        next_iteration  # -> $B9
      }
    }
    loop [b: $B13, c: $B14] {  # loop_3
      $B13: {  # body
        %28:i32 = load %x_GLF_global_loop_count
        %29:bool = lt %28, 10i
        if %29 [t: $B15, f: $B16] {  # if_4
          $B15: {  # true
            exit_if  # if_4
          }
          $B16: {  # false
            exit_loop  # loop_3
          }
        }
        continue  # -> $B14
      }
      $B14: {  # continuing
        %30:i32 = load %x_GLF_global_loop_count
        %31:i32 = add %30, 1i
        store %x_GLF_global_loop_count, %31
        next_iteration  # -> $B13
      }
    }
    %32:i32 = load %x_GLF_global_loop_count
    %33:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
    %34:i32 = load %33
    %35:bool = eq %32, %34
    if %35 [t: $B17, f: $B18] {  # if_5
      $B17: {  # true
        %36:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %37:i32 = load %36
        %38:f32 = convert %37
        %x_51:f32 = let %38
        %40:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %41:i32 = load %40
        %42:f32 = convert %41
        %x_54:f32 = let %42
        %44:vec4<f32> = construct %x_51, %x_54, %x_54, %x_51
        store %x_GLF_color, %44
        exit_if  # if_5
      }
      $B18: {  # false
        %45:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %46:i32 = load %45
        %47:f32 = convert %46
        %48:vec4<f32> = construct %47
        store %x_GLF_color, %48
        exit_if  # if_5
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B19: {
    %50:void = call %main_1
    %51:vec4<f32> = load %x_GLF_color
    %52:main_out = construct %51
    ret %52
  }
}

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