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
    %x_62:f32 = let %9
    %11:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
    %12:f32 = load %11
    %x_64:f32 = let %12
    %14:bool = lt %x_62, %x_64
    if %14 [t: $B3] {  # if_1
      $B3: {  # true
        ret true
      }
    }
    %15:f32 = load_vector_element %pos, 1u
    %x_69:f32 = let %15
    %17:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
    %18:f32 = load %17
    %x_71:f32 = let %18
    %20:bool = gt %x_69, %x_71
    if %20 [t: $B4] {  # if_2
      $B4: {  # true
        ret false
      }
    }
    %21:ptr<uniform, f32, read> = access %x_10, 0u
    %22:f32 = load %21
    %x_76:f32 = let %22
    %24:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
    %25:f32 = load %24
    %x_78:f32 = let %25
    %27:bool = gt %x_76, %x_78
    if %27 [t: $B5] {  # if_3
      $B5: {  # true
        ret true
      }
    }
    ret true
  }
}
%main_1 = func():void {
  $B6: {
    %param:ptr<function, vec2<f32>, read_write> = var
    %30:vec4<f32> = load %gl_FragCoord
    %x_42:vec4<f32> = let %30
    %32:f32 = access %x_42, 0u
    %33:f32 = access %x_42, 1u
    %34:vec2<f32> = construct %32, %33
    store %param, %34
    %35:bool = call %func_vf2_, %param
    %x_44:bool = let %35
    if %x_44 [t: $B7] {  # if_4
      $B7: {  # true
        store %continue_execution, false
        exit_if  # if_4
      }
    }
    %37:ptr<uniform, i32, read> = access %x_13, 0u, 0i, 0u
    %38:i32 = load %37
    %x_48:i32 = let %38
    %40:ptr<uniform, i32, read> = access %x_13, 0u, 1i, 0u
    %41:i32 = load %40
    %x_51:i32 = let %41
    %43:ptr<uniform, i32, read> = access %x_13, 0u, 1i, 0u
    %44:i32 = load %43
    %x_54:i32 = let %44
    %46:ptr<uniform, i32, read> = access %x_13, 0u, 0i, 0u
    %47:i32 = load %46
    %x_57:i32 = let %47
    %49:f32 = convert %x_48
    %50:f32 = let %49
    %51:f32 = convert %x_51
    %52:f32 = let %51
    %53:f32 = convert %x_54
    %54:f32 = let %53
    %55:f32 = convert %x_57
    %56:vec4<f32> = construct %50, %52, %54, %55
    store %x_GLF_color, %56
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B8: {
    store %gl_FragCoord, %gl_FragCoord_param
    %59:void = call %main_1
    %60:vec4<f32> = load %x_GLF_color
    %61:main_out = construct %60
    %62:bool = load %continue_execution
    %63:bool = eq %62, false
    if %63 [t: $B9] {  # if_5
      $B9: {  # true
        terminate_invocation
      }
    }
    ret %61
  }
}

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