From patchwork Wed Jun 29 09:20:42 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Thomas Schwinge X-Patchwork-Id: 641939 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3rfcbz2vhfz9t0n for ; Wed, 29 Jun 2016 19:21:03 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b=jTIaa2nn; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:in-reply-to:references:date:message-id :mime-version:content-type:content-transfer-encoding; q=dns; s= default; b=rMjMv2KM7dw7RvEFEHjxFl5+yEMTAcG0LYwAVuDsRwmPxfpO1Odlj 8yhCj/w/BvqrAUA+JQ/3nIjITiz+vWbhkvpsmMlMqrI/4xDyjanUquR9ZbRsLbpi 0NqT7PKaOd5CIEe5rjiR63RIB58XTTnk8o/Bhz3VbtUxMVyOLPFzQc= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:in-reply-to:references:date:message-id :mime-version:content-type:content-transfer-encoding; s=default; bh=8l3VrZpD1mTgmev2okAzuS6c4pg=; b=jTIaa2nnYvm+zNvYXz/i/nDeixvw eWOI8cGnOIMPbN+ZBJmx7914fv6F4KSrjO+WTo+xFYZvZwwXGXgykP4+Mknx75xr 7A9OTRknh75K8v5RzfYbdet7jaKBAKCdCErCsiM9jSkdH2mpjWXH7qNiGGWt5DOw l/QUN97HYY1Pelc= Received: (qmail 126387 invoked by alias); 29 Jun 2016 09:20:54 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 126372 invoked by uid 89); 29 Jun 2016 09:20:53 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.5 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_NONE, SPF_PASS, UNWANTED_LANGUAGE_BODY autolearn=ham version=3.3.2 spammy= X-HELO: relay1.mentorg.com Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Wed, 29 Jun 2016 09:20:47 +0000 Received: from nat-ies.mentorg.com ([192.94.31.2] helo=SVR-IES-FEM-01.mgc.mentorg.com) by relay1.mentorg.com with esmtp id 1bIBfo-0004Yq-Rx from Thomas_Schwinge@mentor.com ; Wed, 29 Jun 2016 02:20:45 -0700 Received: from hertz.schwinge.homeip.net (137.202.0.76) by SVR-IES-FEM-01.mgc.mentorg.com (137.202.0.104) with Microsoft SMTP Server id 14.3.224.2; Wed, 29 Jun 2016 10:20:43 +0100 From: Thomas Schwinge To: Jakub Jelinek , CC: Subject: Re: Improve diagnostic messages of "#pragma omp cancel", "#pragma omp cancellation point" parsing (was: Clarify PRAGMA_OACC_* and PRAGMA_OMP_*) In-Reply-To: <20160628122528.GZ7387@tucnak.redhat.com> References: <8737nxpl3v.fsf@hertz.schwinge.homeip.net> <87wpl9o69q.fsf@hertz.schwinge.homeip.net> <20160628122528.GZ7387@tucnak.redhat.com> User-Agent: Notmuch/0.9-101-g81dad07 (http://notmuchmail.org) Emacs/24.4.1 (x86_64-pc-linux-gnu) Date: Wed, 29 Jun 2016 11:20:42 +0200 Message-ID: <87oa6knyfp.fsf@hertz.schwinge.homeip.net> MIME-Version: 1.0 Hi! On Tue, 28 Jun 2016 14:25:28 +0200, Jakub Jelinek wrote: > On Tue, Jun 28, 2016 at 02:19:13PM +0200, Thomas Schwinge wrote: > > [...] > > > > OK for trunk? > > This LGTM if you tweak it to apply without the previous patch or with just > a patch for PRAGMA_OMP_DECLARE. > > Thanks. Committed in r237843: commit 44e775d8fa59d9732f2a10106c3f37e9e3224daa Author: tschwinge Date: Wed Jun 29 09:08:04 2016 +0000 Improve diagnostic messages of "#pragma omp cancel", "#pragma omp cancellation point" parsing gcc/c/ * c-parser.c (c_parser_pragma) : Move pragma context checking into... (c_parser_omp_cancellation_point): ... here, and improve diagnostic messages. * c-typeck.c (c_finish_omp_cancel) (c_finish_omp_cancellation_point): Improve diagnostic messages. gcc/cp/ * parser.c (cp_parser_pragma) : Move pragma context checking into... (cp_parser_omp_cancellation_point): ... here, and improve diagnostic messages. * semantics.c (finish_omp_cancel, finish_omp_cancellation_point): Improve diagnostic messages. gcc/testsuite/ * c-c++-common/gomp/cancel-1.c: Extend. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@237843 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/c/ChangeLog | 9 ++++++++ gcc/c/c-parser.c | 24 +++++++++++++--------- gcc/c/c-typeck.c | 4 ++-- gcc/cp/ChangeLog | 9 ++++++++ gcc/cp/parser.c | 33 +++++++++++++++--------------- gcc/cp/semantics.c | 4 ++-- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/c-c++-common/gomp/cancel-1.c | 15 ++++++++++++++ 8 files changed, 72 insertions(+), 30 deletions(-) Grüße Thomas diff --git gcc/c/ChangeLog gcc/c/ChangeLog index df73934..7bd112b 100644 --- gcc/c/ChangeLog +++ gcc/c/ChangeLog @@ -1,3 +1,12 @@ +2016-06-29 Thomas Schwinge + + * c-parser.c (c_parser_pragma) : + Move pragma context checking into... + (c_parser_omp_cancellation_point): ... here, and improve + diagnostic messages. + * c-typeck.c (c_finish_omp_cancel) + (c_finish_omp_cancellation_point): Improve diagnostic messages. + 2016-06-29 Jakub Jelinek PR c/71685 diff --git gcc/c/c-parser.c gcc/c/c-parser.c index 1d2dac7..1a50dea 100644 --- gcc/c/c-parser.c +++ gcc/c/c-parser.c @@ -1358,11 +1358,11 @@ static tree c_parser_omp_for_loop (location_t, c_parser *, enum tree_code, static void c_parser_omp_taskwait (c_parser *); static void c_parser_omp_taskyield (c_parser *); static void c_parser_omp_cancel (c_parser *); -static void c_parser_omp_cancellation_point (c_parser *); enum pragma_context { pragma_external, pragma_struct, pragma_param, pragma_stmt, pragma_compound }; static bool c_parser_pragma (c_parser *, enum pragma_context, bool *); +static void c_parser_omp_cancellation_point (c_parser *, enum pragma_context); static bool c_parser_omp_target (c_parser *, enum pragma_context, bool *); static void c_parser_omp_end_declare_target (c_parser *); static void c_parser_omp_declare (c_parser *, enum pragma_context); @@ -10187,14 +10187,7 @@ c_parser_pragma (c_parser *parser, enum pragma_context context, bool *if_p) return false; case PRAGMA_OMP_CANCELLATION_POINT: - if (context != pragma_compound) - { - if (context == pragma_stmt) - c_parser_error (parser, "%<#pragma omp cancellation point%> may " - "only be used in compound statements"); - goto bad_stmt; - } - c_parser_omp_cancellation_point (parser); + c_parser_omp_cancellation_point (parser, context); return false; case PRAGMA_OMP_THREADPRIVATE: @@ -15668,7 +15661,7 @@ c_parser_omp_cancel (c_parser *parser) | (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_TASKGROUP)) static void -c_parser_omp_cancellation_point (c_parser *parser) +c_parser_omp_cancellation_point (c_parser *parser, enum pragma_context context) { location_t loc = c_parser_peek_token (parser)->location; tree clauses; @@ -15691,6 +15684,17 @@ c_parser_omp_cancellation_point (c_parser *parser) return; } + if (context != pragma_compound) + { + if (context == pragma_stmt) + error_at (loc, "%<#pragma omp cancellation point%> may only be used in" + " compound statements"); + else + c_parser_error (parser, "expected declaration specifiers"); + c_parser_skip_to_pragma_eol (parser, false); + return; + } + clauses = c_parser_omp_all_clauses (parser, OMP_CANCELLATION_POINT_CLAUSE_MASK, "#pragma omp cancellation point"); diff --git gcc/c/c-typeck.c gcc/c/c-typeck.c index 56268fc..b2435de 100644 --- gcc/c/c-typeck.c +++ gcc/c/c-typeck.c @@ -11933,7 +11933,7 @@ c_finish_omp_cancel (location_t loc, tree clauses) mask = 8; else { - error_at (loc, "%<#pragma omp cancel must specify one of " + error_at (loc, "%<#pragma omp cancel%> must specify one of " "%, %, % or % " "clauses"); return; @@ -11972,7 +11972,7 @@ c_finish_omp_cancellation_point (location_t loc, tree clauses) mask = 8; else { - error_at (loc, "%<#pragma omp cancellation point must specify one of " + error_at (loc, "%<#pragma omp cancellation point%> must specify one of " "%, %, % or % " "clauses"); return; diff --git gcc/cp/ChangeLog gcc/cp/ChangeLog index 76b86a4..327391b 100644 --- gcc/cp/ChangeLog +++ gcc/cp/ChangeLog @@ -1,3 +1,12 @@ +2016-06-29 Thomas Schwinge + + * parser.c (cp_parser_pragma) : + Move pragma context checking into... + (cp_parser_omp_cancellation_point): ... here, and improve + diagnostic messages. + * semantics.c (finish_omp_cancel, finish_omp_cancellation_point): + Improve diagnostic messages. + 2016-06-28 Jakub Jelinek * Make-lang.in: Don't cat ../stage_current if it does not exist. diff --git gcc/cp/parser.c gcc/cp/parser.c index 739fca0..3e8270e 100644 --- gcc/cp/parser.c +++ gcc/cp/parser.c @@ -34395,7 +34395,8 @@ cp_parser_omp_cancel (cp_parser *parser, cp_token *pragma_tok) | (OMP_CLAUSE_MASK_1 << PRAGMA_OMP_CLAUSE_TASKGROUP)) static void -cp_parser_omp_cancellation_point (cp_parser *parser, cp_token *pragma_tok) +cp_parser_omp_cancellation_point (cp_parser *parser, cp_token *pragma_tok, + enum pragma_context context) { tree clauses; bool point_seen = false; @@ -34414,7 +34415,19 @@ cp_parser_omp_cancellation_point (cp_parser *parser, cp_token *pragma_tok) if (!point_seen) { cp_parser_error (parser, "expected %"); - cp_parser_require_pragma_eol (parser, pragma_tok); + cp_parser_skip_to_pragma_eol (parser, pragma_tok); + return; + } + + if (context != pragma_compound) + { + if (context == pragma_stmt) + error_at (pragma_tok->location, + "%<#pragma omp cancellation point%> may only be used in" + " compound statements"); + else + cp_parser_error (parser, "expected declaration specifiers"); + cp_parser_skip_to_pragma_eol (parser, pragma_tok); return; } @@ -37291,20 +37304,8 @@ cp_parser_pragma (cp_parser *parser, enum pragma_context context, bool *if_p) break; case PRAGMA_OMP_CANCELLATION_POINT: - switch (context) - { - case pragma_compound: - cp_parser_omp_cancellation_point (parser, pragma_tok); - return false; - case pragma_stmt: - error_at (pragma_tok->location, - "%<#pragma omp cancellation point%> may only be " - "used in compound statements"); - break; - default: - goto bad_stmt; - } - break; + cp_parser_omp_cancellation_point (parser, pragma_tok, context); + return false; case PRAGMA_OMP_THREADPRIVATE: cp_parser_omp_threadprivate (parser, pragma_tok); diff --git gcc/cp/semantics.c gcc/cp/semantics.c index fa4698e..d1fb119 100644 --- gcc/cp/semantics.c +++ gcc/cp/semantics.c @@ -8571,7 +8571,7 @@ finish_omp_cancel (tree clauses) mask = 8; else { - error ("%<#pragma omp cancel must specify one of " + error ("%<#pragma omp cancel%> must specify one of " "%, %, % or % clauses"); return; } @@ -8608,7 +8608,7 @@ finish_omp_cancellation_point (tree clauses) mask = 8; else { - error ("%<#pragma omp cancellation point must specify one of " + error ("%<#pragma omp cancellation point%> must specify one of " "%, %, % or % clauses"); return; } diff --git gcc/testsuite/ChangeLog gcc/testsuite/ChangeLog index c1c9a31..bc85add 100644 --- gcc/testsuite/ChangeLog +++ gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2016-06-29 Thomas Schwinge + + * c-c++-common/gomp/cancel-1.c: Extend. + 2016-06-29 Jakub Jelinek PR tree-optimization/71625 diff --git gcc/testsuite/c-c++-common/gomp/cancel-1.c gcc/testsuite/c-c++-common/gomp/cancel-1.c index 896a768..d26fcf1 100644 --- gcc/testsuite/c-c++-common/gomp/cancel-1.c +++ gcc/testsuite/c-c++-common/gomp/cancel-1.c @@ -455,3 +455,18 @@ f3 (void) } } } + +#pragma omp cancellation point /* { dg-error "expected declaration specifiers before end of line" } */ + +void +f4 (void) +{ + if (0) +#pragma omp cancellation EKAHI /* { dg-error "expected .point. before .EKAHI." } */ + ; +#pragma omp cancellation HO OKAHI /* { dg-error "expected .point. before .HO." } */ + if (0) +#pragma omp cancellation point /* { dg-error ".pragma omp cancellation point. may only be used in compound statements" } */ + ; +#pragma omp cancellation point /* { dg-error ".pragma omp cancellation point. must specify one of" } */ +}