From patchwork Thu Nov 10 03:13:45 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jonathan Wakely X-Patchwork-Id: 17931 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:6687:0:0:0:0:0 with SMTP id l7csp698543wru; Wed, 9 Nov 2022 19:14:34 -0800 (PST) X-Google-Smtp-Source: AMsMyM4BxIq0LdQJiItzYC0FN8Y39ZmbuCw+KZyPGb390w17UxGk2sUTxL6snWbDQ8qqO30pQN53 X-Received: by 2002:a17:907:b15:b0:7a7:19a3:e9e7 with SMTP id h21-20020a1709070b1500b007a719a3e9e7mr58311680ejl.361.1668050074583; Wed, 09 Nov 2022 19:14:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1668050074; cv=none; d=google.com; s=arc-20160816; b=JafvcyPshD3fg1zNQ1NKK1c3caWdzYGbxeXffAEhiNz5a3I/25iqmO2cL5xM/c09eB NHG1okAyzRYRbCqjDUyYMOLkdxe0logBgmK7trIA+dXngrjnKxJALMvoVfsBVMggVkNC rfiW5FYqwIpoOjNX/Bw5gQF/yJxdyDFTQtm3bnsytEuLXr7jGlMaWpokGeZe2rSvpj2X nqOLxjHAni2zRlJbD0O9qeVgGB9sSLjo4d9io390RBNnodv8saElRqapGWgll+l+bgX+ G0HKMlLTdvfUNftiy+nWFjzlu5HG3ssDAZHwQPb52VZlkfar4Gj2L+NWSbEPD5q/YjsG xjiA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:from:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence :content-transfer-encoding:mime-version:message-id:date:subject:to :dmarc-filter:delivered-to:dkim-signature:dkim-filter; bh=gV15Yjyxu9zmPD8vvAUsworyg9kqAGalDPKkxRRdozQ=; b=YR+sWVCvN16RgC2WtRPS/++yUJKxxGjSdURh1YjcudDx8QRMt8lzrRDD5OYweC9gix CMW6p0fFbNnxwkbKzQ+PWFNSqqlQMbrg4+JC+MadmsrJOyKSgdGmzVH9igZtBeLMg6Fm QbYcVk71u0pNwlOxFJZvoioHEigP1rqTwRpzHgCNBqei/1ozYQoqZgRunr3G5Lqyk+7p SaHVbAKuZmSCyODte8DtqyX/4+yBvOMK12TlTBVTbY3Brq7oMB9xeauZOXDrdYaDCFml Xlp5UEYBJwSQT9wZ4D+EW+ND7EOAXrKgD37H1WTweFP8dBIIJQypEK/8kJUA/QUksREr Xa+g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=jJGRvECK; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id dn15-20020a17090794cf00b0077d854aa10dsi19202017ejc.57.2022.11.09.19.14.34 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 09 Nov 2022 19:14:34 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=jJGRvECK; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 660E53858D35 for ; Thu, 10 Nov 2022 03:14:33 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 660E53858D35 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1668050073; bh=gV15Yjyxu9zmPD8vvAUsworyg9kqAGalDPKkxRRdozQ=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=jJGRvECK1/wTT1uztHvV3yJYHIEvtYI9ex7mkh5w817WrmvSM1A5BbApPP34LfqdK At/7aqxOAU1wwQ6M2Y/iSLysHUZTfhlJz9f4ucJW24lZqGhZEZ+5VSgGbQTrrAU/v7 RTeaklRistKf1njEjYw44J7HOPxtPYye5S8Z6lHw= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 697DC3858D28 for ; Thu, 10 Nov 2022 03:13:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 697DC3858D28 Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-84-eXK8F31lPQ-l9g7DQMsr6Q-1; Wed, 09 Nov 2022 22:13:46 -0500 X-MC-Unique: eXK8F31lPQ-l9g7DQMsr6Q-1 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.rdu2.redhat.com [10.11.54.3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 80ECC85A5A6 for ; Thu, 10 Nov 2022 03:13:46 +0000 (UTC) Received: from localhost (unknown [10.33.36.199]) by smtp.corp.redhat.com (Postfix) with ESMTP id 4BB4E112131B for ; Thu, 10 Nov 2022 03:13:46 +0000 (UTC) To: gcc-patches@gcc.gnu.org Subject: [PATCH] c-family: Support #pragma region/endregion [PR85487] Date: Thu, 10 Nov 2022 03:13:45 +0000 Message-Id: <20221110031345.193991-1-jwakely@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.3 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-11.8 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Jonathan Wakely via Gcc-patches From: Jonathan Wakely Reply-To: Jonathan Wakely Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1749077274817060637?= X-GMAIL-MSGID: =?utf-8?q?1749077274817060637?= 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