From bb0807fa5dfc699fa26e4c7d40c42dfe513f0aa0 Mon Sep 17 00:00:00 2001 From: Erik Pilkington Date: Tue, 8 Jan 2019 18:24:39 +0000 Subject: [PATCH] __has_feature(pragma_clang_attribute_namespaces) should be __has_extension Thanks to Richard Smith for pointing this out. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@350642 91177308-0d34-0410-b5e6-96231b3b80d8 --- docs/LanguageExtensions.rst | 2 +- include/clang/Basic/Features.def | 8 +++++++- test/Sema/pragma-attribute-namespace.c | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/docs/LanguageExtensions.rst b/docs/LanguageExtensions.rst index 574bb77345..e155cefb78 100644 --- a/docs/LanguageExtensions.rst +++ b/docs/LanguageExtensions.rst @@ -2727,7 +2727,7 @@ Without the namespaces on the macros, ``other_function`` will be annotated with a contrived example, but its very possible for this kind of situation to appear in real code if the pragmas are spread out across a large file. You can test if your version of clang supports namespaces on ``#pragma clang attribute`` with -``__has_feature(pragma_clang_attribute_namespaces)``. +``__has_extension(pragma_clang_attribute_namespaces)``. Subject Match Rules ------------------- diff --git a/include/clang/Basic/Features.def b/include/clang/Basic/Features.def index e3b97fd078..05464ed85f 100644 --- a/include/clang/Basic/Features.def +++ b/include/clang/Basic/Features.def @@ -17,6 +17,12 @@ // // The Predicate field dictates the conditions under which the feature or // extension will be made available. +// +// FEATURE(...) should be used to advertise support for standard language +// features, whereas EXTENSION(...) should be used for clang extensions. Note +// that many of the identifiers in this file don't follow this rule for backward +// compatibility reasons. +// //===----------------------------------------------------------------------===// #if !defined(FEATURE) && !defined(EXTENSION) @@ -69,7 +75,6 @@ FEATURE(attribute_overloadable, true) FEATURE(attribute_unavailable_with_message, true) FEATURE(attribute_unused_on_fields, true) FEATURE(attribute_diagnose_if_objc, true) -FEATURE(pragma_clang_attribute_namespaces, true) FEATURE(blocks, LangOpts.Blocks) FEATURE(c_thread_safety_attributes, true) FEATURE(cxx_exceptions, LangOpts.CXXExceptions) @@ -241,6 +246,7 @@ EXTENSION(cxx_init_captures, LangOpts.CPlusPlus11) EXTENSION(cxx_variable_templates, LangOpts.CPlusPlus) // Miscellaneous language extensions EXTENSION(overloadable_unmarked, true) +EXTENSION(pragma_clang_attribute_namespaces, true) #undef EXTENSION #undef FEATURE diff --git a/test/Sema/pragma-attribute-namespace.c b/test/Sema/pragma-attribute-namespace.c index 2db788865b..e7a36afcdc 100644 --- a/test/Sema/pragma-attribute-namespace.c +++ b/test/Sema/pragma-attribute-namespace.c @@ -1,6 +1,6 @@ // RUN: %clang_cc1 -fsyntax-only -verify %s -#if !__has_feature(pragma_clang_attribute_namespaces) +#if !__has_extension(pragma_clang_attribute_namespaces) #error #endif -- 2.50.1