From patchwork Thu Feb 28 20:33:48 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Thomas Schwinge X-Patchwork-Id: 1049750 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=gcc.gnu.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=gcc-patches-return-497176-incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="pabdK29u"; dkim-atps=neutral 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 449PRB0JLGz9sMQ for ; Fri, 1 Mar 2019 07:34:12 +1100 (AEDT) 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:subject:in-reply-to:references:date:message-id:mime-version :content-type; q=dns; s=default; b=Vn0Vn4lt0VxAT3ZD+oHNLxRx8Ob4C f18LBTqLZ3VNIoz85ELA997LOlJ2xCjXrAcERDuN7PYfP8B6Zx12Whz2xQPbyjhK aANOmIqoNosvGv6pQWAGjhzhSC2CZ1WlJwcoszGjT5QqHlxvMSDAO6m2z3/uxYhK vMFgWDg3MWiijU= 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:subject:in-reply-to:references:date:message-id:mime-version :content-type; s=default; bh=ex27VaUGHbRXFYZguR4BSEf1MwQ=; b=pab dK29uYkj4rgV9WQiPXvqyOK6mXYvl21dEoOoxj3S30q8Mgw1Rr/NG+i4ddmNR6Nq b17khZDjTXVI0Kde6CI6zt/6A8BmSXG8STPPy0PMX82BPythHn30hRMVfZQj8P/p CXu6Hz2mH3fN3BiTOyFI3rUfMrbQPa+TWgWMOdgI= Received: (qmail 118314 invoked by alias); 28 Feb 2019 20:34:04 -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 118283 invoked by uid 89); 28 Feb 2019 20:34:03 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy=gang, PROGRAM, CALL, acc 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 ESMTP; Thu, 28 Feb 2019 20:34:01 +0000 Received: from svr-orw-mbx-05.mgc.mentorg.com ([147.34.90.205]) by relay1.mentorg.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-SHA384:256) id 1gzSNS-0000k4-Uw from Thomas_Schwinge@mentor.com ; Thu, 28 Feb 2019 12:33:58 -0800 Received: from svr-orw-mbx-01.mgc.mentorg.com (147.34.90.201) by SVR-ORW-MBX-05.mgc.mentorg.com (147.34.90.205) with Microsoft SMTP Server (TLS) id 15.0.1320.4; Thu, 28 Feb 2019 12:33:56 -0800 Received: from tftp-cs (147.34.91.1) by svr-orw-mbx-01.mgc.mentorg.com (147.34.90.201) with Microsoft SMTP Server id 15.0.1320.4 via Frontend Transport; Thu, 28 Feb 2019 12:33:56 -0800 Received: by tftp-cs (Postfix, from userid 49978) id 1E9EFC23D1; Thu, 28 Feb 2019 12:33:56 -0800 (PST) From: Thomas Schwinge To: , Subject: [PR72741, PR89433] Accept intrinsic symbols in Fortran OpenACC 'routine' directives In-Reply-To: <87y442ge2w.fsf@hertz.schwinge.homeip.net> References: <305d82b4-08de-fed7-b4f4-ec1c059e0ad3@codesourcery.com> <87y442ge2w.fsf@hertz.schwinge.homeip.net> User-Agent: Notmuch/0.9-125-g4686d11 (http://notmuchmail.org) Emacs/25.2.2 (x86_64-pc-linux-gnu) Date: Thu, 28 Feb 2019 21:33:48 +0100 Message-ID: <877edjodoz.fsf@euler.schwinge.homeip.net> MIME-Version: 1.0 Hi! On Fri, 12 Aug 2016 18:13:43 +0200, I wrote: > Let me actually break this out of the other pending patches; this should > be uncontroversial. Originally by Cesar, extended by me. OK for trunk? > > commit a0fee96c0f204814e87ddf6635f9cbec2afc6887 > Author: Thomas Schwinge > Date: Fri Aug 12 17:19:05 2016 +0200 > > [PR fortran/72741] Handle intrinsic functions specified in !$ACC ROUTINE ( NAME ) Re-worked a bit, and committed to trunk in r269285 "[PR72741, PR89433] Accept intrinsic symbols in Fortran OpenACC 'routine' directives", as attached. Grüße Thomas From 1d86d0eb3e7b6c3d799c91fad4bc12da572160fd Mon Sep 17 00:00:00 2001 From: tschwinge Date: Thu, 28 Feb 2019 20:31:01 +0000 Subject: [PATCH 1/3] [PR72741, PR89433] Accept intrinsic symbols in Fortran OpenACC 'routine' directives gcc/fortran/ PR fortran/72741 PR fortran/89433 * openmp.c (gfc_match_oacc_routine): Accept intrinsic symbols. gcc/testsuite/ PR fortran/72741 PR fortran/89433 * gfortran.dg/goacc/routine-6.f90: Update * gfortran.dg/goacc/routine-intrinsic-1.f: New file. * gfortran.dg/goacc/routine-intrinsic-2.f: Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@269285 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/ChangeLog | 7 ++++ gcc/fortran/openmp.c | 33 ++++++++++++++++--- gcc/testsuite/ChangeLog | 9 +++++ gcc/testsuite/gfortran.dg/goacc/routine-6.f90 | 7 ++++ .../gfortran.dg/goacc/routine-intrinsic-1.f | 21 ++++++++++++ .../gfortran.dg/goacc/routine-intrinsic-2.f | 23 +++++++++++++ 6 files changed, 95 insertions(+), 5 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/goacc/routine-intrinsic-1.f create mode 100644 gcc/testsuite/gfortran.dg/goacc/routine-intrinsic-2.f diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 85ce5bce5604..78c6324d1b83 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2019-02-28 Thomas Schwinge + Cesar Philippidis + + PR fortran/72741 + PR fortran/89433 + * openmp.c (gfc_match_oacc_routine): Accept intrinsic symbols. + 2019-02-26 Harald Anlauf PR fortran/89492 diff --git a/gcc/fortran/openmp.c b/gcc/fortran/openmp.c index dfd4be86d50e..6999ac34a1a9 100644 --- a/gcc/fortran/openmp.c +++ b/gcc/fortran/openmp.c @@ -2275,8 +2275,9 @@ match gfc_match_oacc_routine (void) { locus old_loc; - gfc_symbol *sym = NULL; match m; + gfc_intrinsic_sym *isym = NULL; + gfc_symbol *sym = NULL; gfc_omp_clauses *c = NULL; gfc_oacc_routine_name *n = NULL; @@ -2296,12 +2297,19 @@ gfc_match_oacc_routine (void) if (m == MATCH_YES) { char buffer[GFC_MAX_SYMBOL_LEN + 1]; - gfc_symtree *st; m = gfc_match_name (buffer); if (m == MATCH_YES) { - st = gfc_find_symtree (gfc_current_ns->sym_root, buffer); + gfc_symtree *st = NULL; + + /* First look for an intrinsic symbol. */ + isym = gfc_find_function (buffer); + if (!isym) + isym = gfc_find_subroutine (buffer); + /* If no intrinsic symbol found, search the current namespace. */ + if (!isym) + st = gfc_find_symtree (gfc_current_ns->sym_root, buffer); if (st) { sym = st->n.sym; @@ -2310,7 +2318,7 @@ gfc_match_oacc_routine (void) sym = NULL; } - if (st == NULL + if ((isym == NULL && st == NULL) || (sym && !sym->attr.external && !sym->attr.function @@ -2344,7 +2352,19 @@ gfc_match_oacc_routine (void) != MATCH_YES)) return MATCH_ERROR; - if (sym != NULL) + if (isym != NULL) + { + /* Diagnose any OpenACC 'routine' directive that doesn't match the + (implicit) one with a 'seq' clause. */ + if (c && (c->gang || c->worker || c->vector)) + { + gfc_error ("Intrinsic symbol specified in !$ACC ROUTINE ( NAME )" + " at %C marked with incompatible GANG, WORKER, or VECTOR" + " clause"); + goto cleanup; + } + } + else if (sym != NULL) { n = gfc_get_oacc_routine_name (); n->sym = sym; @@ -2364,6 +2384,9 @@ gfc_match_oacc_routine (void) gfc_current_ns->proc_name->attr.oacc_routine_lop = gfc_oacc_routine_lop (c); } + else + /* Something has gone wrong, possibly a syntax error. */ + goto cleanup; if (n) n->clauses = c; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 79de60324e3b..c45e7b7546a9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2019-02-28 Thomas Schwinge + Cesar Philippidis + + PR fortran/72741 + PR fortran/89433 + * gfortran.dg/goacc/routine-6.f90: Update + * gfortran.dg/goacc/routine-intrinsic-1.f: New file. + * gfortran.dg/goacc/routine-intrinsic-2.f: Likewise. + 2019-02-28 Jakub Jelinek PR c/89521 diff --git a/gcc/testsuite/gfortran.dg/goacc/routine-6.f90 b/gcc/testsuite/gfortran.dg/goacc/routine-6.f90 index 10943cff3045..0201b8d1fee5 100644 --- a/gcc/testsuite/gfortran.dg/goacc/routine-6.f90 +++ b/gcc/testsuite/gfortran.dg/goacc/routine-6.f90 @@ -1,3 +1,4 @@ +! Check for invalid syntax with !$ACC ROUTINE. module m integer m1int @@ -45,6 +46,12 @@ program main !$acc end parallel end program main +! Ensure that we recover from incomplete function definitions. + +integer function f1 ! { dg-error "Expected formal argument list in function definition" } + !$acc routine ! { dg-error "Unclassifiable OpenACC directive" } +end function f1 ! { dg-error "Expecting END PROGRAM statement" } + subroutine subr1 (x) !$acc routine integer, intent(inout) :: x diff --git a/gcc/testsuite/gfortran.dg/goacc/routine-intrinsic-1.f b/gcc/testsuite/gfortran.dg/goacc/routine-intrinsic-1.f new file mode 100644 index 000000000000..5dab573a9966 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/goacc/routine-intrinsic-1.f @@ -0,0 +1,21 @@ +! Check for valid clauses with intrinsic symbols specified in OpenACC +! 'routine' directives. + + SUBROUTINE sub_1 + IMPLICIT NONE +!$ACC ROUTINE (ABORT) +!$ACC ROUTINE (ABORT) SEQ + + CALL ABORT + END SUBROUTINE sub_1 + + MODULE m_w_1 + IMPLICIT NONE +!$ACC ROUTINE (ABORT) SEQ +!$ACC ROUTINE (ABORT) + + CONTAINS + SUBROUTINE sub_2 + CALL ABORT + END SUBROUTINE sub_2 + END MODULE m_w_1 diff --git a/gcc/testsuite/gfortran.dg/goacc/routine-intrinsic-2.f b/gcc/testsuite/gfortran.dg/goacc/routine-intrinsic-2.f new file mode 100644 index 000000000000..22524cc16451 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/goacc/routine-intrinsic-2.f @@ -0,0 +1,23 @@ +! Check for invalid clauses with intrinsic symbols specified in OpenACC +! 'routine' directives. + + SUBROUTINE sub_1 + IMPLICIT NONE +!$ACC ROUTINE (ABORT) WORKER ! { dg-error "Intrinsic symbol specified in \\!\\\$ACC ROUTINE \\( NAME \\) at \\(1\\) marked with incompatible GANG, WORKER, or VECTOR clause" } +!$ACC ROUTINE (ABORT) GANG ! { dg-error "Intrinsic symbol specified in \\!\\\$ACC ROUTINE \\( NAME \\) at \\(1\\) marked with incompatible GANG, WORKER, or VECTOR clause" } +!$ACC ROUTINE (ABORT) VECTOR ! { dg-error "Intrinsic symbol specified in \\!\\\$ACC ROUTINE \\( NAME \\) at \\(1\\) marked with incompatible GANG, WORKER, or VECTOR clause" } + + CALL ABORT + END SUBROUTINE sub_1 + + MODULE m_w_1 + IMPLICIT NONE +!$ACC ROUTINE (ABORT) VECTOR ! { dg-error "Intrinsic symbol specified in \\!\\\$ACC ROUTINE \\( NAME \\) at \\(1\\) marked with incompatible GANG, WORKER, or VECTOR clause" } +!$ACC ROUTINE (ABORT) WORKER ! { dg-error "Intrinsic symbol specified in \\!\\\$ACC ROUTINE \\( NAME \\) at \\(1\\) marked with incompatible GANG, WORKER, or VECTOR clause" } +!$ACC ROUTINE (ABORT) GANG ! { dg-error "Intrinsic symbol specified in \\!\\\$ACC ROUTINE \\( NAME \\) at \\(1\\) marked with incompatible GANG, WORKER, or VECTOR clause" } + + CONTAINS + SUBROUTINE sub_2 + CALL ABORT + END SUBROUTINE sub_2 + END MODULE m_w_1 -- 2.17.1