OpenMP: Document ompx warnings + add Fortran omx warning [PR106670]

omp/ompx sentinels are for vendor extensions; as they might be required for
the correctness of the program, a warning should be printable. This patch
documents in the OpenMP 5.2 table the existing warnings, including the new
warning for for fixed source form Fortran.

	PR fortran/106670

gcc/fortran/ChangeLog:

	* scanner.cc (skip_fixed_omp_sentinel): Add -Wsurprising warning
	for 'omx' sentinels with -fopenmp.
	* invoke.texi (-Wsurprising): Document additional warning case.

libgomp/ChangeLog:

	* libgomp.texi (OpenMP 5.2): Add comment to ompx/omx entry.

gcc/testsuite/ChangeLog:

	* c-c++-common/gomp/ompx-1.c: New test.
	* c-c++-common/gomp/ompx-2.c: New test.
	* g++.dg/gomp/ompx-attrs-1.C: New test.
	* gfortran.dg/gomp/ompx-1.f90: New test.
	* gfortran.dg/gomp/omx-1.f: New test.
	* gfortran.dg/gomp/omx-2.f: New test.
This commit is contained in:
Tobias Burnus
2022-09-08 21:03:21 +02:00
parent 4f05ff34d6
commit 264deecb16
9 changed files with 52 additions and 3 deletions
+5
View File
@@ -1092,6 +1092,11 @@ The type of a function result is declared more than once with the same type. If
@item
A @code{CHARACTER} variable is declared with negative length.
@item
With @option{-fopenmp}, for fixed-form source code, when an @code{omx}
vendor-extension sentinel is encountered. (The equivalent @code{ompx},
used in free-form source code, is diagnosed by default.)
@end itemize
@item -Wtabs
+6 -2
View File
@@ -982,8 +982,9 @@ static bool
skip_fixed_omp_sentinel (locus *start)
{
gfc_char_t c;
if (((c = next_char ()) == 'm' || c == 'M')
&& ((c = next_char ()) == 'p' || c == 'P'))
if ((c = next_char ()) != 'm' && c != 'M')
return false;
if ((c = next_char ()) == 'p' || c == 'P')
{
c = next_char ();
if (c != '\n'
@@ -1005,6 +1006,9 @@ skip_fixed_omp_sentinel (locus *start)
}
}
}
else if (UNLIKELY (c == 'x' || c == 'X'))
gfc_warning_now (OPT_Wsurprising,
"Ignoring '!$omx' vendor-extension sentinel at %C");
return false;
}
+4
View File
@@ -0,0 +1,4 @@
void f(void)
{
#pragma ompx some_vendor_extension
}
+5
View File
@@ -0,0 +1,5 @@
/* { dg-additional-options "-Wunknown-pragmas" } */
void f(void)
{
#pragma ompx some_vendor_extension /* { dg-warning "-:ignoring '#pragma ompx some_vendor_extension'" } */
}
+7
View File
@@ -0,0 +1,7 @@
// { dg-do compile { target c++11 } }
void
foo ()
{
[[ompx::directive(some_vendor_extension)]]; /* { dg-warning "attributes at the beginning of statement are ignored" } */
}
@@ -0,0 +1,2 @@
!$ompx foo ! { dg-warning "!.OMP at .1. starts a commented line as it neither is followed by a space nor is a continuation line" }
end
+7
View File
@@ -0,0 +1,7 @@
!$omx foo
!$OMX foo
c$oMx foo
c$OMx foo
*$oMx foo
*$OMx foo
end
+9
View File
@@ -0,0 +1,9 @@
! { dg-additional-options "-Wsurprising" }
!$omx foo ! { dg-warning "Ignoring '!.omx' vendor-extension sentinel" }
!$OMX foo ! { dg-warning "Ignoring '!.omx' vendor-extension sentinel" }
c$oMx foo ! { dg-warning "Ignoring '!.omx' vendor-extension sentinel" }
c$OMx foo ! { dg-warning "Ignoring '!.omx' vendor-extension sentinel" }
*$oMx foo ! { dg-warning "Ignoring '!.omx' vendor-extension sentinel" }
*$OMx foo ! { dg-warning "Ignoring '!.omx' vendor-extension sentinel" }
end
+7 -1
View File
@@ -361,7 +361,13 @@ to address of matching mapped list item per 5.1, Sect. 2.21.7.2 @tab N @tab
@item @code{omp_in_explicit_task} routine and @emph{implicit-task-var} ICV
@tab N @tab
@item @code{omp}/@code{ompx}/@code{omx} sentinels and @code{omp_}/@code{ompx_}
namespaces @tab N/A @tab
namespaces @tab N/A
@tab warning for @code{omp/ompx} sentinels@footnote{@code{omp/ompx}
sentinels as C/C++ pragma and C++ attributes are warned for with
@code{-Wunknown-pragmas} (implied by @code{-Wall}) and @code{-Wattributes}
(enabled by default), respectively; for Fortran free-source code, there is
a warning enabled by default and for fixed-source code with
@code{-Wsurprising} (enabled by @code{-Wall})}
@item Clauses on @code{end} directive can be on directive @tab N @tab
@item Deprecation of no-argument @code{destroy} clause on @code{depobj}
@tab N @tab