diff mbox series

[pushed] c++: __extension__ and -Wconditionally-supported

Message ID 20240915154923.463363-1-jason@redhat.com
State New
Headers show
Series [pushed] c++: __extension__ and -Wconditionally-supported | expand

Commit Message

Jason Merrill Sept. 15, 2024, 3:49 p.m. UTC
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(+)


base-commit: 5ef73ba1cc17b8893ad9a4e95f9cd191dbc0bfa3
diff mbox series

Patch

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);
 }