SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 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 = block {  # 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 {
  %b2 = block {
    %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:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %11:i32 = load %10
    %12:f32 = convert %11
    %13:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
    %14:i32 = load %13
    %15:f32 = convert %14
    %16:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %17:i32 = load %16
    %18:f32 = convert %17
    %19:vec4<f32> = construct %9, %12, %15, %18
    store %v, %19
    %20:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
    %21:i32 = load %20
    store %i, %21
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %22:i32 = load %i
        %23:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %24:i32 = load %23
        %25:bool = lt %22, %24
        if %25 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # false
            exit_loop  # loop_1
          }
        }
        %26:f32 = load_vector_element %v, 0u
        %27:f32 = load_vector_element %v, 1u
        %28:f32 = load_vector_element %v, 2u
        %29:f32 = load_vector_element %v, 3u
        %30:vec4<f32> = construct %26, %27, %28, %29
        %31:f32 = load_vector_element %v, 0u
        %32:f32 = load_vector_element %v, 1u
        %33:f32 = load_vector_element %v, 2u
        %34:f32 = load_vector_element %v, 3u
        %35:vec4<f32> = construct %31, %32, %33, %34
        %36:f32 = load_vector_element %v, 0u
        %37:f32 = load_vector_element %v, 1u
        %38:f32 = load_vector_element %v, 2u
        %39:f32 = load_vector_element %v, 3u
        %40:vec4<f32> = construct %36, %37, %38, %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:mat4x4<f32> = construct %30, %35, %40, %45
        %47:i32 = load %i
        %48:f32 = access %46, 0u, %47
        %49:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
        %50:f32 = load %49
        %51:bool = gt %48, %50
        if %51 [t: %b7] {  # if_2
          %b7 = block {  # true
            %x_96:i32 = load %i
            %53:vec4<f32> = load %v
            %54:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
            %55:f32 = load %54
            %56:vec4<f32> = construct %55
            %57:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
            %58:f32 = load %57
            %59:vec4<f32> = construct %58
            %60:vec4<f32> = clamp %53, %56, %59
            %61:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
            %62:i32 = load %61
            %63:f32 = access %60, %62
            store_vector_element %v, %x_96, %63
            exit_if  # if_2
          }
        }
        continue %b4
      }
      %b4 = block {  # continuing
        %64:i32 = load %i
        %65:i32 = add %64, 1i
        store %i, %65
        next_iteration %b3
      }
    }
    %66:vec4<f32> = load %v
    %67:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %68:i32 = load %67
    %69:f32 = convert %68
    %70:vec4<f32> = construct %69
    %71:vec4<bool> = eq %66, %70
    %72:bool = all %71
    if %72 [t: %b8, f: %b9] {  # if_3
      %b8 = block {  # true
        %73:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %74:i32 = load %73
        %75:f32 = convert %74
        %76:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
        %77:i32 = load %76
        %78:f32 = convert %77
        %79:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
        %80:i32 = load %79
        %81:f32 = convert %80
        %82:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %83:i32 = load %82
        %84:f32 = convert %83
        %85:vec4<f32> = construct %75, %78, %81, %84
        store %x_GLF_color, %85
        exit_if  # if_3
      }
      %b9 = block {  # false
        %86:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
        %87:i32 = load %86
        %88:f32 = convert %87
        %89:vec4<f32> = construct %88
        store %x_GLF_color, %89
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b10 {
  %b10 = block {
    %91:void = call %main_1
    %92:vec4<f32> = load %x_GLF_color
    %93:main_out = construct %92
    ret %93
  }
}

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