aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/scanner.c
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@golang.org>2021-09-13 10:37:49 -0700
committerIan Lance Taylor <iant@golang.org>2021-09-13 10:37:49 -0700
commite252b51ccde010cbd2a146485d8045103cd99533 (patch)
treee060f101cdc32bf5e520de8e5275db9d4236b74c /gcc/fortran/scanner.c
parentf10c7c4596dda99d2ee872c995ae4aeda65adbdf (diff)
parent104c05c5284b7822d770ee51a7d91946c7e56d50 (diff)
downloadgcc-e252b51ccde010cbd2a146485d8045103cd99533.zip
gcc-e252b51ccde010cbd2a146485d8045103cd99533.tar.gz
gcc-e252b51ccde010cbd2a146485d8045103cd99533.tar.bz2
Merge from trunk revision 104c05c5284b7822d770ee51a7d91946c7e56d50.
Diffstat (limited to 'gcc/fortran/scanner.c')
-rw-r--r--gcc/fortran/scanner.c35
1 files changed, 23 insertions, 12 deletions
diff --git a/gcc/fortran/scanner.c b/gcc/fortran/scanner.c
index 74c5461..39db099 100644
--- a/gcc/fortran/scanner.c
+++ b/gcc/fortran/scanner.c
@@ -942,6 +942,8 @@ skip_fixed_omp_sentinel (locus *start)
&& (continue_flag
|| c == ' ' || c == '\t' || c == '0'))
{
+ if (c == ' ' || c == '\t' || c == '0')
+ openacc_flag = 0;
do
c = next_char ();
while (gfc_is_whitespace (c));
@@ -971,6 +973,8 @@ skip_fixed_oacc_sentinel (locus *start)
&& (continue_flag
|| c == ' ' || c == '\t' || c == '0'))
{
+ if (c == ' ' || c == '\t' || c == '0')
+ openmp_flag = 0;
do
c = next_char ();
while (gfc_is_whitespace (c));
@@ -1205,6 +1209,7 @@ gfc_skip_comments (void)
gfc_char_t
gfc_next_char_literal (gfc_instring in_string)
{
+ static locus omp_acc_err_loc = {};
locus old_loc;
int i, prev_openmp_flag, prev_openacc_flag;
gfc_char_t c;
@@ -1403,14 +1408,16 @@ restart:
{
if (gfc_wide_tolower (c) != (unsigned char) "!$acc"[i])
is_openmp = 1;
- if (i == 4)
- old_loc = gfc_current_locus;
}
- gfc_error (is_openmp
- ? G_("Wrong OpenACC continuation at %C: "
- "expected !$ACC, got !$OMP")
- : G_("Wrong OpenMP continuation at %C: "
- "expected !$OMP, got !$ACC"));
+ if (omp_acc_err_loc.nextc != gfc_current_locus.nextc
+ || omp_acc_err_loc.lb != gfc_current_locus.lb)
+ gfc_error_now (is_openmp
+ ? G_("Wrong OpenACC continuation at %C: "
+ "expected !$ACC, got !$OMP")
+ : G_("Wrong OpenMP continuation at %C: "
+ "expected !$OMP, got !$ACC"));
+ omp_acc_err_loc = gfc_current_locus;
+ goto not_continuation;
}
if (c != '&')
@@ -1511,11 +1518,15 @@ restart:
if (gfc_wide_tolower (c) != (unsigned char) "*$acc"[i])
is_openmp = 1;
}
- gfc_error (is_openmp
- ? G_("Wrong OpenACC continuation at %C: "
- "expected !$ACC, got !$OMP")
- : G_("Wrong OpenMP continuation at %C: "
- "expected !$OMP, got !$ACC"));
+ if (omp_acc_err_loc.nextc != gfc_current_locus.nextc
+ || omp_acc_err_loc.lb != gfc_current_locus.lb)
+ gfc_error_now (is_openmp
+ ? G_("Wrong OpenACC continuation at %C: "
+ "expected !$ACC, got !$OMP")
+ : G_("Wrong OpenMP continuation at %C: "
+ "expected !$OMP, got !$ACC"));
+ omp_acc_err_loc = gfc_current_locus;
+ goto not_continuation;
}
else if (!openmp_flag && !openacc_flag)
for (i = 0; i < 5; i++)