aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHarald Anlauf <anlauf@gmx.de>2025-05-08 22:21:03 +0200
committerHarald Anlauf <anlauf@gmx.de>2025-05-09 21:57:03 +0200
commitc60183d8265b5bd509007cf494549667c8c08faa (patch)
tree3ffc75d0992e26187a19e8439391731c7ae0ea90
parent01324ffac8bcc6813ffbc78993a674bcac7b52ab (diff)
downloadgcc-c60183d8265b5bd509007cf494549667c8c08faa.zip
gcc-c60183d8265b5bd509007cf494549667c8c08faa.tar.gz
gcc-c60183d8265b5bd509007cf494549667c8c08faa.tar.bz2
Fortran: parsing issue with DO CONCURRENT;ENDDO on same line [PR120179]
PR fortran/120179 gcc/fortran/ChangeLog: * match.cc (gfc_match_do): Do not attempt to match end-of-statement twice. gcc/testsuite/ChangeLog: * gfortran.dg/do_concurrent_basic.f90: Extend testcase. (cherry picked from commit 6ce73ad4370c143a7d1e6a13b1d353db5884213f)
-rw-r--r--gcc/fortran/match.cc3
-rw-r--r--gcc/testsuite/gfortran.dg/do_concurrent_basic.f907
2 files changed, 7 insertions, 3 deletions
diff --git a/gcc/fortran/match.cc b/gcc/fortran/match.cc
index ec9e587..0f6b8e9 100644
--- a/gcc/fortran/match.cc
+++ b/gcc/fortran/match.cc
@@ -2738,7 +2738,7 @@ gfc_match_do (void)
locus where = gfc_current_locus;
if (gfc_match_eos () == MATCH_YES)
- break;
+ goto concurr_ok;
else if (gfc_match ("local ( ") == MATCH_YES)
{
@@ -2987,6 +2987,7 @@ gfc_match_do (void)
if (gfc_match_eos () != MATCH_YES)
goto concurr_cleanup;
+concurr_ok:
if (label != NULL
&& !gfc_reference_st_label (label, ST_LABEL_DO_TARGET))
goto concurr_cleanup;
diff --git a/gcc/testsuite/gfortran.dg/do_concurrent_basic.f90 b/gcc/testsuite/gfortran.dg/do_concurrent_basic.f90
index fe8723d..bdb6e0e 100644
--- a/gcc/testsuite/gfortran.dg/do_concurrent_basic.f90
+++ b/gcc/testsuite/gfortran.dg/do_concurrent_basic.f90
@@ -1,4 +1,4 @@
-! { dg-do run }
+! { dg-do compile }
program basic_do_concurrent
implicit none
integer :: i, arr(10)
@@ -7,5 +7,8 @@ program basic_do_concurrent
arr(i) = i
end do
+ do concurrent (i=1:10);enddo
+ do,concurrent (i=1:10);arr(i)=i;enddo
+
print *, arr
-end program basic_do_concurrent \ No newline at end of file
+end program basic_do_concurrent