Commit 79943d19 by Jakub Jelinek Committed by Jakub Jelinek

re PR fortran/44536 (OMP: missing error with default(none))

	PR fortran/44536
	* langhooks.h (struct lang_hooks_for_decls): Add omp_report_decl.
	* langhooks-def.h (LANG_HOOKS_OMP_REPORT_DECL): Define.
	(LANG_HOOKS_DECLS): Add it.
	* gimplify.c (omp_notice_variable): Call
	lang_hooks.decls.omp_report_decl.

	* trans-openmp.c (gfc_omp_predetermined_sharing): Don't return
	OMP_CLAUSE_DEFAULT_SHARED for artificial vars with
	GFC_DECL_SAVED_DESCRIPTOR set.
	(gfc_omp_report_decl): New function.
	* trans.h (gfc_omp_report_decl): New prototype.
	* f95-lang.c (LANG_HOOKS_OMP_REPORT_DECL): Redefine.

	* gfortran.dg/gomp/pr44536.f90: New test.
	* gfortran.dg/gomp/sharing-3.f90: Remove xfail.

From-SVN: r160779
parent eed5f58a
2010-06-15 Jakub Jelinek <jakub@redhat.com>
PR fortran/44536
* langhooks.h (struct lang_hooks_for_decls): Add omp_report_decl.
* langhooks-def.h (LANG_HOOKS_OMP_REPORT_DECL): Define.
(LANG_HOOKS_DECLS): Add it.
* gimplify.c (omp_notice_variable): Call
lang_hooks.decls.omp_report_decl.
2010-06-15 Martin Jambor <mjambor@suse.cz> 2010-06-15 Martin Jambor <mjambor@suse.cz>
PR lto/44464 PR lto/44464
......
2010-06-15 Jakub Jelinek <jakub@redhat.com>
PR fortran/44536
* trans-openmp.c (gfc_omp_predetermined_sharing): Don't return
OMP_CLAUSE_DEFAULT_SHARED for artificial vars with
GFC_DECL_SAVED_DESCRIPTOR set.
(gfc_omp_report_decl): New function.
* trans.h (gfc_omp_report_decl): New prototype.
* f95-lang.c (LANG_HOOKS_OMP_REPORT_DECL): Redefine.
2010-06-13 Daniel Franke <franke.daniel@gmail.com> 2010-06-13 Daniel Franke <franke.daniel@gmail.com>
PR fortran/31588 PR fortran/31588
......
...@@ -111,6 +111,7 @@ static void gfc_init_ts (void); ...@@ -111,6 +111,7 @@ static void gfc_init_ts (void);
#undef LANG_HOOKS_INIT_TS #undef LANG_HOOKS_INIT_TS
#undef LANG_HOOKS_OMP_PRIVATIZE_BY_REFERENCE #undef LANG_HOOKS_OMP_PRIVATIZE_BY_REFERENCE
#undef LANG_HOOKS_OMP_PREDETERMINED_SHARING #undef LANG_HOOKS_OMP_PREDETERMINED_SHARING
#undef LANG_HOOKS_OMP_REPORT_DECL
#undef LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR #undef LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR
#undef LANG_HOOKS_OMP_CLAUSE_COPY_CTOR #undef LANG_HOOKS_OMP_CLAUSE_COPY_CTOR
#undef LANG_HOOKS_OMP_CLAUSE_ASSIGN_OP #undef LANG_HOOKS_OMP_CLAUSE_ASSIGN_OP
...@@ -137,6 +138,7 @@ static void gfc_init_ts (void); ...@@ -137,6 +138,7 @@ static void gfc_init_ts (void);
#define LANG_HOOKS_INIT_TS gfc_init_ts #define LANG_HOOKS_INIT_TS gfc_init_ts
#define LANG_HOOKS_OMP_PRIVATIZE_BY_REFERENCE gfc_omp_privatize_by_reference #define LANG_HOOKS_OMP_PRIVATIZE_BY_REFERENCE gfc_omp_privatize_by_reference
#define LANG_HOOKS_OMP_PREDETERMINED_SHARING gfc_omp_predetermined_sharing #define LANG_HOOKS_OMP_PREDETERMINED_SHARING gfc_omp_predetermined_sharing
#define LANG_HOOKS_OMP_REPORT_DECL gfc_omp_report_decl
#define LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR gfc_omp_clause_default_ctor #define LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR gfc_omp_clause_default_ctor
#define LANG_HOOKS_OMP_CLAUSE_COPY_CTOR gfc_omp_clause_copy_ctor #define LANG_HOOKS_OMP_CLAUSE_COPY_CTOR gfc_omp_clause_copy_ctor
#define LANG_HOOKS_OMP_CLAUSE_ASSIGN_OP gfc_omp_clause_assign_op #define LANG_HOOKS_OMP_CLAUSE_ASSIGN_OP gfc_omp_clause_assign_op
......
...@@ -75,7 +75,10 @@ gfc_omp_privatize_by_reference (const_tree decl) ...@@ -75,7 +75,10 @@ gfc_omp_privatize_by_reference (const_tree decl)
enum omp_clause_default_kind enum omp_clause_default_kind
gfc_omp_predetermined_sharing (tree decl) gfc_omp_predetermined_sharing (tree decl)
{ {
if (DECL_ARTIFICIAL (decl) && ! GFC_DECL_RESULT (decl)) if (DECL_ARTIFICIAL (decl)
&& ! GFC_DECL_RESULT (decl)
&& ! (DECL_LANG_SPECIFIC (decl)
&& GFC_DECL_SAVED_DESCRIPTOR (decl)))
return OMP_CLAUSE_DEFAULT_SHARED; return OMP_CLAUSE_DEFAULT_SHARED;
/* Cray pointees shouldn't be listed in any clauses and should be /* Cray pointees shouldn't be listed in any clauses and should be
...@@ -118,6 +121,19 @@ gfc_omp_predetermined_sharing (tree decl) ...@@ -118,6 +121,19 @@ gfc_omp_predetermined_sharing (tree decl)
return OMP_CLAUSE_DEFAULT_UNSPECIFIED; return OMP_CLAUSE_DEFAULT_UNSPECIFIED;
} }
/* Return decl that should be used when reporting DEFAULT(NONE)
diagnostics. */
tree
gfc_omp_report_decl (tree decl)
{
if (DECL_ARTIFICIAL (decl)
&& DECL_LANG_SPECIFIC (decl)
&& GFC_DECL_SAVED_DESCRIPTOR (decl))
return GFC_DECL_SAVED_DESCRIPTOR (decl);
return decl;
}
/* Return true if DECL in private clause needs /* Return true if DECL in private clause needs
OMP_CLAUSE_PRIVATE_OUTER_REF on the private clause. */ OMP_CLAUSE_PRIVATE_OUTER_REF on the private clause. */
......
...@@ -523,6 +523,7 @@ bool gfc_get_array_descr_info (const_tree, struct array_descr_info *); ...@@ -523,6 +523,7 @@ bool gfc_get_array_descr_info (const_tree, struct array_descr_info *);
/* In trans-openmp.c */ /* In trans-openmp.c */
bool gfc_omp_privatize_by_reference (const_tree); bool gfc_omp_privatize_by_reference (const_tree);
enum omp_clause_default_kind gfc_omp_predetermined_sharing (tree); enum omp_clause_default_kind gfc_omp_predetermined_sharing (tree);
tree gfc_omp_report_decl (tree);
tree gfc_omp_clause_default_ctor (tree, tree, tree); tree gfc_omp_clause_default_ctor (tree, tree, tree);
tree gfc_omp_clause_copy_ctor (tree, tree, tree); tree gfc_omp_clause_copy_ctor (tree, tree, tree);
tree gfc_omp_clause_assign_op (tree, tree, tree); tree gfc_omp_clause_assign_op (tree, tree, tree);
......
...@@ -5586,7 +5586,7 @@ omp_notice_variable (struct gimplify_omp_ctx *ctx, tree decl, bool in_code) ...@@ -5586,7 +5586,7 @@ omp_notice_variable (struct gimplify_omp_ctx *ctx, tree decl, bool in_code)
{ {
case OMP_CLAUSE_DEFAULT_NONE: case OMP_CLAUSE_DEFAULT_NONE:
error ("%qE not specified in enclosing parallel", error ("%qE not specified in enclosing parallel",
DECL_NAME (decl)); DECL_NAME (lang_hooks.decls.omp_report_decl (decl)));
if ((ctx->region_type & ORT_TASK) != 0) if ((ctx->region_type & ORT_TASK) != 0)
error_at (ctx->location, "enclosing task"); error_at (ctx->location, "enclosing task");
else else
......
...@@ -202,6 +202,7 @@ extern tree lhd_make_node (enum tree_code); ...@@ -202,6 +202,7 @@ extern tree lhd_make_node (enum tree_code);
#define LANG_HOOKS_DECL_OK_FOR_SIBCALL lhd_decl_ok_for_sibcall #define LANG_HOOKS_DECL_OK_FOR_SIBCALL lhd_decl_ok_for_sibcall
#define LANG_HOOKS_OMP_PRIVATIZE_BY_REFERENCE hook_bool_const_tree_false #define LANG_HOOKS_OMP_PRIVATIZE_BY_REFERENCE hook_bool_const_tree_false
#define LANG_HOOKS_OMP_PREDETERMINED_SHARING lhd_omp_predetermined_sharing #define LANG_HOOKS_OMP_PREDETERMINED_SHARING lhd_omp_predetermined_sharing
#define LANG_HOOKS_OMP_REPORT_DECL lhd_pass_through_t
#define LANG_HOOKS_OMP_DISREGARD_VALUE_EXPR hook_bool_tree_bool_false #define LANG_HOOKS_OMP_DISREGARD_VALUE_EXPR hook_bool_tree_bool_false
#define LANG_HOOKS_OMP_PRIVATE_DEBUG_CLAUSE hook_bool_tree_bool_false #define LANG_HOOKS_OMP_PRIVATE_DEBUG_CLAUSE hook_bool_tree_bool_false
#define LANG_HOOKS_OMP_PRIVATE_OUTER_REF hook_bool_tree_false #define LANG_HOOKS_OMP_PRIVATE_OUTER_REF hook_bool_tree_false
...@@ -224,6 +225,7 @@ extern tree lhd_make_node (enum tree_code); ...@@ -224,6 +225,7 @@ extern tree lhd_make_node (enum tree_code);
LANG_HOOKS_DECL_OK_FOR_SIBCALL, \ LANG_HOOKS_DECL_OK_FOR_SIBCALL, \
LANG_HOOKS_OMP_PRIVATIZE_BY_REFERENCE, \ LANG_HOOKS_OMP_PRIVATIZE_BY_REFERENCE, \
LANG_HOOKS_OMP_PREDETERMINED_SHARING, \ LANG_HOOKS_OMP_PREDETERMINED_SHARING, \
LANG_HOOKS_OMP_REPORT_DECL, \
LANG_HOOKS_OMP_DISREGARD_VALUE_EXPR, \ LANG_HOOKS_OMP_DISREGARD_VALUE_EXPR, \
LANG_HOOKS_OMP_PRIVATE_DEBUG_CLAUSE, \ LANG_HOOKS_OMP_PRIVATE_DEBUG_CLAUSE, \
LANG_HOOKS_OMP_PRIVATE_OUTER_REF, \ LANG_HOOKS_OMP_PRIVATE_OUTER_REF, \
......
...@@ -195,6 +195,10 @@ struct lang_hooks_for_decls ...@@ -195,6 +195,10 @@ struct lang_hooks_for_decls
predetermined, OMP_CLAUSE_DEFAULT_UNSPECIFIED otherwise. */ predetermined, OMP_CLAUSE_DEFAULT_UNSPECIFIED otherwise. */
enum omp_clause_default_kind (*omp_predetermined_sharing) (tree); enum omp_clause_default_kind (*omp_predetermined_sharing) (tree);
/* Return decl that should be reported for DEFAULT(NONE) failure
diagnostics. Usually the DECL passed in. */
tree (*omp_report_decl) (tree);
/* Return true if DECL's DECL_VALUE_EXPR (if any) should be /* Return true if DECL's DECL_VALUE_EXPR (if any) should be
disregarded in OpenMP construct, because it is going to be disregarded in OpenMP construct, because it is going to be
remapped during OpenMP lowering. SHARED is true if DECL remapped during OpenMP lowering. SHARED is true if DECL
......
2010-06-15 Jakub Jelinek <jakub@redhat.com>
PR fortran/44536
* gfortran.dg/gomp/pr44536.f90: New test.
* gfortran.dg/gomp/sharing-3.f90: Remove xfail.
2010-06-14 H.J. Lu <hongjiu.lu@intel.com> 2010-06-14 H.J. Lu <hongjiu.lu@intel.com>
PR target/44534 PR target/44534
......
! PR fortran/44536
! { dg-do compile }
! { dg-options "-fopenmp" }
subroutine foo (a, i, j)
integer, dimension(:) :: a
integer :: i, j
!$omp parallel default(none) shared(i, j) ! { dg-error "enclosing parallel" }
j=a(i) ! { dg-error "not specified in" }
!$omp end parallel
end subroutine
...@@ -29,7 +29,7 @@ subroutine foo (vara, varb, varc, vard, n) ...@@ -29,7 +29,7 @@ subroutine foo (vara, varb, varc, vard, n)
!$omp master !$omp master
vara(1) = 1 ! { dg-error "not specified" } vara(1) = 1 ! { dg-error "not specified" }
varb(1) = 1 ! Assumed-size is predetermined varb(1) = 1 ! Assumed-size is predetermined
varc(1) = 1 ! { dg-error "not specified" "" { xfail *-*-* } } varc(1) = 1 ! { dg-error "not specified" }
vard(1) = 1 ! { dg-error "not specified" } vard(1) = 1 ! { dg-error "not specified" }
vare(1) = 1 ! { dg-error "not specified" } vare(1) = 1 ! { dg-error "not specified" }
!$omp end master !$omp end master
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment