Skip to content

AGWeakAttribute related link issue #178

@Kyle-Ye

Description

@Kyle-Ye

We used to workaround them by using @alwaysEmitIntoClient.

But the protocol conformance of Hashable can't be workaround.

Undefined symbols for architecture arm64:
  "protocol conformance descriptor for __C.AGWeakAttribute : Swift.Hashable in AttributeGraph", referenced from:
      lazy protocol witness table accessor for type __C.AGWeakAttribute and conformance __C.AGWeakAttribute : Swift.Hashable in AttributeGraph in OpenSwiftUICore.o
  "_AGGraphGetAttributeSubgraph2", referenced from:
      xx in xx.o
ld: symbol(s) not found for architecture arm64

It turns out that we are linking sSo15AGWeakAttributeVSH0B5GraphMc but AG contains sSo15AGWeakAttributeaSH0B5GraphMc

➜  swift demangle --expand sSo15AGWeakAttributeVSH0B5GraphMc
Demangling for $sSo15AGWeakAttributeVSH0B5GraphMc
kind=Global
  kind=ProtocolConformanceDescriptor
    kind=ProtocolConformance
      kind=Type
        kind=Structure
          kind=Module, text="__C"
          kind=Identifier, text="AGWeakAttribute"
      kind=Type
        kind=Protocol
          kind=Module, text="Swift"
          kind=Identifier, text="Hashable"
      kind=Module, text="AttributeGraph"
$sSo15AGWeakAttributeVSH0B5GraphMc ---> protocol conformance descriptor for __C.AGWeakAttribute : Swift.Hashable in AttributeGraph
➜  swift demangle --expand sSo15AGWeakAttributeaSH0B5GraphMc
Demangling for $sSo15AGWeakAttributeaSH0B5GraphMc
kind=Global
  kind=ProtocolConformanceDescriptor
    kind=ProtocolConformance
      kind=Type
        kind=TypeAlias
          kind=Module, text="__C"
          kind=Identifier, text="AGWeakAttribute"
      kind=Type
        kind=Protocol
          kind=Module, text="Swift"
          kind=Identifier, text="Hashable"
      kind=Module, text="AttributeGraph"
$sSo15AGWeakAttributeaSH0B5GraphMc ---> protocol conformance descriptor for __C.AGWeakAttribute : Swift.Hashable in AttributeGraph

The difference is that we have 'Structure' here while AG will have TypeAlias.

The current def is as following:

typedef struct AG_SWIFT_NAME(AnyWeakAttribute) AGWeakAttribute {
    struct {
        AGAttribute identifier;
        uint32_t seed;
    } _details;
} AGWeakAttribute;

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions