SKIP: FAILED

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

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

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

buf1 = 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_GLF_color:ptr<private, vec4<f32>, read_write> = var
  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
  %x_9:ptr<uniform, buf1, read> = var @binding_point(0, 1)
}

%main_1 = func():void -> %b2 {
  %b2 = block {
    %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:vec4<f32> = construct %9
    store %x_GLF_color, %10
    %11:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %12:i32 = load %11
    store %i, %12
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %13:i32 = load %i
        %14:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %15:i32 = load %14
        %16:bool = lt %13, %15
        if %16 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # false
            exit_loop  # loop_1
          }
        }
        %17:f32 = load_vector_element %gl_FragCoord, 1u
        %18:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
        %19:f32 = load %18
        %20:bool = lt %17, %19
        if %20 [t: %b7] {  # if_2
          %b7 = block {  # true
            %21:f32 = load_vector_element %gl_FragCoord, 0u
            %22:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
            %23:f32 = load %22
            %24:bool = lt %21, %23
            if %24 [t: %b8] {  # if_3
              %b8 = block {  # true
                ret
              }
            }
            %25:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
            %26:f32 = load %25
            %27:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
            %28:f32 = load %27
            %29:bool = gt %26, %28
            if %29 [t: %b9] {  # if_4
              %b9 = block {  # true
                ret
              }
            }
            discard
            exit_if  # if_2
          }
        }
        %30:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
        %31:f32 = load %30
        %32:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
        %33:f32 = load %32
        %34:bool = gt %31, %33
        if %34 [t: %b10] {  # if_5
          %b10 = block {  # true
            %35:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
            %36:i32 = load %35
            %37:f32 = convert %36
            %38:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
            %39:i32 = load %38
            %40:f32 = convert %39
            %41:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
            %42:i32 = load %41
            %43:f32 = convert %42
            %44:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
            %45:i32 = load %44
            %46:f32 = convert %45
            %47:vec4<f32> = construct %37, %40, %43, %46
            store %x_GLF_color, %47
            exit_loop  # loop_1
          }
        }
        %48:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
        %49:f32 = load %48
        %50:bool = lt %49, 0.0f
        if %50 [t: %b11] {  # if_6
          %b11 = block {  # true
            discard
            exit_if  # if_6
          }
        }
        continue %b4
      }
      %b4 = block {  # continuing
        %51:i32 = load %i
        %52:i32 = add %51, 1i
        store %i, %52
        next_iteration %b3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b12 {
  %b12 = block {
    store %gl_FragCoord, %gl_FragCoord_param
    %55:void = call %main_1
    %56:vec4<f32> = load %x_GLF_color
    %57:main_out = construct %56
    ret %57
  }
}

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