aboutsummaryrefslogtreecommitdiff
path: root/libcpp/include
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2017-11-13 20:17:42 +0000
committerTom Tromey <tromey@gcc.gnu.org>2017-11-13 20:17:42 +0000
commitfb771b9dad6ef78a985353128cea48e620eb4324 (patch)
treed94251e8c98cb3a0a9bfd711707dea469e857c6b /libcpp/include
parent4d85d480272fb7331924f04534e0f5f14b60421e (diff)
downloadgcc-fb771b9dad6ef78a985353128cea48e620eb4324.zip
gcc-fb771b9dad6ef78a985353128cea48e620eb4324.tar.gz
gcc-fb771b9dad6ef78a985353128cea48e620eb4324.tar.bz2
Implement __VA_OPT__
This implements __VA_OPT__, a new preprocessor feature added in C++2A. The paper can be found here: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0306r4.html gcc/ChangeLog * doc/cpp.texi (Variadic Macros): Document __VA_OPT__. gcc/testsuite/ChangeLog * c-c++-common/cpp/va-opt-pedantic.c: New file. * c-c++-common/cpp/va-opt.c: New file. * c-c++-common/cpp/va-opt-error.c: New file. libcpp/ChangeLog * pch.c (cpp_read_state): Set n__VA_OPT__. * macro.c (vaopt_state): New class. (_cpp_arguments_ok): Check va_opt flag. (replace_args, create_iso_definition): Use vaopt_state. * lex.c (lex_identifier_intern): Possibly issue errors for __VA_OPT__. (lex_identifier): Likewise. (maybe_va_opt_error): New function. * internal.h (struct lexer_state) <va_args_ok>: Update comment. (struct spec_nodes) <n__VA_OPT__>: New field. * init.c (struct lang_flags) <va_opt>: New field. (lang_defaults): Add entries for C++2A. Update all entries for va_opt. (cpp_set_lang): Initialize va_opt. * include/cpplib.h (struct cpp_options) <va_opt>: New field. * identifiers.c (_cpp_init_hashtable): Initialize n__VA_OPT__. From-SVN: r254707
Diffstat (limited to 'libcpp/include')
-rw-r--r--libcpp/include/cpplib.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/libcpp/include/cpplib.h b/libcpp/include/cpplib.h
index 5a14858..101b33a 100644
--- a/libcpp/include/cpplib.h
+++ b/libcpp/include/cpplib.h
@@ -478,6 +478,9 @@ struct cpp_options
/* Nonzero for C++ 2014 Standard digit separators. */
unsigned char digit_separators;
+ /* Nonzero for C++2a __VA_OPT__ feature. */
+ unsigned char va_opt;
+
/* Holds the name of the target (execution) character set. */
const char *narrow_charset;