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
    %x_47:vec4<f32> = load %gl_FragCoord
    %13:f32 = access %x_47, 0u
    %14:f32 = access %x_47, 1u
    %15:vec2<f32> = construct %13, %14
    store %param, %15
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %x_54:f32 = load_vector_element %param, 1u
        %17:bool = lt %x_54, 50.0f
        if %17 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            %18:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
            %x_60:f32 = load_vector_element %18, 1u
            store %x_44, %x_60
            exit_if  # if_1
          }
          %b6 = block {  # false
            store %x_44, 0.0f
            exit_if  # if_1
          }
        }
        %x_61:f32 = load %x_44
        store %x_43, %x_61
        %x_63:f32 = load_vector_element %gl_FragCoord, 1u
        %22:bool = lt %x_63, 50.0f
        %x_65:f32 = select 0.0f, 1.0f, %22
        store %x_45, %x_65
        %24:f32 = sub %x_61, %x_65
        %25:bool = lt %24, 1.0f
        if %25 [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
    store %zero, %x_70
    %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)
    %x_75:f32 = load_vector_element %gl_FragCoord, 0u
    %29:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
    %x_77:f32 = load_vector_element %29, 0u
    %31:bool = gte %x_75, %x_77
    if %31 [t: %b9] {  # if_4
      %b9 = block {  # true
        %x_82:f32 = load_vector_element %gl_FragCoord, 1u
        %33:bool = gte %x_82, 0.0f
        if %33 [t: %b10] {  # if_5
          %b10 = block {  # true
            %34:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
            %x_87:f32 = load_vector_element %34, 1u
            store_vector_element %x_GLF_color, 0u, %x_87
            exit_if  # if_5
          }
        }
        exit_if  # if_4
      }
    }
    %x_90:f32 = load_vector_element %gl_FragCoord, 1u
    %37:bool = gte %x_90, 0.0f
    if %37 [t: %b11] {  # if_6
      %b11 = block {  # true
        %38:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
        %x_95:f32 = load_vector_element %38, 0u
        store_vector_element %x_GLF_color, 1u, %x_95
        exit_if  # if_6
      }
    }
    %x_97:vec4<f32> = load %gl_FragCoord
    %41:f32 = access %x_97, 0u
    %42:f32 = access %x_97, 1u
    %x_98:vec2<f32> = construct %41, %42
    %44:f32 = access %x_98, 0u
    %45:f32 = access %x_98, 1u
    %x_101:vec2<f32> = construct %44, %45
    store %temp, %x_101
    %47:f32 = access %x_101, 1u
    %48:bool = gte %47, 0.0f
    if %48 [t: %b12] {  # if_7
      %b12 = block {  # true
        %49:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
        %x_107:f32 = load_vector_element %49, 0u
        store_vector_element %x_GLF_color, 2u, %x_107
        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
    %53:void = call %main_1
    %54:vec4<f32> = load %x_GLF_color
    %55:main_out = construct %54
    ret %55
  }
}
%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
    %x_112:f32 = load_vector_element %coord, 1u
    %62:bool = lt %x_112, 50.0f
    if %62 [t: %b15, f: %b16] {  # if_8
      %b15 = block {  # true
        %63:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
        %x_118:f32 = load_vector_element %63, 1u
        store %x_110, %x_118
        exit_if  # if_8
      }
      %b16 = block {  # false
        store %x_110, 0.0f
        exit_if  # if_8
      }
    }
    %x_119:f32 = load %x_110
    store %a, %x_119
    %x_121:f32 = load_vector_element %gl_FragCoord, 1u
    %67:bool = lt %x_121, 50.0f
    %x_123:f32 = select 0.0f, 1.0f, %67
    store %b, %x_123
    %69:f32 = sub %x_119, %x_123
    %70:bool = lt %69, 1.0f
    if %70 [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.  *
********************************************************************
