SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
  resolution:vec2<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_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void {
  $B2: {
    %x_77:ptr<function, array<vec4<f32>, 8>, read_write> = var
    %x_78:ptr<function, array<vec4<f32>, 8>, read_write> = var
    %x_79:ptr<function, array<vec4<f32>, 8>, read_write> = var
    %x_80:ptr<function, array<vec4<f32>, 16>, read_write> = var
    %x_89:ptr<function, vec4<f32>, read_write> = var
    %x_89_phi:ptr<function, vec4<f32>, read_write> = var
    %x_92_phi:ptr<function, i32, read_write> = var
    %12:vec4<f32> = load %gl_FragCoord
    %x_81:vec4<f32> = let %12
    %14:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
    %15:vec2<f32> = load %14
    %x_84:vec2<f32> = let %15
    %17:f32 = access %x_81, 0u
    %18:f32 = access %x_81, 1u
    %19:vec2<f32> = construct %17, %18
    %20:vec2<f32> = div %19, %x_84
    %21:vec2<f32> = mul %20, 32.0f
    %22:vec2<f32> = floor %21
    %x_87:vec2<f32> = let %22
    store %x_89_phi, vec4<f32>(0.5f, 0.5f, 1.0f, 1.0f)
    store %x_92_phi, 0i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %x_136:ptr<function, vec4<f32>, read_write> = var
        %x_93:ptr<function, i32, read_write> = var
        %x_121_phi:ptr<function, bool, read_write> = var
        %x_90_phi:ptr<function, vec4<f32>, read_write> = var
        %28:vec4<f32> = load %x_89_phi
        store %x_89, %28
        %29:i32 = load %x_92_phi
        %x_92:i32 = let %29
        %31:bool = lt %x_92, 8i
        if %31 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %x_98:ptr<function, vec4<f32>, read_write> = var
        store %x_77, array<vec4<f32>, 8>(vec4<f32>(4.0f, 4.0f, 20.0f, 4.0f), vec4<f32>(4.0f, 4.0f, 4.0f, 20.0f), vec4<f32>(4.0f, 20.0f, 20.0f, 4.0f), vec4<f32>(20.0f, 4.0f, 4.0f, 8.0f), vec4<f32>(8.0f, 6.0f, 4.0f, 2.0f), vec4<f32>(2.0f, 12.0f, 2.0f, 4.0f), vec4<f32>(16.0f, 2.0f, 4.0f, 4.0f), vec4<f32>(12.0f, 22.0f, 4.0f, 4.0f))
        %33:ptr<function, vec4<f32>, read_write> = access %x_77, %x_92
        %34:vec4<f32> = load %33
        store %x_98, %34
        switch 0u [c: (default, $B7)] {  # switch_1
          $B7: {  # case
            %35:f32 = access %x_87, 0u
            %x_101:f32 = let %35
            %37:f32 = load_vector_element %x_98, 0u
            %x_102:f32 = let %37
            %39:bool = lt %x_101, %x_102
            if %39 [t: $B8] {  # if_2
              $B8: {  # true
                store %x_121_phi, false
                exit_switch  # switch_1
              }
            }
            %40:f32 = access %x_87, 1u
            %x_106:f32 = let %40
            %42:f32 = load_vector_element %x_98, 1u
            %x_107:f32 = let %42
            %44:bool = lt %x_106, %x_107
            if %44 [t: $B9] {  # if_3
              $B9: {  # true
                store %x_121_phi, false
                exit_switch  # switch_1
              }
            }
            %45:f32 = load_vector_element %x_98, 2u
            %46:f32 = add %x_102, %45
            %47:bool = gt %x_101, %46
            if %47 [t: $B10] {  # if_4
              $B10: {  # true
                store %x_121_phi, false
                exit_switch  # switch_1
              }
            }
            %48:f32 = load_vector_element %x_98, 3u
            %49:f32 = add %x_107, %48
            %50:bool = gt %x_106, %49
            if %50 [t: $B11] {  # if_5
              $B11: {  # true
                store %x_121_phi, false
                exit_switch  # switch_1
              }
            }
            store %x_121_phi, true
            exit_switch  # switch_1
          }
        }
        %51:bool = load %x_121_phi
        %x_121:bool = let %51
        %53:vec4<f32> = load %x_89
        store %x_90_phi, %53
        if %x_121 [t: $B12] {  # if_6
          $B12: {  # true
            store %x_78, array<vec4<f32>, 8>(vec4<f32>(4.0f, 4.0f, 20.0f, 4.0f), vec4<f32>(4.0f, 4.0f, 4.0f, 20.0f), vec4<f32>(4.0f, 20.0f, 20.0f, 4.0f), vec4<f32>(20.0f, 4.0f, 4.0f, 8.0f), vec4<f32>(8.0f, 6.0f, 4.0f, 2.0f), vec4<f32>(2.0f, 12.0f, 2.0f, 4.0f), vec4<f32>(16.0f, 2.0f, 4.0f, 4.0f), vec4<f32>(12.0f, 22.0f, 4.0f, 4.0f))
            %54:ptr<function, vec4<f32>, read_write> = access %x_78, %x_92
            %55:f32 = load_vector_element %54, 0u
            %x_125:f32 = let %55
            store %x_79, array<vec4<f32>, 8>(vec4<f32>(4.0f, 4.0f, 20.0f, 4.0f), vec4<f32>(4.0f, 4.0f, 4.0f, 20.0f), vec4<f32>(4.0f, 20.0f, 20.0f, 4.0f), vec4<f32>(20.0f, 4.0f, 4.0f, 8.0f), vec4<f32>(8.0f, 6.0f, 4.0f, 2.0f), vec4<f32>(2.0f, 12.0f, 2.0f, 4.0f), vec4<f32>(16.0f, 2.0f, 4.0f, 4.0f), vec4<f32>(12.0f, 22.0f, 4.0f, 4.0f))
            %57:ptr<function, vec4<f32>, read_write> = access %x_79, %x_92
            %58:f32 = load_vector_element %57, 1u
            %x_128:f32 = let %58
            store %x_80, array<vec4<f32>, 16>(vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.0f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.5f, 0.5f, 0.5f, 1.0f), vec4<f32>(0.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(1.0f, 1.0f, 0.0f, 1.0f), vec4<f32>(0.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(1.0f, 0.0f, 1.0f, 1.0f), vec4<f32>(0.0f, 1.0f, 1.0f, 1.0f), vec4<f32>(1.0f))
            %60:i32 = call %tint_f32_to_i32, %x_125
            %62:i32 = let %60
            %63:i32 = call %tint_f32_to_i32, %x_128
            %64:i32 = mul %62, %63
            %65:i32 = mul %x_92, 9i
            %66:i32 = add %64, %65
            %67:i32 = add %66, 11i
            %68:i32 = call %tint_mod_i32, %67, 16i
            %70:ptr<function, vec4<f32>, read_write> = access %x_80, %68
            %71:vec4<f32> = load %70
            store %x_136, %71
            %72:vec4<f32> = load %x_136
            store %x_90_phi, %72
            exit_if  # if_6
          }
        }
        %73:vec4<f32> = load %x_90_phi
        %x_90:vec4<f32> = let %73
        continue  # -> $B4
      }
      $B4: {  # continuing
        %75:i32 = add %x_92, 1i
        store %x_93, %75
        store %x_89_phi, %x_90
        %76:i32 = load %x_93
        store %x_92_phi, %76
        next_iteration  # -> $B3
      }
    }
    %77:vec4<f32> = load %x_89
    store %x_GLF_color, %77
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B13: {
    store %gl_FragCoord, %gl_FragCoord_param
    %80:void = call %main_1
    %81:vec4<f32> = load %x_GLF_color
    %82:main_out = construct %81
    ret %82
  }
}
%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
  $B14: {
    %85:bool = eq %rhs, 0i
    %86:bool = eq %lhs, -2147483648i
    %87:bool = eq %rhs, -1i
    %88:bool = and %86, %87
    %89:bool = or %85, %88
    %90:i32 = select %rhs, 1i, %89
    %91:i32 = let %90
    %92:i32 = div %lhs, %91
    %93:i32 = mul %92, %91
    %94:i32 = sub %lhs, %93
    ret %94
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B15: {
    %96:i32 = convert %value
    %97:bool = gte %value, -2147483648.0f
    %98:i32 = select -2147483648i, %96, %97
    %99:bool = lte %value, 2147483520.0f
    %100:i32 = select 2147483647i, %98, %99
    ret %100
  }
}

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