SKIP: FAILED

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

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

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

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

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

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

%main_1 = func():void -> %b2 {
  %b2 = block {
    %uv:ptr<function, vec2<f32>, read_write> = var
    %v1:ptr<function, vec4<f32>, read_write> = var
    %a:ptr<function, f32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %10:vec4<f32> = load %gl_FragCoord
    %11:vec2<f32> = swizzle %10, xy
    store %uv, %11
    %12:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
    %13:f32 = load %12
    %14:vec4<f32> = construct %13
    store %v1, %14
    %15:f32 = load_vector_element %uv, 1u
    %16:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
    %17:f32 = load %16
    %18:bool = gte %15, %17
    if %18 [t: %b3] {  # if_1
      %b3 = block {  # true
        %19:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
        %20:f32 = load %19
        store_vector_element %v1, 0u, %20
        %21:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
        %22:f32 = load %21
        store_vector_element %v1, 1u, %22
        %23:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
        %24:f32 = load %23
        store_vector_element %v1, 2u, %24
        %25:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
        %26:f32 = load %25
        store_vector_element %v1, 3u, %26
        exit_if  # if_1
      }
    }
    %27:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
    %28:f32 = load %27
    store %a, %28
    %29:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
    %30:i32 = load %29
    store %i, %30
    loop [b: %b4, c: %b5] {  # loop_1
      %b4 = block {  # body
        %31:i32 = load %i
        %32:ptr<uniform, i32, read> = access %x_12, 0u, 0i, 0u
        %33:i32 = load %32
        %34:bool = lt %31, %33
        if %34 [t: %b6, f: %b7] {  # if_2
          %b6 = block {  # true
            exit_if  # if_2
          }
          %b7 = block {  # false
            exit_loop  # loop_1
          }
        }
        %35:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
        %36:f32 = load %35
        %37:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
        %38:f32 = load %37
        %39:bool = lt %36, %38
        if %39 [t: %b8] {  # if_3
          %b8 = block {  # true
            discard
            exit_if  # if_3
          }
        }
        %40:f32 = load_vector_element %v1, 0u
        %41:f32 = load_vector_element %v1, 1u
        %42:f32 = add %40, %41
        %43:f32 = load_vector_element %v1, 2u
        %44:f32 = add %42, %43
        %45:f32 = load_vector_element %v1, 3u
        %46:f32 = add %44, %45
        %47:ptr<uniform, f32, read> = access %x_8, 0u, 3i, 0u
        %48:f32 = load %47
        %49:f32 = pow %46, %48
        store %a, %49
        continue %b5
      }
      %b5 = block {  # continuing
        %50:i32 = load %i
        %51:i32 = add %50, 1i
        store %i, %51
        next_iteration %b4
      }
    }
    %52:f32 = load %a
    %53:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
    %54:f32 = load %53
    %55:bool = eq %52, %54
    if %55 [t: %b9, f: %b10] {  # if_4
      %b9 = block {  # true
        %56:vec4<f32> = load %v1
        store %x_GLF_v1, %56
        exit_if  # if_4
      }
      %b10 = block {  # false
        %57:ptr<uniform, i32, read> = access %x_12, 0u, 1i, 0u
        %58:i32 = load %57
        %59:f32 = convert %58
        %60:vec4<f32> = construct %59
        store %x_GLF_v1, %60
        exit_if  # if_4
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b11 {
  %b11 = block {
    store %gl_FragCoord, %gl_FragCoord_param
    %63:void = call %main_1
    %64:vec4<f32> = load %x_GLF_v1
    %65:main_out = construct %64
    ret %65
  }
}

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