Ping.
> Fixes c++/91318. > > libcpp/ChangeLog: > > 2019-08-06 Piotr Henryk Dabrowski <p...@phd.re> > > PR c++/91318 > * include/cpplib.h: Added cpp_define_unused(), > cpp_define_formatted_unused() > * directives.c: Likewise. > > gcc/c-family/ChangeLog: > > 2019-08-06 Piotr Henryk Dabrowski <p...@phd.re> > > PR c++/91318 > * c-cppbuiltin.c: c_cpp_builtins_optimize_pragma(): use > cpp_define_unused() > > > diff --git a/gcc/c-family/c-cppbuiltin.c b/gcc/c-family/c-cppbuiltin.c > index d389f8ca4a0..47d0cefb85a 100644 > --- a/gcc/c-family/c-cppbuiltin.c > +++ b/gcc/c-family/c-cppbuiltin.c > @@ -576,41 +576,41 @@ c_cpp_builtins_optimize_pragma (cpp_reader *pfile, tree > prev_tree, > /* Other target-independent built-ins determined by command-line > options. */ > if (!prev->x_optimize_size && cur->x_optimize_size) > - cpp_define (pfile, "__OPTIMIZE_SIZE__"); > + cpp_define_unused (pfile, "__OPTIMIZE_SIZE__"); > else if (prev->x_optimize_size && !cur->x_optimize_size) > cpp_undef (pfile, "__OPTIMIZE_SIZE__"); > > if (!prev->x_optimize && cur->x_optimize) > - cpp_define (pfile, "__OPTIMIZE__"); > + cpp_define_unused (pfile, "__OPTIMIZE__"); > else if (prev->x_optimize && !cur->x_optimize) > cpp_undef (pfile, "__OPTIMIZE__"); > > prev_fast_math = fast_math_flags_struct_set_p (prev); > cur_fast_math = fast_math_flags_struct_set_p (cur); > if (!prev_fast_math && cur_fast_math) > - cpp_define (pfile, "__FAST_MATH__"); > + cpp_define_unused (pfile, "__FAST_MATH__"); > else if (prev_fast_math && !cur_fast_math) > cpp_undef (pfile, "__FAST_MATH__"); > > if (!prev->x_flag_signaling_nans && cur->x_flag_signaling_nans) > - cpp_define (pfile, "__SUPPORT_SNAN__"); > + cpp_define_unused (pfile, "__SUPPORT_SNAN__"); > else if (prev->x_flag_signaling_nans && !cur->x_flag_signaling_nans) > cpp_undef (pfile, "__SUPPORT_SNAN__"); > > if (!prev->x_flag_errno_math && cur->x_flag_errno_math) > cpp_undef (pfile, "__NO_MATH_ERRNO__"); > else if (prev->x_flag_errno_math && !cur->x_flag_errno_math) > - cpp_define (pfile, "__NO_MATH_ERRNO__"); > + cpp_define_unused (pfile, "__NO_MATH_ERRNO__"); > > if (!prev->x_flag_finite_math_only && cur->x_flag_finite_math_only) > { > cpp_undef (pfile, "__FINITE_MATH_ONLY__"); > - cpp_define (pfile, "__FINITE_MATH_ONLY__=1"); > + cpp_define_unused (pfile, "__FINITE_MATH_ONLY__=1"); > } > else if (prev->x_flag_finite_math_only && !cur->x_flag_finite_math_only) > { > cpp_undef (pfile, "__FINITE_MATH_ONLY__"); > - cpp_define (pfile, "__FINITE_MATH_ONLY__=0"); > + cpp_define_unused (pfile, "__FINITE_MATH_ONLY__=0"); > } > } > > diff --git a/libcpp/directives.c b/libcpp/directives.c > index ddf8979d513..9a774c9ed04 100644 > --- a/libcpp/directives.c > +++ b/libcpp/directives.c > @@ -2392,6 +2392,15 @@ cpp_define (cpp_reader *pfile, const char *str) > run_directive (pfile, T_DEFINE, buf, count); > } > > +/* Like cpp_define, but does not warn about unused macro. */ > +void > +cpp_define_unused (cpp_reader *pfile, const char *str) > +{ > + unsigned char warn_unused_macros = CPP_OPTION (pfile, > warn_unused_macros); > + CPP_OPTION (pfile, warn_unused_macros) = 0; > + cpp_define (pfile, str); > + CPP_OPTION (pfile, warn_unused_macros) = warn_unused_macros; > +} > > /* Use to build macros to be run through cpp_define() as > described above. > @@ -2411,6 +2420,20 @@ cpp_define_formatted (cpp_reader *pfile, const char > *fmt, ...) > free (ptr); > } > > +/* Like cpp_define_formatted, but does not warn about unused macro. */ > +void > +cpp_define_formatted_unused (cpp_reader *pfile, const char *fmt, ...) > +{ > + char *ptr; > + > + va_list ap; > + va_start (ap, fmt); > + ptr = xvasprintf (fmt, ap); > + va_end (ap); > + > + cpp_define_unused (pfile, ptr); > + free (ptr); > +} > > /* Slight variant of the above for use by initialize_builtins. */ > void > diff --git a/libcpp/include/cpplib.h b/libcpp/include/cpplib.h > index a645f8136a6..8d3f9082601 100644 > --- a/libcpp/include/cpplib.h > +++ b/libcpp/include/cpplib.h > @@ -1052,8 +1052,12 @@ extern cppchar_t cpp_host_to_exec_charset (cpp_reader > *, cppchar_t); > /* Used to register macros and assertions, perhaps from the command line. > The text is the same as the command line argument. */ > extern void cpp_define (cpp_reader *, const char *); > +extern void cpp_define_unused (cpp_reader *, const char *); > extern void cpp_define_formatted (cpp_reader *pfile, > const char *fmt, ...) ATTRIBUTE_PRINTF_2; > +extern void cpp_define_formatted_unused (cpp_reader *pfile, > + const char *fmt, > + ...) ATTRIBUTE_PRINTF_2; > extern void cpp_assert (cpp_reader *, const char *); > extern void cpp_undef (cpp_reader *, const char *); > extern void cpp_unassert (cpp_reader *, const char *); >