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
    %x_40:i32 = load %7
    %9:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %x_43:i32 = load %9
    %11:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
    %x_46:i32 = load %11
    %13:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %x_49:i32 = load %13
    %15:f32 = convert %x_40
    %16:f32 = convert %x_43
    %17:f32 = convert %x_46
    %18:f32 = convert %x_49
    %19:vec4<f32> = construct %15, %16, %17, %18
    store %v, %19
    %20:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
    %x_53:i32 = load %20
    store %i, %x_53
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %x_58:i32 = load %i
        %23:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %x_60:i32 = load %23
        %25:bool = lt %x_58, %x_60
        if %25 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # false
            exit_loop  # loop_1
          }
        }
        %x_63:vec4<f32> = load %v
        %x_64:vec4<f32> = load %v
        %x_65:vec4<f32> = load %v
        %x_66:vec4<f32> = load %v
        %x_88:i32 = load %i
        %31:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
        %x_92:f32 = load %31
        %33:f32 = access %x_63, 0u
        %34:f32 = access %x_63, 1u
        %35:f32 = access %x_63, 2u
        %36:f32 = access %x_63, 3u
        %37:vec4<f32> = construct %33, %34, %35, %36
        %38:f32 = access %x_64, 0u
        %39:f32 = access %x_64, 1u
        %40:f32 = access %x_64, 2u
        %41:f32 = access %x_64, 3u
        %42:vec4<f32> = construct %38, %39, %40, %41
        %43:f32 = access %x_65, 0u
        %44:f32 = access %x_65, 1u
        %45:f32 = access %x_65, 2u
        %46:f32 = access %x_65, 3u
        %47:vec4<f32> = construct %43, %44, %45, %46
        %48:f32 = access %x_66, 0u
        %49:f32 = access %x_66, 1u
        %50:f32 = access %x_66, 2u
        %51:f32 = access %x_66, 3u
        %52:vec4<f32> = construct %48, %49, %50, %51
        %53:mat4x4<f32> = construct %37, %42, %47, %52
        %54:f32 = access %53, 0u, %x_88
        %55:bool = gt %54, %x_92
        if %55 [t: %b7] {  # if_2
          %b7 = block {  # true
            %x_96:i32 = load %i
            %x_97:vec4<f32> = load %v
            %58:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
            %x_99:f32 = load %58
            %60:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
            %x_102:f32 = load %60
            %62:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
            %x_106:i32 = load %62
            %64:vec4<f32> = construct %x_99, %x_99, %x_99, %x_99
            %65:vec4<f32> = construct %x_102, %x_102, %x_102, %x_102
            %66:vec4<f32> = clamp %x_97, %64, %65
            %67:f32 = access %66, %x_106
            store_vector_element %v, %x_96, %67
            exit_if  # if_2
          }
        }
        continue %b4
      }
      %b4 = block {  # continuing
        %x_109:i32 = load %i
        %69:i32 = add %x_109, 1i
        store %i, %69
        next_iteration %b3
      }
    }
    %x_111:vec4<f32> = load %v
    %71:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %x_113:i32 = load %71
    %x_114:f32 = convert %x_113
    %74:vec4<f32> = construct %x_114, %x_114, %x_114, %x_114
    %75:vec4<bool> = eq %x_111, %74
    %76:bool = all %75
    if %76 [t: %b8, f: %b9] {  # if_3
      %b8 = block {  # true
        %77:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %x_122:i32 = load %77
        %79:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
        %x_125:i32 = load %79
        %81:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
        %x_128:i32 = load %81
        %83:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %x_131:i32 = load %83
        %85:f32 = convert %x_122
        %86:f32 = convert %x_125
        %87:f32 = convert %x_128
        %88:f32 = convert %x_131
        %89:vec4<f32> = construct %85, %86, %87, %88
        store %x_GLF_color, %89
        exit_if  # if_3
      }
      %b9 = block {  # false
        %90:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
        %x_135:i32 = load %90
        %x_136:f32 = convert %x_135
        %93:vec4<f32> = construct %x_136, %x_136, %x_136, %x_136
        store %x_GLF_color, %93
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b10 {
  %b10 = block {
    %95:void = call %main_1
    %96:vec4<f32> = load %x_GLF_color
    %97:main_out = construct %96
    ret %97
  }
}

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