aboutsummaryrefslogtreecommitdiff
path: root/libcpp/init.c
diff options
context:
space:
mode:
Diffstat (limited to 'libcpp/init.c')
-rw-r--r--libcpp/init.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/libcpp/init.c b/libcpp/init.c
index 2add6ea..cf0145b 100644
--- a/libcpp/init.c
+++ b/libcpp/init.c
@@ -380,6 +380,8 @@ static const struct builtin_macro builtin_array[] =
B("__LINE__", BT_SPECLINE, true),
B("__INCLUDE_LEVEL__", BT_INCLUDE_LEVEL, true),
B("__COUNTER__", BT_COUNTER, true),
+ B("__has_attribute", BT_HAS_ATTRIBUTE, true),
+ B("__has_cpp_attribute", BT_HAS_ATTRIBUTE, true),
/* Keep builtins not used for -traditional-cpp at the end, and
update init_builtins() if any more are added. */
B("_Pragma", BT_PRAGMA, true),
@@ -460,6 +462,10 @@ cpp_init_special_builtins (cpp_reader *pfile)
for (b = builtin_array; b < builtin_array + n; b++)
{
+ if (b->value == BT_HAS_ATTRIBUTE
+ && (CPP_OPTION (pfile, lang) == CLK_ASM
+ || pfile->cb.has_attribute == NULL))
+ continue;
cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len);
hp->type = NT_MACRO;
hp->flags |= NODE_BUILTIN;