preprocessor: Enable __VA_OPT__ for C2x
authorJoseph Myers <joseph@codesourcery.com>
Wed, 7 Dec 2022 19:18:06 +0000 (19:18 +0000)
committerJoseph Myers <joseph@codesourcery.com>
Wed, 7 Dec 2022 19:18:06 +0000 (19:18 +0000)
commitce53cf7b61ea6bce05570e2fd1f8c10eee308ab0
treed347aafe958f5980ac1294dd4d40d8a33041b5b0
parenteb9491baf5a5672888809f8b5932a99d91804a52
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.
gcc/testsuite/gcc.dg/cpp/c11-vararg-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/cpp/c2x-va-opt-1.c [new file with mode: 0644]
libcpp/init.cc
libcpp/lex.cc
libcpp/macro.cc