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_81:ptr<function, array<vec4<f32>, 8>, read_write> = var, array<vec4<f32>, 8>(vec4<f32>(0.0f))
    %x_82:ptr<function, array<vec4<f32>, 8>, read_write> = var
    %x_83:ptr<function, array<vec4<f32>, 8>, read_write> = var
    %x_84:ptr<function, array<vec4<f32>, 8>, read_write> = var
    %x_85:ptr<function, array<vec4<f32>, 16>, read_write> = var
    %x_95:ptr<function, vec4<f32>, read_write> = var
    %x_98:ptr<function, i32, read_write> = var
    store %x_81, 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))
    %12:array<vec4<f32>, 8> = load %x_81
    %x_86:array<vec4<f32>, 8> = let %12
    %14:vec4<f32> = load %gl_FragCoord
    %15:vec2<f32> = swizzle %14, xy
    %16:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
    %17:vec2<f32> = load %16
    %18:vec2<f32> = div %15, %17
    %19:vec2<f32> = mul %18, 32.0f
    %20:vec2<f32> = floor %19
    %x_93:vec2<f32> = let %20
    store %x_95, vec4<f32>(0.5f, 0.5f, 1.0f, 1.0f)
    store %x_98, 0i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %x_127:ptr<function, bool, read_write> = var
        %x_142:ptr<function, vec4<f32>, read_write> = var
        %x_96:ptr<function, vec4<f32>, read_write> = var
        %x_99:ptr<function, i32, read_write> = var
        %26:i32 = load %x_98
        %27:bool = lt %26, 8i
        if %27 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %x_104:ptr<function, vec4<f32>, read_write> = var
        store %x_82, %x_86
        %29:i32 = load %x_98
        %30:ptr<function, vec4<f32>, read_write> = access %x_82, %29
        %31:vec4<f32> = load %30
        store %x_104, %31
        switch 0u [c: (default, $B7)] {  # switch_1
          $B7: {  # case
            %32:f32 = access %x_93, 0u
            %x_107:f32 = let %32
            %34:f32 = load_vector_element %x_104, 0u
            %x_108:f32 = let %34
            %36:bool = lt %x_107, %x_108
            if %36 [t: $B8] {  # if_2
              $B8: {  # true
                store %x_127, false
                exit_switch  # switch_1
              }
            }
            %37:f32 = access %x_93, 1u
            %x_112:f32 = let %37
            %39:f32 = load_vector_element %x_104, 1u
            %x_113:f32 = let %39
            %41:bool = lt %x_112, %x_113
            if %41 [t: $B9] {  # if_3
              $B9: {  # true
                store %x_127, false
                exit_switch  # switch_1
              }
            }
            %42:f32 = load_vector_element %x_104, 2u
            %43:f32 = add %x_108, %42
            %44:bool = gt %x_107, %43
            if %44 [t: $B10] {  # if_4
              $B10: {  # true
                store %x_127, false
                exit_switch  # switch_1
              }
            }
            %45:f32 = load_vector_element %x_104, 3u
            %46:f32 = add %x_113, %45
            %47:bool = gt %x_112, %46
            if %47 [t: $B11] {  # if_5
              $B11: {  # true
                store %x_127, false
                exit_switch  # switch_1
              }
            }
            store %x_127, true
            exit_switch  # switch_1
          }
        }
        %48:vec4<f32> = load %x_95
        store %x_96, %48
        %49:bool = load %x_127
        if %49 [t: $B12] {  # if_6
          $B12: {  # true
            store %x_83, 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))
            %50:i32 = load %x_98
            %51:ptr<function, vec4<f32>, read_write> = access %x_83, %50
            %52:f32 = load_vector_element %51, 0u
            %x_131:f32 = let %52
            store %x_84, 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:i32 = load %x_98
            %55:ptr<function, vec4<f32>, read_write> = access %x_84, %54
            %56:f32 = load_vector_element %55, 1u
            %x_134:f32 = let %56
            store %x_85, 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))
            %58:i32 = call %tint_f32_to_i32, %x_131
            %60:i32 = let %58
            %61:i32 = call %tint_f32_to_i32, %x_134
            %62:i32 = mul %60, %61
            %63:i32 = load %x_98
            %64:i32 = mul %63, 9i
            %65:i32 = add %62, %64
            %66:i32 = add %65, 11i
            %67:i32 = call %tint_mod_i32, %66, 16i
            %69:ptr<function, vec4<f32>, read_write> = access %x_85, %67
            %70:vec4<f32> = load %69
            store %x_142, %70
            %71:vec4<f32> = load %x_142
            store %x_96, %71
            exit_if  # if_6
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %72:i32 = load %x_98
        %73:i32 = add %72, 1i
        store %x_99, %73
        %74:vec4<f32> = load %x_96
        store %x_95, %74
        %75:i32 = load %x_99
        store %x_98, %75
        next_iteration  # -> $B3
      }
    }
    %76:vec4<f32> = load %x_95
    store %x_GLF_color, %76
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B13: {
    store %gl_FragCoord, %gl_FragCoord_param
    %79:void = call %main_1
    %80:vec4<f32> = load %x_GLF_color
    %81:main_out = construct %80
    ret %81
  }
}
%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
  $B14: {
    %84:bool = eq %rhs, 0i
    %85:bool = eq %lhs, -2147483648i
    %86:bool = eq %rhs, -1i
    %87:bool = and %85, %86
    %88:bool = or %84, %87
    %89:i32 = select %rhs, 1i, %88
    %90:i32 = let %89
    %91:i32 = div %lhs, %90
    %92:i32 = mul %91, %90
    %93:i32 = sub %lhs, %92
    ret %93
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B15: {
    %95:i32 = convert %value
    %96:bool = gte %value, -2147483648.0f
    %97:i32 = select -2147483648i, %95, %96
    %98:bool = lte %value, 2147483520.0f
    %99:i32 = select 2147483647i, %97, %98
    ret %99
  }
}

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