Tested x86_64-pc-linux-gnu, applying to trunk. -- 8< --
When we're explicitly choosing GCC extensions, we similarly shouldn't complain about optional features that GCC provides. This particular pattern of cast between function and object pointer is used by gthr-posix.h on some targets, including linux-gnu before glibc 2.34. gcc/cp/ChangeLog: * parser.cc (cp_parser_unary_expression) [RID_EXTENSION]: Also suppress -Wconditionally-supported. gcc/testsuite/ChangeLog: * g++.dg/warn/Wconditionally-supported-1.C: Add __extension__ cases. --- gcc/cp/parser.cc | 6 ++++++ gcc/testsuite/g++.dg/warn/Wconditionally-supported-1.C | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc index 3c8c75575b0..4dd9474cf60 100644 --- a/gcc/cp/parser.cc +++ b/gcc/cp/parser.cc @@ -9150,9 +9150,15 @@ cp_parser_unary_expression (cp_parser *parser, cp_id_kind * pidk, /* Save away the PEDANTIC flag. */ cp_parser_extension_opt (parser, &saved_pedantic); + /* Also suppress -Wconditionally-supported. */ + diagnostic_push_diagnostics (global_dc, input_location); + diagnostic_classify_diagnostic + (global_dc, OPT_Wconditionally_supported, + DK_IGNORED, input_location); /* Parse the cast-expression. */ expr = cp_parser_simple_cast_expression (parser); /* Restore the PEDANTIC flag. */ + diagnostic_pop_diagnostics (global_dc, input_location); pedantic = saved_pedantic; return expr; diff --git a/gcc/testsuite/g++.dg/warn/Wconditionally-supported-1.C b/gcc/testsuite/g++.dg/warn/Wconditionally-supported-1.C index 3c32edba8ce..192d709fd79 100644 --- a/gcc/testsuite/g++.dg/warn/Wconditionally-supported-1.C +++ b/gcc/testsuite/g++.dg/warn/Wconditionally-supported-1.C @@ -22,4 +22,10 @@ void foo () pf = reinterpret_cast <PF>(po); // { dg-warning "8:casting between pointer-to-function and pointer-to-object is conditionally-supported" } po = reinterpret_cast <PO>(pf); // { dg-warning "8:casting between pointer-to-function and pointer-to-object is conditionally-supported" } + + pf = __extension__ reinterpret_cast <PF>(pv); + pv = __extension__ reinterpret_cast <PV>(pf); + + pf = __extension__ reinterpret_cast <PF>(po); + po = __extension__ reinterpret_cast <PO>(pf); } base-commit: 5ef73ba1cc17b8893ad9a4e95f9cd191dbc0bfa3 -- 2.46.0