From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa4.mentor.iphmx.com (esa4.mentor.iphmx.com [68.232.137.252]) by sourceware.org (Postfix) with ESMTPS id E2D983959E61; Wed, 24 Feb 2021 21:57:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org E2D983959E61 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=Julian_Brown@mentor.com IronPort-SDR: DrcsT0CUGMQnfF6u6YILynSW/8oI6GgStIlrrh+ru59AQd2UsaPyBFVgS4o/PtZEylWtuXJPAm y7L9nOoM1+oirZ+J8xpVkjJoE3nA4w9/4SIIGY603sp6I68i1Wuwh23wBo3Eg16C1hoL2btChh BWgMCdB+ceFMLUDYNNih9p24FjAHMy2TsW2kKmDVb1f0vyP7PEPOOSTZi0ypapVbo5Wgut3TlO 1ICjeNJhO+noYsZXnOy9Yqfzeega/9zfFfZyGbHBH1ZmJCHbnBX7alB0EKGiS7XD0fDZnwb0nn ZZo= X-IronPort-AV: E=Sophos;i="5.81,203,1610438400"; d="scan'208";a="58597699" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa4.mentor.iphmx.com with ESMTP; 24 Feb 2021 13:57:49 -0800 IronPort-SDR: EV2c7CVcasW28rXt5sEq353WweURm79WMvisiBxG9H39HtBdckt6znOF6oy/FSA3yvzppnUWOj G7iPortJNL+yk5kCEL6L0BPrBcCt2H+4mCz35/SxML0m1HlotTHeS+uG7vt8o1jMYDIwaNYC87 PWLuNdMqMIjMZrfNQkrOSPbgqSqaveqd+sU0+WZU39wZp0mO+XIfbw4/IIBb/Mv2zqlur6cmdw 6c9zGyKI0pdxdacTd8N8z8MZQ335yV9Fiu7lKhlgGrB3KSgzTG+69mrcd0fmpZ7RDGaBBStaOq SYA= From: Julian Brown To: CC: , Tobias Burnus Subject: [PATCH 4/7] [og10] Fortran: OpenMP/OpenACC diagnose substring rejections better Date: Wed, 24 Feb 2021 13:57:25 -0800 Message-ID: <20210224215726.129681-5-julian@codesourcery.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210224215726.129681-1-julian@codesourcery.com> References: <20210224215726.129681-1-julian@codesourcery.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: SVR-IES-MBX-07.mgc.mentorg.com (139.181.222.7) To svr-ies-mbx-01.mgc.mentorg.com (139.181.222.1) X-Spam-Status: No, score=-12.0 required=5.0 tests=BAYES_00, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: fortran@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Fortran mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 24 Feb 2021 21:57:53 -0000 From: Tobias Burnus gcc/fortran/ChangeLog: * openmp.c (resolve_omp_clauses): Explicitly diagnose substrings as not permitted. gcc/testsuite/ChangeLog: * gfortran.dg/goacc/substring.f90: New test. * gfortran.dg/gomp/substring.f90: New test. (cherry picked from commit f0e618faeb619ec02dabbef203a5575fca44a7f7) --- gcc/fortran/ChangeLog.omp | 7 +++++ gcc/fortran/openmp.c | 8 +++++- gcc/testsuite/ChangeLog.omp | 7 +++++ gcc/testsuite/gfortran.dg/goacc/substring.f90 | 27 +++++++++++++++++++ gcc/testsuite/gfortran.dg/gomp/substring.f90 | 22 +++++++++++++++ 5 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/goacc/substring.f90 create mode 100644 gcc/testsuite/gfortran.dg/gomp/substring.f90 diff --git a/gcc/fortran/ChangeLog.omp b/gcc/fortran/ChangeLog.omp index 2dd82a70cb71..09c2bb855c88 100644 --- a/gcc/fortran/ChangeLog.omp +++ b/gcc/fortran/ChangeLog.omp @@ -1,3 +1,10 @@ +2021-02-24 Tobias Burnus + + Backport from mainline + + * openmp.c (resolve_omp_clauses): Explicitly diagnose + substrings as not permitted. + 2021-02-24 Julian Brown Backport from mainline diff --git a/gcc/fortran/openmp.c b/gcc/fortran/openmp.c index 61a340d7f396..a7592f0545d9 100644 --- a/gcc/fortran/openmp.c +++ b/gcc/fortran/openmp.c @@ -4978,7 +4978,13 @@ resolve_omp_clauses (gfc_code *code, gfc_omp_clauses *omp_clauses, || (n->expr && (!resolved || n->expr->expr_type != EXPR_VARIABLE))) { - if (!resolved + if (array_ref + && (array_ref->type == REF_SUBSTRING + || (array_ref->next + && array_ref->next->type == REF_SUBSTRING))) + gfc_error ("Unexpected substring reference in %s clause " + "at %L", name, &n->where); + else if (!resolved || n->expr->expr_type != EXPR_VARIABLE || array_ref->next || array_ref->type != REF_ARRAY) diff --git a/gcc/testsuite/ChangeLog.omp b/gcc/testsuite/ChangeLog.omp index e04a4ee3ebff..d012e9e75b4e 100644 --- a/gcc/testsuite/ChangeLog.omp +++ b/gcc/testsuite/ChangeLog.omp @@ -1,3 +1,10 @@ +2021-02-24 Tobias Burnus + + Backport from mainline + + * gfortran.dg/goacc/substring.f90: New test. + * gfortran.dg/gomp/substring.f90: New test. + 2021-02-24 Julian Brown Backport from mainline diff --git a/gcc/testsuite/gfortran.dg/goacc/substring.f90 b/gcc/testsuite/gfortran.dg/goacc/substring.f90 new file mode 100644 index 000000000000..25031daddf33 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/goacc/substring.f90 @@ -0,0 +1,27 @@ +implicit none +character(len=10) :: str1, str2(5,5) + +type t + character(len=10) :: str1, str2(5,5) +end type t +type(t) :: v + +!$acc enter data copyin(v%str1) ! OK +!$acc enter data copyin(v%str2) ! OK +!$acc enter data copyin(v%str2(1,2)) ! OK +!$acc enter data copyin(str1) ! OK +!$acc enter data copyin(str2) ! OK +!$acc enter data copyin(str2(1,2)) ! OK + +!$acc enter data copyin(v%str1(2:5)) ! { dg-error "Unexpected substring reference in MAP clause" } +!$acc enter data copyin(v%str2(1,2)(2:4)) ! { dg-error "Unexpected substring reference in MAP clause" } +!$acc enter data copyin(str1(2:5)) ! { dg-error "Unexpected substring reference in MAP clause" } +!$acc enter data copyin(str2(1,2)(2:4)) ! { dg-error "Unexpected substring reference in MAP clause" } + +!$acc parallel +!$acc update host(v%str1(2:5)) ! { dg-error "Unexpected substring reference in MAP clause" } +!$acc update host(v%str2(1,2)(2:4)) ! { dg-error "Unexpected substring reference in MAP clause" } +!$acc update host(str1(2:5)) ! { dg-error "Unexpected substring reference in MAP clause" } +!$acc update host(str2(1,2)(2:4)) ! { dg-error "Unexpected substring reference in MAP clause" } +!$acc end parallel +end diff --git a/gcc/testsuite/gfortran.dg/gomp/substring.f90 b/gcc/testsuite/gfortran.dg/gomp/substring.f90 new file mode 100644 index 000000000000..23d7fb7e48ab --- /dev/null +++ b/gcc/testsuite/gfortran.dg/gomp/substring.f90 @@ -0,0 +1,22 @@ +implicit none +character(len=10) :: str1, str2(5,5) + +type t + character(len=10) :: str1, str2(5,5) +end type t +type(t) :: v + +!$omp target enter data map(to: str1) ! OK +!$omp target enter data map(to: str2) ! OK +!$omp target enter data map(to: str2(2,5)) ! OK + +!$omp target enter data map(to: str1(2,5)) ! { dg-error "Syntax error in OpenMP variable list" } +!$omp target enter data map(to: str2(1,2)(2:4)) ! { dg-error "Unexpected substring reference in MAP clause" } + +!$omp target enter data map(to: v%str1) ! OK +!$omp target enter data map(to: v%str2) ! OK +!$omp target enter data map(to: v%str2(1,2)) ! OK + +!$omp target enter data map(to: v%str1(2:5)) ! { dg-error "Unexpected substring reference in MAP clause" } +!$omp target enter data map(to: v%str2(1,2)(2:4)) ! { dg-error "Unexpected substring reference in MAP clause" } +end -- 2.29.2