https://gcc.gnu.org/g:c60183d8265b5bd509007cf494549667c8c08faa
commit r15-9646-gc60183d8265b5bd509007cf494549667c8c08faa Author: Harald Anlauf <anl...@gmx.de> Date: Thu May 8 22:21:03 2025 +0200 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) Diff: --- gcc/fortran/match.cc | 3 ++- gcc/testsuite/gfortran.dg/do_concurrent_basic.f90 | 7 +++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/gcc/fortran/match.cc b/gcc/fortran/match.cc index ec9e5873204a..0f6b8e95ad72 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 fe8723d48b4c..bdb6e0e6fe21 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