SKIP: FAILED

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

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

%b1 = block {  # root
  %x_9:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %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 {
    %x_43:ptr<function, f32, read_write> = var
    %x_44:ptr<function, f32, read_write> = var
    %x_45:ptr<function, f32, read_write> = var
    %x_46:ptr<function, i32, read_write> = var
    %zero:ptr<function, i32, read_write> = var
    %param:ptr<function, vec2<f32>, read_write> = var
    %temp:ptr<function, vec2<f32>, read_write> = var
    %12:vec4<f32> = load %gl_FragCoord
    %13:vec2<f32> = swizzle %12, xy
    store %param, %13
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %14:f32 = load_vector_element %param, 1u
        %15:bool = lt %14, 50.0f
        if %15 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            %16:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
            %17:f32 = load_vector_element %16, 1u
            store %x_44, %17
            exit_if  # if_1
          }
          %b6 = block {  # false
            store %x_44, 0.0f
            exit_if  # if_1
          }
        }
        %x_61:f32 = load %x_44
        %19:f32 = load %x_44
        store %x_43, %19
        %20:f32 = load_vector_element %gl_FragCoord, 1u
        %21:bool = lt %20, 50.0f
        %x_65:f32 = select 0.0f, 1.0f, %21
        store %x_45, %x_65
        %23:f32 = sub %x_61, %x_65
        %24:bool = lt %23, 1.0f
        if %24 [t: %b7] {  # if_2
          %b7 = block {  # true
            store %x_46, 0i
            exit_loop  # loop_1
          }
        }
        store %x_46, 1i
        exit_loop  # loop_1
      }
      %b4 = block {  # continuing
        break_if true %b3
      }
    }
    %x_70:i32 = load %x_46
    %26:i32 = load %x_46
    store %zero, %26
    %27:bool = eq %x_70, 1i
    if %27 [t: %b8] {  # if_3
      %b8 = block {  # true
        ret
      }
    }
    store %x_GLF_color, vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f)
    %28:f32 = load_vector_element %gl_FragCoord, 0u
    %29:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
    %30:f32 = load_vector_element %29, 0u
    %31:bool = gte %28, %30
    if %31 [t: %b9] {  # if_4
      %b9 = block {  # true
        %32:f32 = load_vector_element %gl_FragCoord, 1u
        %33:bool = gte %32, 0.0f
        if %33 [t: %b10] {  # if_5
          %b10 = block {  # true
            %34:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
            %35:f32 = load_vector_element %34, 1u
            store_vector_element %x_GLF_color, 0u, %35
            exit_if  # if_5
          }
        }
        exit_if  # if_4
      }
    }
    %36:f32 = load_vector_element %gl_FragCoord, 1u
    %37:bool = gte %36, 0.0f
    if %37 [t: %b11] {  # if_6
      %b11 = block {  # true
        %38:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
        %39:f32 = load_vector_element %38, 0u
        store_vector_element %x_GLF_color, 1u, %39
        exit_if  # if_6
      }
    }
    %40:vec4<f32> = load %gl_FragCoord
    %x_98:vec2<f32> = swizzle %40, xy
    %42:f32 = access %x_98, 0u
    %43:f32 = access %x_98, 1u
    %x_101:vec2<f32> = construct %42, %43
    store %temp, %x_101
    %45:f32 = access %x_101, 1u
    %46:bool = gte %45, 0.0f
    if %46 [t: %b12] {  # if_7
      %b12 = block {  # true
        %47:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
        %48:f32 = load_vector_element %47, 0u
        store_vector_element %x_GLF_color, 2u, %48
        exit_if  # if_7
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b13 {
  %b13 = block {
    store %gl_FragCoord, %gl_FragCoord_param
    %51:void = call %main_1
    %52:vec4<f32> = load %x_GLF_color
    %53:main_out = construct %52
    ret %53
  }
}
%alwaysZero_vf2_ = func(%coord:ptr<function, vec2<f32>, read_write>):i32 -> %b14 {
  %b14 = block {
    %a:ptr<function, f32, read_write> = var
    %x_110:ptr<function, f32, read_write> = var
    %b:ptr<function, f32, read_write> = var
    %59:f32 = load_vector_element %coord, 1u
    %60:bool = lt %59, 50.0f
    if %60 [t: %b15, f: %b16] {  # if_8
      %b15 = block {  # true
        %61:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
        %62:f32 = load_vector_element %61, 1u
        store %x_110, %62
        exit_if  # if_8
      }
      %b16 = block {  # false
        store %x_110, 0.0f
        exit_if  # if_8
      }
    }
    %x_119:f32 = load %x_110
    %64:f32 = load %x_110
    store %a, %64
    %65:f32 = load_vector_element %gl_FragCoord, 1u
    %66:bool = lt %65, 50.0f
    %x_123:f32 = select 0.0f, 1.0f, %66
    store %b, %x_123
    %68:f32 = sub %x_119, %x_123
    %69:bool = lt %68, 1.0f
    if %69 [t: %b17] {  # if_9
      %b17 = block {  # true
        ret 0i
      }
    }
    ret 1i
  }
}

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