Fixed fortran mail-list address. Sorry for inconvenience. 08.06.2015, 00:01, "Ilmir Usmanov" <m...@ilmir.us>: > Hi Cesar! > > This patch fixes checks of OpenMP and OpenACC continuations in case if > someone mixes them (i.e. continues OpenMP directive with !$ACC sentinel or > vice versa). > > OK for gomp branch? > > -- > Ilmir.
-- Ilmir.
From 5492bf5bc991b6924f5e3b35c11eeaed745df073 Mon Sep 17 00:00:00 2001 From: Ilmir Usmanov <i.usma...@samsung.com> Date: Sun, 7 Jun 2015 23:55:22 +0300 Subject: [PATCH] Fix mix of OpenACC and OpenMP sentinels in continuation --- gcc/fortran/ChangeLog | 5 +++++ gcc/fortran/scanner.c | 28 ++++++++++++++++++++++++---- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/goacc/omp.f95 | 8 ++++++++ 4 files changed, 42 insertions(+), 4 deletions(-) diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 67f9e09..f61e0e9 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2015-06-07 Ilmir Usmanov <m...@ilmir.us> + + * scanner.c (gfc_next_char_literal): Fix mix of OpenACC and OpenMP + sentinels in continuation. + 2015-05-05 David Malcolm <dmalc...@redhat.com> * expr.c (check_inquiry): Fix indentation so that it reflects the diff --git a/gcc/fortran/scanner.c b/gcc/fortran/scanner.c index f0e6404..5af4eea 100644 --- a/gcc/fortran/scanner.c +++ b/gcc/fortran/scanner.c @@ -1331,7 +1331,7 @@ restart: continue_line = gfc_linebuf_linenum (gfc_current_locus.lb); if (flag_openmp) - if (prev_openmp_flag != openmp_flag) + if (prev_openmp_flag != openmp_flag && !openacc_flag) { gfc_current_locus = old_loc; openmp_flag = prev_openmp_flag; @@ -1340,7 +1340,7 @@ restart: } if (flag_openacc) - if (prev_openacc_flag != openacc_flag) + if (prev_openacc_flag != openacc_flag && !openmp_flag) { gfc_current_locus = old_loc; openacc_flag = prev_openacc_flag; @@ -1359,7 +1359,7 @@ restart: while (gfc_is_whitespace (c)) c = next_char (); - if (openmp_flag) + if (openmp_flag && !openacc_flag) { for (i = 0; i < 5; i++, c = next_char ()) { @@ -1370,7 +1370,7 @@ restart: while (gfc_is_whitespace (c)) c = next_char (); } - if (openacc_flag) + if (openacc_flag && !openmp_flag) { for (i = 0; i < 5; i++, c = next_char ()) { @@ -1382,6 +1382,26 @@ restart: c = next_char (); } + /* In case we have an OpenMP directive continued by OpenACC + sentinel, or vice versa, we get both openmp_flag and + openacc_flag on. */ + + if (openacc_flag && openmp_flag) + { + int is_openmp = 0; + for (i = 0; i < 5; i++, c = next_char ()) + { + if (gfc_wide_tolower (c) != (unsigned char) "!$acc"[i]) + is_openmp = 1; + if (i == 4) + old_loc = gfc_current_locus; + } + gfc_error ("Wrong %s continuation at %C: expected %s, got %s", + is_openmp ? "OpenACC" : "OpenMP", + is_openmp ? "!$ACC" : "!$OMP", + is_openmp ? "!$OMP" : "!$ACC"); + } + if (c != '&') { if (in_string) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7c4781c..05a9a52 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-06-07 Ilmir Usmanov <m...@ilmir.us> + + * gfortran.dg/goacc/omp.f95: Add mix of OpenACC and OpenMP + sentinels in continuation to test. + 2015-05-06 Yvan Roux <yvan.r...@linaro.org> PR target/64208 diff --git a/gcc/testsuite/gfortran.dg/goacc/omp.f95 b/gcc/testsuite/gfortran.dg/goacc/omp.f95 index 24f639f..a7333eb 100644 --- a/gcc/testsuite/gfortran.dg/goacc/omp.f95 +++ b/gcc/testsuite/gfortran.dg/goacc/omp.f95 @@ -63,4 +63,12 @@ contains !$omp end parallel !$acc end data end subroutine roku + + subroutine nana + !$acc parallel & + !$omp do ! { dg-error "Wrong OpenACC continuation" } + + !$omp parallel & + !$acc loop ! { dg-error "Wrong OpenMP continuation" } + end subroutine nana end module test \ No newline at end of file -- 1.9.1