SKIP: FAILED

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

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

buf2 = struct @align(4) {
  zero:f32 @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_color_1:vec4<f32> @offset(0), @location(0)
}

$B1: {  # root
  %x_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %x_10:ptr<uniform, buf2, read> = var @binding_point(0, 2)
  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
  %x_13:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %continue_execution:ptr<private, bool, read_write> = var, true
}

%func_vf2_ = func(%pos:ptr<function, vec2<f32>, read_write>):bool {
  $B2: {
    %9:f32 = load_vector_element %pos, 0u
    %10:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
    %11:f32 = load %10
    %12:bool = lt %9, %11
    if %12 [t: $B3] {  # if_1
      $B3: {  # true
        ret true
      }
    }
    %13:f32 = load_vector_element %pos, 1u
    %14:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
    %15:f32 = load %14
    %16:bool = gt %13, %15
    if %16 [t: $B4] {  # if_2
      $B4: {  # true
        ret false
      }
    }
    %17:ptr<uniform, f32, read> = access %x_10, 0u
    %18:f32 = load %17
    %19:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
    %20:f32 = load %19
    %21:bool = gt %18, %20
    if %21 [t: $B5] {  # if_3
      $B5: {  # true
        ret true
      }
    }
    ret true
  }
}
%main_1 = func():void {
  $B6: {
    %param:ptr<function, vec2<f32>, read_write> = var
    %24:vec4<f32> = load %gl_FragCoord
    %25:vec2<f32> = swizzle %24, xy
    store %param, %25
    %26:bool = call %func_vf2_, %param
    %x_44:bool = let %26
    if %x_44 [t: $B7] {  # if_4
      $B7: {  # true
        store %continue_execution, false
        exit_if  # if_4
      }
    }
    %28:ptr<uniform, i32, read> = access %x_13, 0u, 0i, 0u
    %29:i32 = load %28
    %30:f32 = convert %29
    %31:f32 = let %30
    %32:ptr<uniform, i32, read> = access %x_13, 0u, 1i, 0u
    %33:i32 = load %32
    %34:f32 = convert %33
    %35:f32 = let %34
    %36:ptr<uniform, i32, read> = access %x_13, 0u, 1i, 0u
    %37:i32 = load %36
    %38:f32 = convert %37
    %39:f32 = let %38
    %40:ptr<uniform, i32, read> = access %x_13, 0u, 0i, 0u
    %41:i32 = load %40
    %42:f32 = convert %41
    %43:vec4<f32> = construct %31, %35, %39, %42
    store %x_GLF_color, %43
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B8: {
    store %gl_FragCoord, %gl_FragCoord_param
    %46:void = call %main_1
    %47:vec4<f32> = load %x_GLF_color
    %48:main_out = construct %47
    %49:bool = load %continue_execution
    %50:bool = eq %49, false
    if %50 [t: $B9] {  # if_5
      $B9: {  # true
        terminate_invocation
      }
    }
    ret %48
  }
}

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