[cfe-dev] Adding Support for APINotes

Chris Lattner via cfe-dev cfe-dev at lists.llvm.org
Sat Oct 17 10:53:51 PDT 2020



> On Oct 16, 2020, at 7:27 AM, James Y Knight <jyknight at google.com> wrote:
> 
> On Thu, Oct 15, 2020 at 11:59 PM Chris Lattner <clattner at nondot.org <mailto:clattner at nondot.org>> wrote:
>> On Oct 14, 2020, at 6:49 PM, James Y Knight via cfe-dev <cfe-dev at lists.llvm.org <mailto:cfe-dev at lists.llvm.org>> wrote:
>> 
>> 
>> If such a hook mechanism is added, it then seems entirely plausible that SemaAPINotes.cpp <https://github.com/apple/llvm-project/blob/apple/main/clang/lib/Sema/SemaAPINotes.cpp> and lib/APINotes/* <https://github.com/apple/llvm-project/tree/apple/main/clang/lib/APINotes> can be moved from the clang-fork into swift itself without requiring significant modifications of the code, or any change in functionality of the feature.
>> 
>> Well, the APINotes also provide nullability information for ObjC interfaces, which is not part of Swift, but rather part of ObjC, so that still needs to be in clang.  That is, the functionality is useful for ObjC, and that doesn't make sense to be in Swift.
>> 
>> Theoretically one could imagine doing so -- but TTBOMK, it's never actually been used like this. All nullability annotations used by objc compilations live in the headers themselves, and the apinotes command-line options are passed only by Swift, for creating a Swift-ObjC-bridge module. 
> 
> Nullability isn’t just useful for swift, it is also useful to the clang static analyzer and other tools that want to reason about C API semantics.
> 
> Nullability is being used in ObjC to emit warnings, but apinotes is not. For ObjC compiles (and static analyzer), the nullability information comes from header files, _Nullable and _Nonnull keywords, "NS_ASSUME_NONNULL_BEGIN", etc.

Right, but APINotes are complementary to header annotations.  Some headers are readonly, e.g. if they are uncooperative system linux headers that won’t adopt the annotations.

-Chris
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20201017/d7fdf582/attachment.html>


More information about the cfe-dev mailing list