aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Schwinge <thomas@codesourcery.com>2014-03-07 09:46:13 +0100
committerThomas Schwinge <tschwinge@gcc.gnu.org>2014-03-07 09:46:13 +0100
commitb17a8b072f2c577d42e5ea4a5ca7d5ff63ec0a41 (patch)
tree7d413f5734b66913e2660f80e881b95d7e0499ef
parentc5604b48f91fa510171faf5a6e9d4138799186f1 (diff)
downloadgcc-b17a8b072f2c577d42e5ea4a5ca7d5ff63ec0a41.zip
gcc-b17a8b072f2c577d42e5ea4a5ca7d5ff63ec0a41.tar.gz
gcc-b17a8b072f2c577d42e5ea4a5ca7d5ff63ec0a41.tar.bz2
The error_mark_node is not an OpenMP mappable type.
gcc/ * langhooks.c (lhd_omp_mappable_type): The error_mark_node is not an OpenMP mappable type. gcc/c/ * c-decl.c (c_decl_attributes): Use lang_hooks.types.omp_mappable_type. * c-typeck.c (c_finish_omp_clauses): Likewise. gcc/testsuite/ * c-c++-common/gomp/map-1.c: Extend. From-SVN: r208394
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/c/ChangeLog6
-rw-r--r--gcc/c/c-decl.c2
-rw-r--r--gcc/c/c-typeck.c8
-rw-r--r--gcc/langhooks.c8
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/c-c++-common/gomp/map-1.c6
7 files changed, 31 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 14eba5d..177cda8 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2014-03-07 Thomas Schwinge <thomas@codesourcery.com>
+
+ * langhooks.c (lhd_omp_mappable_type): The error_mark_node is not
+ an OpenMP mappable type.
+
2014-03-06 Matthias Klose <doko@ubuntu.com>
* Makefile.in (s-mlib): Only pass MULTIARCH_DIRNAME if
diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog
index e9d25d5..9d854a7 100644
--- a/gcc/c/ChangeLog
+++ b/gcc/c/ChangeLog
@@ -1,3 +1,9 @@
+2014-03-07 Thomas Schwinge <thomas@codesourcery.com>
+
+ * c-decl.c (c_decl_attributes): Use
+ lang_hooks.types.omp_mappable_type.
+ * c-typeck.c (c_finish_omp_clauses): Likewise.
+
2014-03-06 Marek Polacek <polacek@redhat.com>
PR c/60197
diff --git a/gcc/c/c-decl.c b/gcc/c/c-decl.c
index 7a7d68e..2c41bf2 100644
--- a/gcc/c/c-decl.c
+++ b/gcc/c/c-decl.c
@@ -4024,7 +4024,7 @@ c_decl_attributes (tree *node, tree attributes, int flags)
error ("%q+D in block scope inside of declare target directive",
*node);
else if (TREE_CODE (*node) == VAR_DECL
- && !COMPLETE_TYPE_P (TREE_TYPE (*node)))
+ && !lang_hooks.types.omp_mappable_type (TREE_TYPE (*node)))
error ("%q+D in declare target directive does not have mappable type",
*node);
else
diff --git a/gcc/c/c-typeck.c b/gcc/c/c-typeck.c
index 7c4ba0e..524a59f 100644
--- a/gcc/c/c-typeck.c
+++ b/gcc/c/c-typeck.c
@@ -12032,7 +12032,7 @@ c_finish_omp_clauses (tree clauses)
else
{
t = OMP_CLAUSE_DECL (c);
- if (!COMPLETE_TYPE_P (TREE_TYPE (t)))
+ if (!lang_hooks.types.omp_mappable_type (TREE_TYPE (t)))
{
error_at (OMP_CLAUSE_LOCATION (c),
"array section does not have mappable type "
@@ -12061,9 +12061,9 @@ c_finish_omp_clauses (tree clauses)
}
else if (!c_mark_addressable (t))
remove = true;
- else if (!COMPLETE_TYPE_P (TREE_TYPE (t))
- && !(OMP_CLAUSE_CODE (c) == OMP_CLAUSE_MAP
- && OMP_CLAUSE_MAP_KIND (c) == OMP_CLAUSE_MAP_POINTER))
+ else if (!(OMP_CLAUSE_CODE (c) == OMP_CLAUSE_MAP
+ && OMP_CLAUSE_MAP_KIND (c) == OMP_CLAUSE_MAP_POINTER)
+ && !lang_hooks.types.omp_mappable_type (TREE_TYPE (t)))
{
error_at (OMP_CLAUSE_LOCATION (c),
"%qD does not have a mappable type in %qs clause", t,
diff --git a/gcc/langhooks.c b/gcc/langhooks.c
index eca0299..d00ebd8 100644
--- a/gcc/langhooks.c
+++ b/gcc/langhooks.c
@@ -524,13 +524,15 @@ lhd_omp_firstprivatize_type_sizes (struct gimplify_omp_ctx *c ATTRIBUTE_UNUSED,
{
}
-/* Return true if TYPE is an OpenMP mappable type. By default return true
- if type is complete. */
+/* Return true if TYPE is an OpenMP mappable type. */
bool
lhd_omp_mappable_type (tree type)
{
- return COMPLETE_TYPE_P (type);
+ /* Mappable type has to be complete. */
+ if (type == error_mark_node || !COMPLETE_TYPE_P (type))
+ return false;
+ return true;
}
/* Common function for add_builtin_function and
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index fe4a19b..642abab 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2014-03-07 Thomas Schwinge <thomas@codesourcery.com>
+
+ * c-c++-common/gomp/map-1.c: Extend.
+
2014-03-06 Paul Thomas <pault@gcc.gnu.org>
Janus Weil <janus@gcc.gnu.org>
diff --git a/gcc/testsuite/c-c++-common/gomp/map-1.c b/gcc/testsuite/c-c++-common/gomp/map-1.c
index 694d88c..5dad7d6 100644
--- a/gcc/testsuite/c-c++-common/gomp/map-1.c
+++ b/gcc/testsuite/c-c++-common/gomp/map-1.c
@@ -8,6 +8,8 @@ int k[10], l[10], m[10], n[10], o;
int *p;
int **q;
int r[4][4][4][4][4];
+extern struct s s1;
+extern struct s s2[1]; /* { dg-error "array type has incomplete element type" "" { target c } } */
int t[10];
#pragma omp threadprivate (t)
#pragma omp declare target
@@ -32,6 +34,10 @@ foo (int g[3][10], int h[4][8], int i[2][10], int j[][9],
;
#pragma omp target map(to: o[2:5]) /* { dg-error "does not have pointer or array type" } */
;
+ #pragma omp target map(alloc: s1) /* { dg-error "'s1' does not have a mappable type in 'map' clause" } */
+ ;
+ #pragma omp target map(alloc: s2) /* { dg-error "'s2' does not have a mappable type in 'map' clause" } */
+ ;
#pragma omp target map(to: a[:][:]) /* { dg-error "array type length expression must be specified" } */
bar (&a[0][0]); /* { dg-error "referenced in target region does not have a mappable type" } */
#pragma omp target map(tofrom: b[-1:]) /* { dg-error "negative low bound in array section" } */