From patchwork Fri Mar 18 13:15:11 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Tobias Burnus X-Patchwork-Id: 1607001 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=) Received: from sourceware.org (ip-8-43-85-97.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4KKkzJ1pDXz9s1l for ; Sat, 19 Mar 2022 00:15:54 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 1B893388982B for ; Fri, 18 Mar 2022 13:15:52 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from esa3.mentor.iphmx.com (esa3.mentor.iphmx.com [68.232.137.180]) by sourceware.org (Postfix) with ESMTPS id C870F3858D3C; Fri, 18 Mar 2022 13:15:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org C870F3858D3C Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com X-IronPort-AV: E=Sophos;i="5.90,192,1643702400"; d="diff'?scan'208";a="73160959" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa3.mentor.iphmx.com with ESMTP; 18 Mar 2022 05:15:19 -0800 IronPort-SDR: BHoLI+AJAlNaT8Iv351QSsPG7XUPkTj1v2rvfSrBe0Xve8H9aVJzEXDJgBWYlqS+qV3HMjoNGc y9BfZGCXv8MG2lfFJ1hjVIkx0WpJI5+leOVw5hS1M1B3h0VQU1D7AsD9de11EF7/BAApZfcECq MyG1vE1f5qdeGiwFw1hgEmwK/UJkP+Gwo0tydG5dYqi+/4hw+SCL9DJF6kO4P7i3/SEqCBFksp s+jwzJviW3ccuIBUL/lXdhlsRKKunrWh98i1Db6lucWNoVrL8xcNMTDPNTlSV+Uy6xiCeqp4lR zqE= Message-ID: <51e942e2-b8f9-5f35-9a92-bc29e9d06bd5@codesourcery.com> Date: Fri, 18 Mar 2022 14:15:11 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.7.0 Content-Language: en-US To: Jakub Jelinek , gcc-patches , fortran From: Tobias Burnus Subject: [Patch] Fortran/OpenMP: Improve associate-name diagnostic [PR103039] X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-10.mgc.mentorg.com (139.181.222.10) To svr-ies-mbx-01.mgc.mentorg.com (139.181.222.1) X-Spam-Status: No, score=-11.5 required=5.0 tests=BAYES_00, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, SPF_HELO_PASS, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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: , Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org Sender: "Gcc-patches" This patch addresses a side issue found when looking at PR103039. Namely instead of printing: 55 | !$omp parallel firstprivate(tt) | 1 Error: ASSOCIATE name ‘__tmp_INTEGER_4’ in FIRSTPRIVATE clause at (1) With the patch, the error is: Error: Associate name ‘tt’ in FIRSTPRIVATE clause at (1) That is: It prints the proper name and it uses 'associate name' matching the Fortran standard – and takes into account that an associate name not only used with ASSOCIATE but also with SELECT TYPE, SELECT RANK, and (untested) CHANGE TEAMS. OK for mainline? Tobias ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955 Fortran/OpenMP: Improve associate-name diagnostic [PR103039] gcc/fortran/ChangeLog: PR fortran/103039 * openmp.cc (resolve_omp_clauses): Improve associate-name diagnostic for select type/rank. gcc/testsuite/ChangeLog: PR fortran/103039 * gfortran.dg/gomp/associate1.f90: Update dg-error. * gfortran.dg/gomp/associate2.f90: New test. gcc/fortran/openmp.cc | 12 +++-- gcc/testsuite/gfortran.dg/gomp/associate1.f90 | 40 +++++++------- gcc/testsuite/gfortran.dg/gomp/associate2.f90 | 76 +++++++++++++++++++++++++++ 3 files changed, 104 insertions(+), 24 deletions(-) diff --git a/gcc/fortran/openmp.cc b/gcc/fortran/openmp.cc index 16cd03a3d67..714148138c2 100644 --- a/gcc/fortran/openmp.cc +++ b/gcc/fortran/openmp.cc @@ -6782,8 +6782,10 @@ resolve_omp_clauses (gfc_code *code, gfc_omp_clauses *omp_clauses, gfc_error ("Cray pointee %qs in SHARED clause at %L", n->sym->name, &n->where); if (n->sym->attr.associate_var) - gfc_error ("ASSOCIATE name %qs in SHARED clause at %L", - n->sym->name, &n->where); + gfc_error ("Associate name %qs in SHARED clause at %L", + n->sym->attr.select_type_temporary + ? n->sym->assoc->target->symtree->n.sym->name + : n->sym->name, &n->where); if (omp_clauses->detach && n->sym == omp_clauses->detach->symtree->n.sym) gfc_error ("DETACH event handle %qs in SHARED clause at %L", @@ -7163,8 +7165,10 @@ resolve_omp_clauses (gfc_code *code, gfc_omp_clauses *omp_clauses, gfc_error ("Cray pointee %qs in %s clause at %L", n->sym->name, name, &n->where); if (n->sym->attr.associate_var) - gfc_error ("ASSOCIATE name %qs in %s clause at %L", - n->sym->name, name, &n->where); + gfc_error ("Associate name %qs in %s clause at %L", + n->sym->attr.select_type_temporary + ? n->sym->assoc->target->symtree->n.sym->name + : n->sym->name, name, &n->where); if (list != OMP_LIST_PRIVATE && is_reduction) { if (n->sym->attr.proc_pointer) diff --git a/gcc/testsuite/gfortran.dg/gomp/associate1.f90 b/gcc/testsuite/gfortran.dg/gomp/associate1.f90 index abc5ae95a0d..a44099e005f 100644 --- a/gcc/testsuite/gfortran.dg/gomp/associate1.f90 +++ b/gcc/testsuite/gfortran.dg/gomp/associate1.f90 @@ -16,65 +16,65 @@ program associate1 j = 2 associate(k => v, l => a(i, j), m => a(i, :)) associate(n => b(j)%c(:, :)%i, o => a, p => b) -!$omp parallel shared (l) ! { dg-error "ASSOCIATE name" } +!$omp parallel shared (l) ! { dg-error "Associate name" } !$omp end parallel -!$omp parallel firstprivate (m) ! { dg-error "ASSOCIATE name" } +!$omp parallel firstprivate (m) ! { dg-error "Associate name" } !$omp end parallel -!$omp parallel reduction (+: k) ! { dg-error "ASSOCIATE name" } +!$omp parallel reduction (+: k) ! { dg-error "Associate name" } !$omp end parallel -!$omp parallel do firstprivate (k) ! { dg-error "ASSOCIATE name" } +!$omp parallel do firstprivate (k) ! { dg-error "Associate name" } do i = 1, 10 end do -!$omp parallel do lastprivate (n) ! { dg-error "ASSOCIATE name" } +!$omp parallel do lastprivate (n) ! { dg-error "Associate name" } do i = 1, 10 end do -!$omp parallel do private (o) ! { dg-error "ASSOCIATE name" } +!$omp parallel do private (o) ! { dg-error "Associate name" } do i = 1, 10 end do -!$omp parallel do shared (p) ! { dg-error "ASSOCIATE name" } +!$omp parallel do shared (p) ! { dg-error "Associate name" } do i = 1, 10 end do -!$omp task private (k) ! { dg-error "ASSOCIATE name" } +!$omp task private (k) ! { dg-error "Associate name" } !$omp end task -!$omp task shared (l) ! { dg-error "ASSOCIATE name" } +!$omp task shared (l) ! { dg-error "Associate name" } !$omp end task -!$omp task firstprivate (m) ! { dg-error "ASSOCIATE name" } +!$omp task firstprivate (m) ! { dg-error "Associate name" } !$omp end task -!$omp do private (l) ! { dg-error "ASSOCIATE name" } +!$omp do private (l) ! { dg-error "Associate name" } do i = 1, 10 end do -!$omp do reduction (*: k) ! { dg-error "ASSOCIATE name" } +!$omp do reduction (*: k) ! { dg-error "Associate name" } do i = 1, 10 end do -!$omp sections private(o) ! { dg-error "ASSOCIATE name" } +!$omp sections private(o) ! { dg-error "Associate name" } !$omp section !$omp section !$omp end sections -!$omp parallel sections firstprivate(p) ! { dg-error "ASSOCIATE name" } +!$omp parallel sections firstprivate(p) ! { dg-error "Associate name" } !$omp section !$omp section !$omp endparallelsections -!$omp parallelsections lastprivate(m) ! { dg-error "ASSOCIATE name" } +!$omp parallelsections lastprivate(m) ! { dg-error "Associate name" } !$omp section !$omp section !$omp endparallelsections -!$omp sections reduction(+:k) ! { dg-error "ASSOCIATE name" } +!$omp sections reduction(+:k) ! { dg-error "Associate name" } !$omp section !$omp section !$omp end sections -!$omp simd private (l) ! { dg-error "ASSOCIATE name" } +!$omp simd private (l) ! { dg-error "Associate name" } do i = 1, 10 end do k = 1 -!$omp simd lastprivate (m) ! { dg-error "ASSOCIATE name" } +!$omp simd lastprivate (m) ! { dg-error "Associate name" } do i = 1, 10 end do k = 1 -!$omp simd reduction (+: k) ! { dg-error "ASSOCIATE name" } +!$omp simd reduction (+: k) ! { dg-error "Associate name" } do i = 1, 10 end do k = 1 -!$omp simd linear (k : 2) ! { dg-error "ASSOCIATE name" } +!$omp simd linear (k : 2) ! { dg-error "Associate name" } do i = 1, 10 k = k + 2 end do diff --git a/gcc/testsuite/gfortran.dg/gomp/associate2.f90 b/gcc/testsuite/gfortran.dg/gomp/associate2.f90 new file mode 100644 index 00000000000..d4e97cb0ed2 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/gomp/associate2.f90 @@ -0,0 +1,76 @@ +! { dg-do compile } +! +! PR fortran/103039 +! + +subroutine shared_test(cc, ar) +implicit none +class(*) :: cc +integer :: ar(..) + +associate(aa => cc) + !$omp parallel shared(aa) ! { dg-error "Associate name 'aa' in SHARED clause" } + !$omp end parallel +end associate + +select type(tt => cc) + type is (integer) + !$omp parallel shared(tt) ! { dg-error "Associate name 'tt' in SHARED clause" } + !$omp end parallel +end select + +select type(cc) + type is (integer) + !$omp parallel shared(cc) ! { dg-error "Associate name 'cc' in SHARED clause" } + !$omp end parallel +end select + +select rank(rr => ar) + rank(1) + !$omp parallel shared(rr) ! { dg-error "Associate name 'rr' in SHARED clause" } + !$omp end parallel +end select + +select rank(ar) + rank(1) + !$omp parallel shared(ar) ! { dg-error "Associate name 'ar' in SHARED clause" } + !$omp end parallel +end select +end + + + +subroutine firstprivate_test(cc, ar) +implicit none +class(*) :: cc +integer :: ar(..) + +associate(aa => cc) + !$omp parallel firstprivate(aa) ! { dg-error "Associate name 'aa' in FIRSTPRIVATE clause" } + !$omp end parallel +end associate + +select type(tt => cc) + type is (integer) + !$omp parallel firstprivate(tt) ! { dg-error "Associate name 'tt' in FIRSTPRIVATE clause" } + !$omp end parallel +end select + +select type(cc) + type is (integer) + !$omp parallel firstprivate(cc) ! { dg-error "Associate name 'cc' in FIRSTPRIVATE clause" } + !$omp end parallel +end select + +select rank(rr => ar) + rank(1) + !$omp parallel firstprivate(rr) ! { dg-error "Associate name 'rr' in FIRSTPRIVATE clause" } + !$omp end parallel +end select + +select rank(ar) + rank(1) + !$omp parallel firstprivate(ar) ! { dg-error "Associate name 'ar' in FIRSTPRIVATE clause" } + !$omp end parallel +end select +end