Skip to content

ClangImporter: Look up availability domains in Clang modules #80035

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Mar 16, 2025

Conversation

tshortli
Copy link
Contributor

Clang modules may now define availability domains for use in Swift programs. A domain can be specified by declaring an __AvailabilityDomain value:

#include <feature-availability.h>

static struct __AvailabilityDomain __SomeDomain __attribute__((availability_domain(SomeDomain))) = {
        __AVAILABILITY_DOMAIN_DYNAMIC, // domain state (enabled, disabled, dynamic)
        predicate_func // predicate function to be called at runtime if dynamic
};

To facilitate this, ClangImporter constructs a lookup table that maps availability domain names to these VarDecls and stores it as an on-disk hash table in the extended storage of the Clang module serialization format. In the future, I expect the responsibility of looking up domain VarDecls in a serialized module to move to Clang and for this custom lookup logic to be removed from the Swift compiler.

Resolves rdar://138441266.

@tshortli
Copy link
Contributor Author

@swift-ci please test

This is very brittle in this first iteration. For now we require the
declaration representing the availability domain be deserialized before it can
be looked up by name since Clang does not have a lookup table for availabilty
domains in its module representation. As a result, it only works for bridging
headers that are not precompiled.

Part of rdar://138441266.
In addition to tracking availability domains in SwiftLookupTable, also
serialize and deserialize the mapping from domain name to `clang::VarDecl`.
Ideally this serialization and lookup infrastructure would be entirely handled
by Clang, since it also needs to look up availability domains in serialized
modules, but the implementation for that is not ready yet.

Part of rdar://138441266.
Import `__attribute__((availability(domain:MyDomain, ...)))` as
`@available(SomeDomain, ...)`.

Resolves rdar://138441266.
@tshortli tshortli force-pushed the import-clang-availability-domains branch from 7e1ba87 to e96b44b Compare March 15, 2025 14:44
@tshortli
Copy link
Contributor Author

@swift-ci please smoke test

@tshortli
Copy link
Contributor Author

@swift-ci please smoke test Linux

@tshortli tshortli enabled auto-merge March 16, 2025 00:34
@tshortli tshortli merged commit bb6dcef into swiftlang:main Mar 16, 2025
3 checks passed
@tshortli tshortli deleted the import-clang-availability-domains branch March 16, 2025 04:51
tshortli added a commit to tshortli/swift that referenced this pull request Apr 7, 2025
Partially revert swiftlang#80035 now that Clang
has its own APIs for querying serialized modules for the decl representing the
availability domain with a given name.
tshortli added a commit to tshortli/swift that referenced this pull request Apr 8, 2025
Partially revert swiftlang#80035 now that Clang
has its own APIs for querying serialized modules for the decl representing the
availability domain with a given name.
tshortli added a commit to tshortli/swift that referenced this pull request Apr 8, 2025
Partially revert swiftlang#80035 now that Clang
has its own APIs for querying serialized modules for the decl representing the
availability domain with a given name.
tshortli added a commit to tshortli/swift that referenced this pull request Apr 8, 2025
Partially revert swiftlang#80035 now that Clang
has its own APIs for querying serialized modules for the decl representing the
availability domain with a given name.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant