[cfe-dev] [RFC] Adding API Notes

Gábor Horváth via cfe-dev cfe-dev at lists.llvm.org
Wed May 17 08:29:10 PDT 2017


Hi!

I wanted to revive the discussion on adding API notes feature to Clang.

*The description of the feature from the original discussion*

"API notes solve a not-uncommon problem: we invent some new Clang attribute
that would be beneficial to add to some declarations in system headers
(e.g., adding a ‘noreturn’ attribute to the C ‘exit’ function), but we
can’t go around and fix all of the system headers everywhere. With API
notes, we can write a separate YAML file that states that we want to add
‘noreturn’ to the ‘exit’ function: when we feed that YAML file into Clang
as part of normal compilation (via a command-line option), Clang will add
‘noreturn’ to the ‘exit’ function when it parses the declaration of ‘exit’."

The old discussion can be found here:
http://lists.llvm.org/pipermail/cfe-dev/2015-December/046335.html

*The summary of the discussion*

* It would be useful for the static analyzer to attach additional info to
the functions
* There were already other trials to get similar feature working, see
https://reviews.llvm.org/D13731
* Anna has a nice summary what is the problem with augmented declarations:
http://lists.llvm.org/pipermail/cfe-dev/2015-December/046378.html
* C++ support is requested by the community, this is missing right now.
* Wider range of annotation support is missing. It is also requested by the
community.
* Parameter annotations are supported
* One of the concerns is the performance

*The case for adding API Notes*

* Importing annotations from external source looks to be an interesting
feature for the community
* Sean presented some API checkers which works based on special
annotations:
http://llvm.org/devmtg/2017-03//2017/02/20/accepted-sessions.html#29
* Similar feature can be used to provide fake implementations for
functions. It could help to finish a half done feature of the Static
Analyzer that was implemented during a GSoC project:
https://www.google-melange.com/archive/gsoc/2014/orgs/llvm/projects/xazax.html
* Performance might be crucial for regular compilation, but less of a
problem for the Clang Static Analyzer which tends to be slower than
compilations, so it is less likely to be bottlenecked by this phase
* It would also be possible to import sanitizer/optimizer/codegen related
annotations

*Proposed roadmap*

* Commit the feature as is
* Extend it with C++ support (namespaces, overloading, templates..)
* Extend it with additional annotations, and attaching custom data (like
fake function bodies)

What do you think? What are the main concerns with this feature?

Regards,
Gábor
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20170517/0dd9205d/attachment.html>


More information about the cfe-dev mailing list