Comment the weird behavior of __has_feature(is_empty) and __has_feature(is_pod)

llvm-svn: 136788
This commit is contained in:
Douglas Gregor 2011-08-03 17:01:05 +00:00
parent da618420ee
commit 73b8551188
1 changed files with 8 additions and 0 deletions

View File

@ -639,6 +639,10 @@ static bool HasFeature(const Preprocessor &PP, const IdentifierInfo *II) {
.Case("is_base_of", LangOpts.CPlusPlus)
.Case("is_class", LangOpts.CPlusPlus)
.Case("is_convertible_to", LangOpts.CPlusPlus)
// __is_empty is available only if the horrible
// "struct __is_empty" parsing hack hasn't been needed in this
// translation unit. If it has, __is_empty reverts to a normal
// identifier and __has_feature(is_empty) evaluates false.
.Case("is_empty",
LangOpts.CPlusPlus &&
PP.getIdentifierInfo("__is_empty")->getTokenID()
@ -646,6 +650,10 @@ static bool HasFeature(const Preprocessor &PP, const IdentifierInfo *II) {
.Case("is_enum", LangOpts.CPlusPlus)
.Case("is_literal", LangOpts.CPlusPlus)
.Case("is_standard_layout", LangOpts.CPlusPlus)
// __is_pod is available only if the horrible
// "struct __is_pod" parsing hack hasn't been needed in this
// translation unit. If it has, __is_pod reverts to a normal
// identifier and __has_feature(is_pod) evaluates false.
.Case("is_pod",
LangOpts.CPlusPlus &&
PP.getIdentifierInfo("__is_pod")->getTokenID()