diff options
author | Jason Merrill <jason@redhat.com> | 2024-09-15 11:34:43 +0200 |
---|---|---|
committer | Jason Merrill <jason@redhat.com> | 2024-09-15 17:49:07 +0200 |
commit | a9f9391e1eeccb9d062b9e73ef27ac577b23ed64 (patch) | |
tree | 5cc90a4d3a49c23fedc8339442abec008744aecb | |
parent | 5ef73ba1cc17b8893ad9a4e95f9cd191dbc0bfa3 (diff) | |
download | gcc-a9f9391e1eeccb9d062b9e73ef27ac577b23ed64.zip gcc-a9f9391e1eeccb9d062b9e73ef27ac577b23ed64.tar.gz gcc-a9f9391e1eeccb9d062b9e73ef27ac577b23ed64.tar.bz2 |
c++: __extension__ and -Wconditionally-supported
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.
-rw-r--r-- | gcc/cp/parser.cc | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/warn/Wconditionally-supported-1.C | 6 |
2 files changed, 12 insertions, 0 deletions
diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc index 3c8c755..4dd9474 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 3c32edb..192d709 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); } |