Skip to content

Conversation

@egorzhdan
Copy link

If module FooCore is re-exported through module Foo (by using export_as in the modulemap), look for attributes of FooCore symbols in Foo.apinotes file.

Swift bundles std.apinotes file that adds Swift-specific attributes to the C++ stdlib symbols. In recent versions of libc++, module std got split into multiple top-level modules, each of them is re-exported through std. This change allows us to keep using a single modulemap file for all supported C++ stdlibs.

rdar://121680760

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why are we forcing public? Private modules can export_as too.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, wasn't aware of that, fixed

Copy link
Member

@compnerd compnerd left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this something we could upstream first?

…rting module's apinotes file

If module FooCore is re-exported through module Foo (by using `export_as` in the modulemap), look for attributes of FooCore symbols in Foo.apinotes file.

Swift bundles `std.apinotes` file that adds Swift-specific attributes to the C++ stdlib symbols. In recent versions of libc++, module std got split into multiple top-level modules, each of them is re-exported through std. This change allows us to keep using a single modulemap file for all supported C++ stdlibs.

rdar://121680760
@egorzhdan egorzhdan force-pushed the egorzhdan/apinotes-export-as branch from 00437c2 to 5084e0e Compare January 26, 2024 22:50
@egorzhdan
Copy link
Author

@compnerd we don't have enough APINotes logic upstreamed to run any tests yet, so I wanted to submit a complete PR with tests here first

}
// If module FooCore is re-exported through module Foo, try Foo.apinotes.
if (!ExportedModuleName.empty())
if (auto File = findAPINotesFile(Dir, ExportedModuleName, WantPublic))

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder what happens when the public module of a framework wants to be exported as the private module of a different framework...

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🤔 Yeah, would probably be good to have a diagnostic to reject that...

@egorzhdan egorzhdan merged commit 842681c into next Jan 26, 2024
@egorzhdan egorzhdan deleted the egorzhdan/apinotes-export-as branch January 26, 2024 23:40
egorzhdan added a commit to egorzhdan/llvm-project that referenced this pull request Mar 27, 2024
…rting module's apinotes file

This upstreams swiftlang#8063.

If module FooCore is re-exported through module Foo (by using `export_as` in the modulemap), look for attributes of FooCore symbols in Foo.apinotes file.

Swift bundles `std.apinotes` file that adds Swift-specific attributes to the C++ stdlib symbols. In recent versions of libc++, module std got split into multiple top-level modules, each of them is re-exported through std. This change allows us to keep using a single modulemap file for all supported C++ stdlibs.

rdar://121680760
egorzhdan added a commit to llvm/llvm-project that referenced this pull request Mar 28, 2024
…rting module's apinotes file

This upstreams swiftlang#8063.

If module FooCore is re-exported through module Foo (by using
`export_as` in the modulemap), look for attributes of FooCore symbols in
Foo.apinotes file.

Swift bundles `std.apinotes` file that adds Swift-specific attributes to
the C++ stdlib symbols. In recent versions of libc++, module std got
split into multiple top-level modules, each of them is re-exported
through std. This change allows us to keep using a single modulemap file
for all supported C++ stdlibs.

rdar://121680760
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.

5 participants