Hi Anuj, thanks for your work!
I am unable to apply the patch, so I only looked at the testcases. Generally speaking, runtime tests should verify that they work as expected. Just printing a result does not. Use a comparison against an expected result and do e.g. STOP 123 on failure. Also, never use -std=gnu in the options; -std=gnu is the default, and its behavior may change any time. If you want to test something that is enabled at F2023, please use -std=f2023. Also, -std=gnu is meant to enable a GNU extension, but DO CONCURRENT is not an extension but defined in the Fortran standard. For details on my comments see below. Thanks, Harald Am 22.09.24 um 08:19 schrieb Anuj Mohite:
diff --git a/gcc/testsuite/gfortran.dg/do_concurrent_10.f90 b/gcc/testsuite/gfortran.dg/do_concurrent_10.f90 new file mode 100644 index 00000000000..6bbeb3bc990 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/do_concurrent_10.f90 @@ -0,0 +1,11 @@ +! { dg-do compile } +! { dg-options "-std=f2018" } + +program do_concurrent_parsing + implicit none + integer :: concurrent, do + do concurrent = 1, 5 + end do + do concurrent = 1, 5
^^^ should this be 'do' instead of 'concurrent'?
+ end do +end program do_concurrent_parsing
diff --git a/gcc/testsuite/gfortran.dg/do_concurrent_8_f2023.f90 b/gcc/testsuite/gfortran.dg/do_concurrent_8_f2023.f90 new file mode 100644 index 00000000000..a99d81e4a5c --- /dev/null +++ b/gcc/testsuite/gfortran.dg/do_concurrent_8_f2023.f90 @@ -0,0 +1,23 @@ +! { dg-do compile } +! { dg-options "-std=gnu" }
^^^ here you want -std=f2023
+program do_concurrent_complex + implicit none + integer :: i, j, k, sum, product + integer, dimension(10,10,10) :: array + sum = 0 + product = 1 + do concurrent (i = 1:10) local(j) shared(sum) reduce(+:sum) + ! { dg-error "Variable .sum. at .1. has already been specified in a locality-spec" "" { target *-*-* } .-1 } + ! { dg-error "Sorry, LOCAL and LOCAL_INIT are not yet supported for 'do concurrent' constructs" "" { target *-*-* } .-2 } + do concurrent (j = 1:10) local(k) shared(product) reduce(*:product) + ! { dg-error "Variable .product. at .1. has already been specified in a locality-spec" "" { target *-*-* } .-1 } + ! { dg-error "Sorry, LOCAL and LOCAL_INIT are not yet supported for 'do concurrent' constructs" "" { target *-*-* } .-2 } + do concurrent (k = 1:10) + array(i,j,k) = i * j * k + sum = sum + array(i,j,k) + product = product * array(i,j,k) + end do + end do + end do + print *, sum, product +end program do_concurrent_complex \ No newline at end of file
diff --git a/gcc/testsuite/gfortran.dg/do_concurrent_basic.f90 b/gcc/testsuite/gfortran.dg/do_concurrent_basic.f90 new file mode 100644 index 00000000000..fe8723d48b4 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/do_concurrent_basic.f90 @@ -0,0 +1,11 @@ +! { dg-do run } +program basic_do_concurrent + implicit none + integer :: i, arr(10) + + do concurrent (i = 1:10) + arr(i) = i + end do + + print *, arr +end program basic_do_concurrent \ No newline at end of file
^^^ this testcase does neither test the result, nor does it provide anything beyond existing tests. Consider dropping it.
diff --git a/gcc/testsuite/gfortran.dg/do_concurrent_multiple_reduce.f90 b/gcc/testsuite/gfortran.dg/do_concurrent_multiple_reduce.f90 new file mode 100644 index 00000000000..47c71492107 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/do_concurrent_multiple_reduce.f90 @@ -0,0 +1,17 @@ +! { dg-do compile } +program do_concurrent_multiple_reduce + implicit none + integer :: i, arr(10), sum, product + sum = 0 + product = 1 + + do concurrent (i = 1:10) reduce(+:sum) reduce(*:product) + arr(i) = i + sum = sum + i + product = product * i + end do + + print *, arr + print *, "Sum:", sum + print *, "Product:", product
^^^ please verify results!
+end program do_concurrent_multiple_reduce \ No newline at end of file
diff --git a/gcc/testsuite/gfortran.dg/do_concurrent_nested.f90 b/gcc/testsuite/gfortran.dg/do_concurrent_nested.f90 new file mode 100644 index 00000000000..83b9cdbc04f --- /dev/null +++ b/gcc/testsuite/gfortran.dg/do_concurrent_nested.f90 @@ -0,0 +1,26 @@ +! { dg-do compile } +program nested_do_concurrent + implicit none + integer :: i, j, x(10, 10) + integer :: total_sum + + total_sum = 0 + + ! Outer loop remains DO CONCURRENT + do concurrent (i = 1:10) + ! Inner loop changed to regular DO loop + do j = 1, 10 + x(i, j) = i * j + end do + end do + + ! Separate loops for summation + do i = 1, 10 + do j = 1, 10 + total_sum = total_sum + x(i, j) + end do + end do + + print *, "Total sum:", total_sum + print *, "Array:", x
^^^ please verify results!
+end program nested_do_concurrent \ No newline at end of file
diff --git a/gcc/testsuite/gfortran.dg/do_concurrent_reduce_max.f90 b/gcc/testsuite/gfortran.dg/do_concurrent_reduce_max.f90 new file mode 100644 index 00000000000..ddf9626da7b --- /dev/null +++ b/gcc/testsuite/gfortran.dg/do_concurrent_reduce_max.f90 @@ -0,0 +1,14 @@ +! { dg-do compile } +program do_concurrent_reduce_max + implicit none + integer :: i, arr(10), max_val + max_val = 0 + + do concurrent (i = 1:10) reduce(max:max_val) + arr(i) = i * i + max_val = max(max_val, arr(i)) + end do + + print *, arr + print *, "Max value:", max_val
^^^ please verify results!
+end program do_concurrent_reduce_max \ No newline at end of file
diff --git a/gcc/testsuite/gfortran.dg/do_concurrent_reduce_sum.f90 b/gcc/testsuite/gfortran.dg/do_concurrent_reduce_sum.f90 new file mode 100644 index 00000000000..1165e0c5243 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/do_concurrent_reduce_sum.f90 @@ -0,0 +1,14 @@ +! { dg-do compile } +program do_concurrent_reduce_sum + implicit none + integer :: i, arr(10), sum + sum = 0 + + do concurrent (i = 1:10) reduce(+:sum) + arr(i) = i + sum = sum + i + end do + + print *, arr + print *, "Sum:", sum
^^^ please verify results!
+end program do_concurrent_reduce_sum \ No newline at end of file
diff --git a/gcc/testsuite/gfortran.dg/do_concurrent_shared.f90 b/gcc/testsuite/gfortran.dg/do_concurrent_shared.f90 new file mode 100644 index 00000000000..6e3dd1c883d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/do_concurrent_shared.f90 @@ -0,0 +1,14 @@ +! { dg-do compile } +program do_concurrent_shared + implicit none + integer :: i, arr(10), sum + sum = 0 + + do concurrent (i = 1:10) shared(sum) + arr(i) = i + sum = sum + i + end do + + print *, arr + print *, "Sum:", sum
^^^ please verify results!
+end program do_concurrent_shared \ No newline at end of file