SKIP: FAILED

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

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

strided_arr_1 = struct @align(4) {
  el:f32 @offset(0)
}

buf0 = struct @align(4) {
  x_GLF_uniform_float_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, buf1, read> = var @binding_point(0, 1)
  %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void {
  $B2: {
    %v:ptr<function, vec4<f32>, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %7:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %8:i32 = load %7
    %9:f32 = convert %8
    %10:f32 = let %9
    %11:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %12:i32 = load %11
    %13:f32 = convert %12
    %14:f32 = let %13
    %15:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
    %16:i32 = load %15
    %17:f32 = convert %16
    %18:f32 = let %17
    %19:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %20:i32 = load %19
    %21:f32 = convert %20
    %22:vec4<f32> = construct %10, %14, %18, %21
    store %v, %22
    %23:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
    %24:i32 = load %23
    store %i, %24
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %25:i32 = load %i
        %26:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %27:i32 = load %26
        %28:bool = lt %25, %27
        if %28 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %29:f32 = load_vector_element %v, 0u
        %30:f32 = load_vector_element %v, 1u
        %31:f32 = load_vector_element %v, 2u
        %32:f32 = load_vector_element %v, 3u
        %33:vec4<f32> = construct %29, %30, %31, %32
        %34:vec4<f32> = let %33
        %35:f32 = load_vector_element %v, 0u
        %36:f32 = load_vector_element %v, 1u
        %37:f32 = load_vector_element %v, 2u
        %38:f32 = load_vector_element %v, 3u
        %39:vec4<f32> = construct %35, %36, %37, %38
        %40:vec4<f32> = let %39
        %41:f32 = load_vector_element %v, 0u
        %42:f32 = load_vector_element %v, 1u
        %43:f32 = load_vector_element %v, 2u
        %44:f32 = load_vector_element %v, 3u
        %45:vec4<f32> = construct %41, %42, %43, %44
        %46:vec4<f32> = let %45
        %47:f32 = load_vector_element %v, 0u
        %48:f32 = load_vector_element %v, 1u
        %49:f32 = load_vector_element %v, 2u
        %50:f32 = load_vector_element %v, 3u
        %51:vec4<f32> = construct %47, %48, %49, %50
        %52:mat4x4<f32> = construct %34, %40, %46, %51
        %53:i32 = load %i
        %54:f32 = access %52, 0u, %53
        %55:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
        %56:f32 = load %55
        %57:bool = gt %54, %56
        if %57 [t: $B7] {  # if_2
          $B7: {  # true
            %58:i32 = load %i
            %x_96:i32 = let %58
            %60:vec4<f32> = load %v
            %61:vec4<f32> = let %60
            %62:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
            %63:f32 = load %62
            %64:vec4<f32> = construct %63
            %65:vec4<f32> = let %64
            %66:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
            %67:f32 = load %66
            %68:vec4<f32> = construct %67
            %69:vec4<f32> = clamp %61, %65, %68
            %70:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
            %71:i32 = load %70
            %72:f32 = access %69, %71
            store_vector_element %v, %x_96, %72
            exit_if  # if_2
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %73:i32 = load %i
        %74:i32 = add %73, 1i
        store %i, %74
        next_iteration  # -> $B3
      }
    }
    %75:vec4<f32> = load %v
    %76:vec4<f32> = let %75
    %77:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %78:i32 = load %77
    %79:f32 = convert %78
    %80:vec4<f32> = construct %79
    %81:vec4<bool> = eq %76, %80
    %82:bool = all %81
    if %82 [t: $B8, f: $B9] {  # if_3
      $B8: {  # true
        %83:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %84:i32 = load %83
        %85:f32 = convert %84
        %86:f32 = let %85
        %87:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
        %88:i32 = load %87
        %89:f32 = convert %88
        %90:f32 = let %89
        %91:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
        %92:i32 = load %91
        %93:f32 = convert %92
        %94:f32 = let %93
        %95:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %96:i32 = load %95
        %97:f32 = convert %96
        %98:vec4<f32> = construct %86, %90, %94, %97
        store %x_GLF_color, %98
        exit_if  # if_3
      }
      $B9: {  # false
        %99:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
        %100:i32 = load %99
        %101:f32 = convert %100
        %102:vec4<f32> = construct %101
        store %x_GLF_color, %102
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B10: {
    %104:void = call %main_1
    %105:vec4<f32> = load %x_GLF_color
    %106:main_out = construct %105
    ret %106
  }
}

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