Add __has_builtin support for builtin function-like type traits.
authorRichard Smith <richard-llvm@metafoo.co.uk>
Wed, 14 Aug 2019 02:30:11 +0000 (02:30 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Wed, 14 Aug 2019 02:30:11 +0000 (02:30 +0000)
commitdac3ea4eb3f6fc75be4305b9b7ed1a861ea5993e
tree1871a1c31d1cfbf4fed4cd8a76fb226b51b6ef65
parentf1d538cce54b4a2ae06b07cf5323b0137f5385d3
Add __has_builtin support for builtin function-like type traits.

Summary:
Previously __has_builtin(__builtin_*) would return false for
__builtin_*s that we modeled as keywords rather than as functions
(because they take type arguments). With this patch, all builtins
that are called with function-call-like syntax return true from
__has_builtin (covering __builtin_* and also the __is_* and __has_* type
traits and the handful of similar builtins without such a prefix).

Update the documentation on __has_builtin and on type traits to match.
While doing this I noticed the type trait documentation was out of date
and incomplete; that's fixed here too.

Reviewers: aaron.ballman

Subscribers: jfb, kristina, cfe-commits

Tags: #clang

Differential Revision: https://reviews.llvm.org/D66100

llvm-svn: 368785
clang/docs/LanguageExtensions.rst
clang/include/clang/Basic/Features.def
clang/include/clang/Basic/TokenKinds.def
clang/lib/Lex/PPMacroExpansion.cpp
clang/test/Preprocessor/feature_tests.c
clang/test/Preprocessor/feature_tests.cpp [new file with mode: 0644]