Skip to content
Snippets Groups Projects
  • Joseph Myers's avatar
    ce53cf7b
    preprocessor: Enable __VA_OPT__ for C2x · ce53cf7b
    Joseph Myers authored
    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.
    ce53cf7b
    History
    preprocessor: Enable __VA_OPT__ for C2x
    Joseph Myers authored
    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.