SKIP: FAILED

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

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

$B1: {  # root
  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
  %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void {
  $B2: {
    %a:ptr<function, vec2<f32>, read_write> = var
    %b:ptr<function, vec3<f32>, read_write> = var
    %x_105:ptr<function, bool, read_write> = var
    %x_106:ptr<function, bool, read_write> = var
    %x_111:ptr<function, bool, read_write> = var
    %x_112:ptr<function, bool, read_write> = var
    store %a, vec2<f32>(1.0f)
    store %b, vec3<f32>(0.0f)
    %11:f32 = load_vector_element %gl_FragCoord, 1u
    %12:i32 = call %tint_f32_to_i32, %11
    %14:bool = lt %12, 40i
    if %14 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        store %b, vec3<f32>(0.10000000149011611938f)
        exit_if  # if_1
      }
      $B4: {  # false
        %15:f32 = load_vector_element %gl_FragCoord, 1u
        %16:i32 = call %tint_f32_to_i32, %15
        %17:bool = lt %16, 60i
        if %17 [t: $B5, f: $B6] {  # if_2
          $B5: {  # true
            store %b, vec3<f32>(0.20000000298023223877f)
            exit_if  # if_2
          }
          $B6: {  # false
            %18:f32 = load_vector_element %gl_FragCoord, 1u
            %19:bool = lt %18, 80.0f
            if %19 [t: $B7, f: $B8] {  # if_3
              $B7: {  # true
                %20:f32 = load_vector_element %a, 0u
                %21:vec3<f32> = construct %20
                %22:vec3<f32> = let %21
                %23:ptr<uniform, f32, read> = access %x_8, 0u
                %24:f32 = load %23
                %25:vec3<f32> = construct %24
                %26:vec3<f32> = add %22, %25
                %27:vec3<f32> = cos %26
                %28:vec3<f32> = add %27, vec3<f32>(0.00999999977648258209f)
                store %b, %28
                exit_if  # if_3
              }
              $B8: {  # false
                %29:f32 = load_vector_element %gl_FragCoord, 1u
                %30:i32 = call %tint_f32_to_i32, %29
                %31:bool = lt %30, 100i
                if %31 [t: $B9, f: $B10] {  # if_4
                  $B9: {  # true
                    %32:ptr<uniform, f32, read> = access %x_8, 0u
                    %33:f32 = load %32
                    %34:vec3<f32> = construct %33
                    %35:vec3<f32> = cos %34
                    store %b, %35
                    exit_if  # if_4
                  }
                  $B10: {  # false
                    %36:f32 = load_vector_element %gl_FragCoord, 1u
                    %37:i32 = call %tint_f32_to_i32, %36
                    %38:bool = lt %37, 500i
                    if %38 [t: $B11] {  # if_5
                      $B11: {  # true
                        store %b, vec3<f32>(0.540302276611328125f, 0.540302276611328125f, -0.99996083974838256836f)
                        exit_if  # if_5
                      }
                    }
                    exit_if  # if_4
                  }
                }
                exit_if  # if_3
              }
            }
            exit_if  # if_2
          }
        }
        exit_if  # if_1
      }
    }
    %39:f32 = load_vector_element %b, 0u
    %40:bool = lt %39, 1.01999998092651367188f
    %x_100:bool = let %40
    store %x_106, %x_100
    if %x_100 [t: $B12] {  # if_6
      $B12: {  # true
        %42:f32 = load_vector_element %b, 1u
        %43:bool = lt %42, 1.01999998092651367188f
        store %x_105, %43
        %44:bool = load %x_105
        store %x_106, %44
        exit_if  # if_6
      }
    }
    %45:bool = load %x_106
    store %x_112, %45
    %46:bool = load %x_106
    if %46 [t: $B13] {  # if_7
      $B13: {  # true
        %47:f32 = load_vector_element %b, 2u
        %48:bool = lt %47, 1.01999998092651367188f
        store %x_111, %48
        %49:bool = load %x_111
        store %x_112, %49
        exit_if  # if_7
      }
    }
    %50:bool = load %x_112
    if %50 [t: $B14, f: $B15] {  # if_8
      $B14: {  # true
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_8
      }
      $B15: {  # false
        store %x_GLF_color, vec4<f32>(0.0f)
        exit_if  # if_8
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B16: {
    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
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B17: {
    %57:i32 = convert %value
    %58:bool = gte %value, -2147483648.0f
    %59:i32 = select -2147483648i, %57, %58
    %60:bool = lte %value, 2147483520.0f
    %61:i32 = select 2147483647i, %59, %60
    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.  *
********************************************************************
