public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] c-family: Support #pragma region/endregion [PR85487]
@ 2022-11-10  3:13 Jonathan Wakely
  2022-11-11  0:01 ` Joseph Myers
  0 siblings, 1 reply; 2+ messages in thread
From: Jonathan Wakely @ 2022-11-10  3:13 UTC (permalink / raw)
  To: gcc-patches

Something similar has been proposed before, but didn't get approval.
Jeff wanted a more general framework for ignoring pragmas. It might make
sense to do that, and reuse it for the Darwin-specific 'mark' pragmas.
But as I said in the PR, I looked at the darwin ones and they are unique
among all pragmas in GCC. I am not going there, sorry :-)

In the PR it was suggested that we should check for syntax errors in
these pragmas or make sure there are matching region/endregion pairs.
I disagree. This is a simple, low-risk patch that removes unhelpful
warnings for users who have these macros for their editor to process. 
It's not our business to check for correct use of these macros, their
meaning is determined by other tools that we don't control. We should
just not complain when we see them, and no more.

Tested powerpc64le-linux. OK for trunk?

-- >8 --

These pragmas are used by some editors to mark regions of code for
grouping and folding. GCC should silently ignore them, rather than
giving -Wunknown-pragmas warnings.

	PR c/85487

gcc/ChangeLog:

	* doc/cpp/pragmas.rst (Pragmas): Document region pragmas.

gcc/c-family/ChangeLog:

	* c-pragma.cc (handle_pragma_ignore): New function.
	(init_pragma): Register region and endregion pragmas.

gcc/testsuite/ChangeLog:

	* c-c++-common/pragma-region.c: New test.
---
 gcc/c-family/c-pragma.cc                   |  9 +++++++++
 gcc/doc/cpp/pragmas.rst                    |  3 +++
 gcc/testsuite/c-c++-common/pragma-region.c | 11 +++++++++++
 3 files changed, 23 insertions(+)
 create mode 100644 gcc/testsuite/c-c++-common/pragma-region.c

diff --git a/gcc/c-family/c-pragma.cc b/gcc/c-family/c-pragma.cc
index b5a4b3c970f..142a46441ac 100644
--- a/gcc/c-family/c-pragma.cc
+++ b/gcc/c-family/c-pragma.cc
@@ -1403,6 +1403,12 @@ handle_pragma_message (cpp_reader *)
 	    TREE_STRING_POINTER (message));
 }
 
+/* Ignore a no-op pragma that GCC recognizes, but which has no effect.  */
+static void
+handle_pragma_ignore (cpp_reader *)
+{
+}
+
 /* Mark whether the current location is valid for a STDC pragma.  */
 
 static bool valid_location_for_stdc_pragma;
@@ -1870,6 +1876,9 @@ init_pragma (void)
   c_register_pragma ("GCC", "pop_options", handle_pragma_pop_options);
   c_register_pragma ("GCC", "reset_options", handle_pragma_reset_options);
 
+  c_register_pragma (0, "region", handle_pragma_ignore);
+  c_register_pragma (0, "endregion", handle_pragma_ignore);
+
   c_register_pragma ("STDC", "FLOAT_CONST_DECIMAL64",
 		     handle_pragma_float_const_decimal64);
 
diff --git a/gcc/doc/cpp/pragmas.rst b/gcc/doc/cpp/pragmas.rst
index da07cebf4a1..78277d7b623 100644
--- a/gcc/doc/cpp/pragmas.rst
+++ b/gcc/doc/cpp/pragmas.rst
@@ -119,3 +119,6 @@ GCC plugins may provide their own pragmas.
   file will never be read again, no matter what.  It is a less-portable
   alternative to using :samp:`#ifndef` to guard the contents of header files
   against multiple inclusions.
+
+``#pragma region {tokens}...``, ``#pragma endregion {tokens}...``
+  These pragmas are accepted, but have no effect.
diff --git a/gcc/testsuite/c-c++-common/pragma-region.c b/gcc/testsuite/c-c++-common/pragma-region.c
new file mode 100644
index 00000000000..8e0cbe1f16f
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/pragma-region.c
@@ -0,0 +1,11 @@
+/* { dg-options "-Wunknown-pragmas" } */
+/* { dg-final { scan-assembler "code_within_region" } } */
+/* { dg-final { scan-assembler "code_within_named_region" } } */
+
+#pragma region
+void code_within_region() { }
+#pragma endregion
+
+#pragma region ignored name
+void code_within_named_region() { }
+#pragma endregion // ignored comment
-- 
2.38.1


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] c-family: Support #pragma region/endregion [PR85487]
  2022-11-10  3:13 [PATCH] c-family: Support #pragma region/endregion [PR85487] Jonathan Wakely
@ 2022-11-11  0:01 ` Joseph Myers
  0 siblings, 0 replies; 2+ messages in thread
From: Joseph Myers @ 2022-11-11  0:01 UTC (permalink / raw)
  To: Jonathan Wakely; +Cc: gcc-patches

On Thu, 10 Nov 2022, Jonathan Wakely via Gcc-patches wrote:

> Something similar has been proposed before, but didn't get approval.
> Jeff wanted a more general framework for ignoring pragmas. It might make
> sense to do that, and reuse it for the Darwin-specific 'mark' pragmas.
> But as I said in the PR, I looked at the darwin ones and they are unique
> among all pragmas in GCC. I am not going there, sorry :-)
> 
> In the PR it was suggested that we should check for syntax errors in
> these pragmas or make sure there are matching region/endregion pairs.
> I disagree. This is a simple, low-risk patch that removes unhelpful
> warnings for users who have these macros for their editor to process. 
> It's not our business to check for correct use of these macros, their
> meaning is determined by other tools that we don't control. We should
> just not complain when we see them, and no more.
> 
> Tested powerpc64le-linux. OK for trunk?

OK.

-- 
Joseph S. Myers
joseph@codesourcery.com

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-11-11  0:01 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-10  3:13 [PATCH] c-family: Support #pragma region/endregion [PR85487] Jonathan Wakely
2022-11-11  0:01 ` Joseph Myers

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).