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: {
    %indexable:ptr<function, array<vec4<f32>, 16>, read_write> = var
    %x_80:ptr<function, vec2<i32>, read_write> = var
    %x_83:ptr<function, i32, read_write> = var
    %x_113:ptr<function, vec2<i32>, read_write> = var
    %x_114:ptr<function, vec2<i32>, read_write> = var
    %x_116:ptr<function, vec2<i32>, read_write> = var
    %x_119:ptr<function, i32, read_write> = var
    %12:vec4<f32> = load %gl_FragCoord
    %13:vec2<f32> = swizzle %12, xy
    %14:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
    %15:vec2<f32> = load %14
    %16:vec2<f32> = div %13, %15
    %x_63:vec2<f32> = let %16
    %18:f32 = access %x_63, 0u
    %19:f32 = mul %18, 8.0f
    %20:i32 = call %tint_f32_to_i32, %19
    %x_66:i32 = let %20
    %23:f32 = access %x_63, 1u
    %24:f32 = mul %23, 8.0f
    %25:i32 = call %tint_f32_to_i32, %24
    %x_69:i32 = let %25
    %27:i32 = and %x_66, 5i
    %28:i32 = and %x_69, 10i
    %29:i32 = or %27, %28
    %30:i32 = mul %29, 8i
    %31:i32 = and %x_69, 5i
    %32:i32 = and %x_66, 10i
    %33:i32 = or %31, %32
    %34:i32 = add %30, %33
    %35:vec2<i32> = construct %34, 0i
    store %x_80, %35
    store %x_83, 0i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %x_94:ptr<function, vec2<i32>, read_write> = var
        %x_95:ptr<function, vec2<i32>, read_write> = var
        %x_102:ptr<function, vec2<i32>, read_write> = var
        %x_103:ptr<function, vec2<i32>, read_write> = var
        %x_84:ptr<function, i32, read_write> = var
        %41:i32 = load %x_83
        %42:bool = lt %41, 100i
        if %42 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %43:vec2<i32> = load %x_80
        store %x_95, %43
        %44:i32 = load_vector_element %x_80, 0u
        %45:bool = gt %44, 0i
        if %45 [t: $B7] {  # if_2
          $B7: {  # true
            %46:vec2<i32> = load %x_80
            store %x_94, %46
            %47:i32 = load_vector_element %x_80, 1u
            %48:i32 = sub %47, 1i
            store_vector_element %x_94, 1u, %48
            %49:vec2<i32> = load %x_94
            store %x_95, %49
            exit_if  # if_2
          }
        }
        %50:vec2<i32> = load %x_95
        store %x_103, %50
        %51:i32 = load_vector_element %x_95, 0u
        %52:bool = lt %51, 0i
        if %52 [t: $B8] {  # if_3
          $B8: {  # true
            %53:vec2<i32> = load %x_95
            store %x_102, %53
            %54:i32 = load_vector_element %x_95, 1u
            %55:i32 = add %54, 1i
            store_vector_element %x_102, 1u, %55
            %56:vec2<i32> = load %x_102
            store %x_103, %56
            exit_if  # if_3
          }
        }
        %57:vec2<i32> = load %x_103
        %x_81_1:ptr<function, vec2<i32>, read_write> = var, %57
        %59:i32 = load_vector_element %x_103, 0u
        %60:i32 = let %59
        %61:i32 = load_vector_element %x_103, 1u
        %62:i32 = call %tint_div_i32, %61, 2i
        %64:i32 = add %60, %62
        store_vector_element %x_81_1, 0u, %64
        %65:vec2<i32> = load %x_81_1
        %x_81:vec2<i32> = let %65
        continue  # -> $B4
      }
      $B4: {  # continuing
        %67:i32 = load %x_83
        %68:i32 = add %67, 1i
        store %x_84, %68
        store %x_80, %x_81
        %69:i32 = load %x_84
        store %x_83, %69
        next_iteration  # -> $B3
      }
    }
    %70:i32 = load_vector_element %x_80, 0u
    %x_108:i32 = let %70
    %72:vec2<i32> = load %x_80
    store %x_114, %72
    %73:bool = lt %x_108, 0i
    if %73 [t: $B9] {  # if_4
      $B9: {  # true
        store %x_113, vec2<i32>(0i)
        %74:i32 = negation %x_108
        store_vector_element %x_113, 0u, %74
        %75:vec2<i32> = load %x_113
        store %x_114, %75
        exit_if  # if_4
      }
    }
    %76:vec2<i32> = load %x_114
    store %x_116, %76
    loop [b: $B10, c: $B11] {  # loop_2
      $B10: {  # body
        %x_117:ptr<function, vec2<i32>, read_write> = var
        %78:i32 = load_vector_element %x_116, 0u
        store %x_119, %78
        %79:i32 = load %x_119
        %80:bool = gt %79, 15i
        if %80 [t: $B12, f: $B13] {  # if_5
          $B12: {  # true
            exit_if  # if_5
          }
          $B13: {  # false
            exit_loop  # loop_2
          }
        }
        continue  # -> $B11
      }
      $B11: {  # continuing
        store %x_117, vec2<i32>(0i)
        %81:i32 = load %x_119
        %82:i32 = sub %81, 16i
        store_vector_element %x_117, 0u, %82
        %83:vec2<i32> = load %x_117
        store %x_116, %83
        next_iteration  # -> $B10
      }
    }
    store %indexable, 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))
    %84:array<vec4<f32>, 16> = load %indexable
    %x_123:array<vec4<f32>, 16> = let %84
    store %indexable, array<vec4<f32>, 16>(vec4<f32>(0.0f))
    store %indexable, %x_123
    %86:i32 = load %x_119
    %87:ptr<function, vec4<f32>, read_write> = access %indexable, %86
    %88:vec4<f32> = load %87
    store %x_GLF_color, %88
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B14: {
    store %gl_FragCoord, %gl_FragCoord_param
    %91:void = call %main_1
    %92:vec4<f32> = load %x_GLF_color
    %93:main_out = construct %92
    ret %93
  }
}
%tint_div_i32 = func(%lhs:i32, %rhs:i32):i32 {
  $B15: {
    %96:bool = eq %rhs, 0i
    %97:bool = eq %lhs, -2147483648i
    %98:bool = eq %rhs, -1i
    %99:bool = and %97, %98
    %100:bool = or %96, %99
    %101:i32 = select %rhs, 1i, %100
    %102:i32 = div %lhs, %101
    ret %102
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B16: {
    %104:i32 = convert %value
    %105:bool = gte %value, -2147483648.0f
    %106:i32 = select -2147483648i, %104, %105
    %107:bool = lte %value, 2147483520.0f
    %108:i32 = select 2147483647i, %106, %107
    ret %108
  }
}

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