aboutsummaryrefslogtreecommitdiff
path: root/libcpp/macro.cc
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2022-12-07 19:18:06 +0000
committerJoseph Myers <joseph@codesourcery.com>2022-12-07 19:18:06 +0000
commitce53cf7b61ea6bce05570e2fd1f8c10eee308ab0 (patch)
treed347aafe958f5980ac1294dd4d40d8a33041b5b0 /libcpp/macro.cc
parenteb9491baf5a5672888809f8b5932a99d91804a52 (diff)
downloadgcc-ce53cf7b61ea6bce05570e2fd1f8c10eee308ab0.zip
gcc-ce53cf7b61ea6bce05570e2fd1f8c10eee308ab0.tar.gz
gcc-ce53cf7b61ea6bce05570e2fd1f8c10eee308ab0.tar.bz2
preprocessor: Enable __VA_OPT__ for C2x
C2x supports __VA_OPT__, so adjust libcpp not to pedwarn for uses of it (or of not passing any variable arguments to a variable-arguments macro) in standard C2x mode. I didn't try to duplicate existing tests for the details of the feature, just verified -pedantic-errors handling is as expected. And there's a reasonable argument (bug 98859) that __VA_OPT__ shouldn't be diagnosed in older standard modes at all (as opposed to not passing any variable arguments to a variable-arguments macro, for which older versions of the C standard require a diagnostic as a constraint violation); that argument applies to C as much as to C++, but I haven't made any changes in that regard. Bootstrapped with no regressions for x86_64-pc-linux-gnu. libcpp/ * init.cc (lang_defaults): Enable va_opt for STDC2X. * lex.cc (maybe_va_opt_error): Adjust diagnostic message for C. * macro.cc (_cpp_arguments_ok): Update comment. gcc/testsuite/ * gcc.dg/cpp/c11-vararg-1.c, gcc.dg/cpp/c2x-va-opt-1.c: New tests.
Diffstat (limited to 'libcpp/macro.cc')
-rw-r--r--libcpp/macro.cc2
1 files changed, 1 insertions, 1 deletions
diff --git a/libcpp/macro.cc b/libcpp/macro.cc
index 7d5a0d0..452e14a 100644
--- a/libcpp/macro.cc
+++ b/libcpp/macro.cc
@@ -1093,7 +1093,7 @@ _cpp_arguments_ok (cpp_reader *pfile, cpp_macro *macro, const cpp_hashnode *node
if (argc < macro->paramc)
{
- /* In C++20 (here the va_opt flag is used), and also as a GNU
+ /* In C++20 and C2X (here the va_opt flag is used), and also as a GNU
extension, variadic arguments are allowed to not appear in
the invocation at all.
e.g. #define debug(format, args...) something