[cfe-dev] Adding Support for APINotes
James Y Knight via cfe-dev
cfe-dev at lists.llvm.org
Mon Oct 12 12:29:37 PDT 2020
On Mon, Oct 12, 2020 at 12:46 PM Gábor Márton <martongabesz at gmail.com>
> +1 for separating the Swift specific Sema logic the way you described.
> However, there are valuable implementations in lib/APINotes/*
> <https://github.com/apple/llvm-project/tree/apple/main/clang/lib/APINotes> which
> we could use for a generic APINotes framework in Clang. For instance,
> <https://github.com/apple/llvm-project/blob/apple/main/clang/lib/APINotes/APINotesManager.cpp#L325> encapsulates
> the logic for finding the APINotes files, this seems to be totally
> independent from Swift.
Do you think that will actually be useful to the static analyzer use-case?
I'd expect that in most use-cases, you'd want to provide the changes via
some mechanism other than searching for a file named "APINotes.apinotes" in
the same directory as you found the header. Other than for Swift with Apple
frameworks, it seems likely to be pretty rare that the producer of a
particular library would be the same entity providing a file of extra
attributes on the side?
Also, I believe that particular function is unused in Swift. AFAICT, Swift
only uses the modules-based apinotes loading (loadCurrentModuleAPINotes),
not the header-path-based loading (that is: it passes "-fapinotes-modules"
to its internal Clang invocation, not "-fapinotes").
A side note: ASTMutationListener
> <https://clang.llvm.org/doxygen/classclang_1_1ASTMutationListener.html> is
> the interface which notifies any consumers when an AST node is changed
> after its creation. I think we should notify all clients once we add a new
> APINote Attribute (e.g. see AddedAttributeToRecord
> shouldn't we?
I wouldn't think so, since this mechanism modifies the nodes as part of
their initial creation, not as a subsequent mutation?
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the cfe-dev