SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: strided_arr = struct @align(4) {
  el:f32 @offset(0)
}

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

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

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

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

%b1 = block {  # root
  %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_10:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void -> %b2 {
  %b2 = block {
    %data:ptr<function, array<vec4<f32>, 2>, read_write> = var
    %b:ptr<function, i32, read_write> = var
    %y:ptr<function, i32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %10:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %x_42:f32 = load %10
    %12:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %x_45:f32 = load %12
    %14:vec4<f32> = construct %x_42, %x_42, %x_42, %x_42
    %15:vec4<f32> = construct %x_45, %x_45, %x_45, %x_45
    %16:array<vec4<f32>, 2> = construct %14, %15
    store %data, %16
    %17:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
    %x_49:i32 = load %17
    store %b, %x_49
    %x_51:f32 = load_vector_element %gl_FragCoord, 1u
    %20:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
    %x_54:i32 = load %20
    %x_56:f32 = load_vector_element %gl_FragCoord, 1u
    %23:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
    %x_60:i32 = load %23
    %25:i32 = convert %x_51
    %26:i32 = convert %x_56
    %27:i32 = or %x_54, %26
    %28:i32 = clamp %25, %27, %x_60
    store %y, %28
    %29:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
    %x_63:i32 = load %29
    store %i, %x_63
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %x_82:ptr<function, bool, read_write> = var
        %x_83_phi:ptr<function, bool, read_write> = var
        %x_68:i32 = load %i
        %34:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %x_70:i32 = load %34
        %36:bool = lt %x_68, %x_70
        if %36 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # false
            exit_loop  # loop_1
          }
        }
        %x_73:i32 = load %b
        %38:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %x_75:i32 = load %38
        %x_76:bool = gt %x_73, %x_75
        store %x_83_phi, %x_76
        if %x_76 [t: %b7] {  # if_2
          %b7 = block {  # true
            %x_79:i32 = load %y
            %42:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
            %x_81:i32 = load %42
            %44:bool = gt %x_79, %x_81
            store %x_82, %44
            %45:bool = load %x_82
            store %x_83_phi, %45
            exit_if  # if_2
          }
        }
        %x_83:bool = load %x_83_phi
        if %x_83 [t: %b8] {  # if_3
          %b8 = block {  # true
            exit_loop  # loop_1
          }
        }
        %x_86:i32 = load %b
        %48:i32 = add %x_86, 1i
        store %b, %48
        continue %b4
      }
      %b4 = block {  # continuing
        %x_88:i32 = load %i
        %50:i32 = add %x_88, 1i
        store %i, %50
        next_iteration %b3
      }
    }
    %x_90:i32 = load %b
    %52:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
    %x_92:i32 = load %52
    %54:bool = eq %x_90, %x_92
    if %54 [t: %b9] {  # if_4
      %b9 = block {  # true
        %55:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %x_97:i32 = load %55
        %57:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %x_99:i32 = load %57
        %59:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
        %x_101:i32 = load %59
        %61:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %x_104:i32 = load %61
        %63:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %x_107:i32 = load %63
        %65:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %x_110:i32 = load %65
        %67:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %x_113:i32 = load %67
        %69:i32 = clamp %x_97, %x_99, %x_101
        %70:ptr<function, vec4<f32>, read_write> = access %data, %69
        %71:f32 = convert %x_104
        %72:f32 = convert %x_107
        %73:f32 = convert %x_110
        %74:f32 = convert %x_113
        %75:vec4<f32> = construct %71, %72, %73, %74
        store %70, %75
        exit_if  # if_4
      }
    }
    %76:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
    %x_118:i32 = load %76
    %78:ptr<function, vec4<f32>, read_write> = access %data, %x_118
    %x_120:vec4<f32> = load %78
    %80:f32 = access %x_120, 0u
    %81:f32 = access %x_120, 1u
    %82:f32 = access %x_120, 2u
    %83:f32 = access %x_120, 3u
    %84:vec4<f32> = construct %80, %81, %82, %83
    store %x_GLF_color, %84
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b10 {
  %b10 = block {
    store %gl_FragCoord, %gl_FragCoord_param
    %87:void = call %main_1
    %88:vec4<f32> = load %x_GLF_color
    %89:main_out = construct %88
    ret %89
  }
}

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