diff options
author | Edward Smith-Rowland <3dw4rd@verizon.net> | 2014-11-10 15:53:12 +0000 |
---|---|---|
committer | Edward Smith-Rowland <emsr@gcc.gnu.org> | 2014-11-10 15:53:12 +0000 |
commit | 42fd12b1e7fc50183bcf62861aae81301a9efbcf (patch) | |
tree | cdf2ab35de7a1da1bcda63af97f127dea644c2ce /libcpp/internal.h | |
parent | 6d64f20c8d50ce563f7b709593ac1229f2146c61 (diff) | |
download | gcc-42fd12b1e7fc50183bcf62861aae81301a9efbcf.zip gcc-42fd12b1e7fc50183bcf62861aae81301a9efbcf.tar.gz gcc-42fd12b1e7fc50183bcf62861aae81301a9efbcf.tar.bz2 |
cpplib.h (cpp_callbacks): Add has_attribute.
libcpp:
2014-11-10 Edward Smith-Rowland <3dw4rd@verizon.net>
* include/cpplib.h (cpp_callbacks): Add has_attribute.
* internal.h (lexer_state): Add in__has_attribute__.
* directives.c (lex_macro_node): Prevent use of __has_attribute__
as a macro.
* expr.c (parse_has_attribute): New function; (eval_token): Look for
__has_attribute__ and route to parse_has_attribute.
* identifiers.c (_cpp_init_hashtable): Initialize n__has_attribute__.
* pch.c (cpp_read_state): Initialize n__has_attribute__.
* traditional.c (enum ls): Add ls_has_attribute, ls_has_attribute_close;
(_cpp_scan_out_logical_line): Attend to __has_attribute__.
gcc/c-family:
2014-11-10 Edward Smith-Rowland <3dw4rd@verizon.net>
* c-cppbuiltin.c (__has_attribute, __has_cpp_attribute): New macros;
(__cpp_rtti, __cpp_exceptions): New macros for C++98;
(__cpp_range_based_for, __cpp_initializer_lists,
__cpp_delegating_constructors, __cpp_nsdmi,
__cpp_inheriting_constructors, __cpp_ref_qualifiers): New macros
for C++11; (__cpp_attribute_deprecated): Remove in favor of
__has_cpp_attribute.
* c-lex.c (cb_has_attribute): New callback CPP function;
(init_c_lex): Set has_attribute callback.
gcc/testsuite:
2014-11-10 Edward Smith-Rowland <3dw4rd@verizon.net>
* g++.dg/cpp1y/feat-cxx11.C: Test new feature macros for C++98
and C++11; Test existence of __has_cpp_attribute; Test C++11
attributes.
* g++.dg/cpp1y/feat-cxx11-neg.C: Ditto.
* g++.dg/cpp1y/feat-cxx14.C: Ditto and test for C++14 attributes.
* g++.dg/cpp1y/feat-cxx98.C: Test new feature macros for C++98.
* g++.dg/cpp1y/feat-cxx98-neg.C: Ditto.
* g++.dg/cpp1y/feat-neg.C: Test that __cpp_rtti, _cpp_exceptions
will be undefined for -fno-rtti -fno-exceptions.
From-SVN: r217292
Diffstat (limited to 'libcpp/internal.h')
-rw-r--r-- | libcpp/internal.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/libcpp/internal.h b/libcpp/internal.h index 427f4c6..3a111c0 100644 --- a/libcpp/internal.h +++ b/libcpp/internal.h @@ -261,6 +261,9 @@ struct lexer_state /* Nonzero if in a __has_include__ or __has_include_next__ statement. */ unsigned char in__has_include__; + /* Nonzero if in a __has_attribute__ statement. */ + unsigned char in__has_attribute__; + /* Nonzero if prevent_expansion is true only because output is being discarded. */ unsigned char discarding_output; @@ -284,6 +287,7 @@ struct spec_nodes cpp_hashnode *n__VA_ARGS__; /* C99 vararg macros */ cpp_hashnode *n__has_include__; /* __has_include__ operator */ cpp_hashnode *n__has_include_next__; /* __has_include_next__ operator */ + cpp_hashnode *n__has_attribute__; /* __has_attribute__ operator */ }; typedef struct _cpp_line_note _cpp_line_note; |