public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc/devel/omp/gcc-11] Fortran: Add OpenMP's nothing directive support
@ 2021-08-18 14:11 Tobias Burnus
  0 siblings, 0 replies; only message in thread
From: Tobias Burnus @ 2021-08-18 14:11 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:2d81c6dfa6fd7895e056ce9590ce059833ee80e1

commit 2d81c6dfa6fd7895e056ce9590ce059833ee80e1
Author: Tobias Burnus <tobias@codesourcery.com>
Date:   Wed Aug 18 15:27:06 2021 +0200

    Fortran: Add OpenMP's nothing directive support
    
    Fortran version of commit 5079b7781a2c506dcdfb241347d74c7891268225
    
    gcc/fortran/ChangeLog:
    
            * match.h (gfc_match_omp_nothing): New.
            * openmp.c (gfc_match_omp_nothing): New.
            * parse.c (decode_omp_directive): Match 'nothing' directive.
    
    gcc/testsuite/ChangeLog:
    
            * gfortran.dg/nothing-1.f90: New test.
            * gfortran.dg/nothing-2.f90: New test.
    
    (cherry picked from commit f74433e70ae94a3b5291e45fea488b1cfdee4a34)

Diff:
---
 gcc/fortran/ChangeLog.omp               |  9 +++++++++
 gcc/fortran/match.h                     |  1 +
 gcc/fortran/openmp.c                    | 11 +++++++++++
 gcc/fortran/parse.c                     |  3 +++
 gcc/testsuite/ChangeLog.omp             |  8 ++++++++
 gcc/testsuite/gfortran.dg/nothing-1.f90 | 28 ++++++++++++++++++++++++++++
 gcc/testsuite/gfortran.dg/nothing-2.f90 |  7 +++++++
 7 files changed, 67 insertions(+)

diff --git a/gcc/fortran/ChangeLog.omp b/gcc/fortran/ChangeLog.omp
index 53456078b65..7db917878d9 100644
--- a/gcc/fortran/ChangeLog.omp
+++ b/gcc/fortran/ChangeLog.omp
@@ -1,3 +1,12 @@
+2021-08-18  Tobias Burnus  <tobias@codesourcery.com>
+
+	Backported from master:
+	2021-08-18  Tobias Burnus  <tobias@codesourcery.com>
+
+	* match.h (gfc_match_omp_nothing): New.
+	* openmp.c (gfc_match_omp_nothing): New.
+	* parse.c (decode_omp_directive): Match 'nothing' directive.
+
 2021-08-17  Tobias Burnus  <tobias@codesourcery.com>
 
 	Backported from master:
diff --git a/gcc/fortran/match.h b/gcc/fortran/match.h
index aac16a8d3d0..5127b4b8ea3 100644
--- a/gcc/fortran/match.h
+++ b/gcc/fortran/match.h
@@ -175,6 +175,7 @@ match gfc_match_omp_masked_taskloop_simd (void);
 match gfc_match_omp_master (void);
 match gfc_match_omp_master_taskloop (void);
 match gfc_match_omp_master_taskloop_simd (void);
+match gfc_match_omp_nothing (void);
 match gfc_match_omp_ordered (void);
 match gfc_match_omp_ordered_depend (void);
 match gfc_match_omp_parallel (void);
diff --git a/gcc/fortran/openmp.c b/gcc/fortran/openmp.c
index 4cd95f56818..420f4f16e13 100644
--- a/gcc/fortran/openmp.c
+++ b/gcc/fortran/openmp.c
@@ -4786,6 +4786,17 @@ gfc_match_omp_ordered (void)
   return match_omp (EXEC_OMP_ORDERED, OMP_ORDERED_CLAUSES);
 }
 
+match
+gfc_match_omp_nothing (void)
+{
+  if (gfc_match_omp_eos () != MATCH_YES)
+    {
+      gfc_error ("Unexpected junk after $OMP NOTHING statement at %C");
+      return MATCH_ERROR;
+    }
+  /* Will use ST_NONE; therefore, no EXEC_OMP_ is needed.  */
+  return MATCH_YES;
+}
 
 match
 gfc_match_omp_ordered_depend (void)
diff --git a/gcc/fortran/parse.c b/gcc/fortran/parse.c
index c7cb590ae29..1f8bcc61678 100644
--- a/gcc/fortran/parse.c
+++ b/gcc/fortran/parse.c
@@ -1007,6 +1007,9 @@ decode_omp_directive (void)
 	      ST_OMP_MASTER_TASKLOOP);
       matcho ("master", gfc_match_omp_master, ST_OMP_MASTER);
       break;
+    case 'n':
+      matcho ("nothing", gfc_match_omp_nothing, ST_NONE);
+      break;
     case 'l':
       matcho ("loop", gfc_match_omp_loop, ST_OMP_LOOP);
       break;
diff --git a/gcc/testsuite/ChangeLog.omp b/gcc/testsuite/ChangeLog.omp
index 27c518d2c83..1a3c8e65783 100644
--- a/gcc/testsuite/ChangeLog.omp
+++ b/gcc/testsuite/ChangeLog.omp
@@ -1,3 +1,11 @@
+2021-08-18  Tobias Burnus  <tobias@codesourcery.com>
+
+	Backported from master:
+	2021-08-18  Tobias Burnus  <tobias@codesourcery.com>
+
+	* gfortran.dg/nothing-1.f90: New test.
+	* gfortran.dg/nothing-2.f90: New test.
+
 2021-08-18  Tobias Burnus  <tobias@codesourcery.com>
 
 	Backported from master:
diff --git a/gcc/testsuite/gfortran.dg/nothing-1.f90 b/gcc/testsuite/gfortran.dg/nothing-1.f90
new file mode 100644
index 00000000000..9fc24d4bd6c
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/nothing-1.f90
@@ -0,0 +1,28 @@
+module m
+  implicit none (type, external)
+  !$omp nothing
+
+  type t
+    !$omp nothing
+    integer s
+  end type
+
+contains
+
+integer function foo (i)
+  integer :: i
+
+  !$omp nothing
+  if (.false.) &
+& &    !$omp nothing
+    i = i + 1
+
+! In the following, '& & !$' is not a valid OpenMP sentinel and,
+! hence, the line is regarded as comment
+  if (.false.) &
+&   & !$omp nothing
+    then
+  end if
+  foo = i
+end
+end module
diff --git a/gcc/testsuite/gfortran.dg/nothing-2.f90 b/gcc/testsuite/gfortran.dg/nothing-2.f90
new file mode 100644
index 00000000000..74a4a5a22b0
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/nothing-2.f90
@@ -0,0 +1,7 @@
+pure subroutine foo
+  !$omp nothing  ! { dg-error "OpenMP directives other than SIMD or DECLARE TARGET at .1. may not appear in PURE procedures" }
+end subroutine
+
+subroutine bar
+  !$omp nothing foo  ! { dg-error "Unexpected junk after $OMP NOTHING statement" }
+end


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-08-18 14:11 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-18 14:11 [gcc/devel/omp/gcc-11] Fortran: Add OpenMP's nothing directive support Tobias Burnus

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).