]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/44536 (OMP: missing error with default(none))
authorJakub Jelinek <jakub@redhat.com>
Tue, 15 Jun 2010 12:15:26 +0000 (14:15 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Tue, 15 Jun 2010 12:15:26 +0000 (14:15 +0200)
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

gcc/ChangeLog
gcc/fortran/ChangeLog
gcc/fortran/f95-lang.c
gcc/fortran/trans-openmp.c
gcc/fortran/trans.h
gcc/gimplify.c
gcc/langhooks-def.h
gcc/langhooks.h
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/gomp/pr44536.f90 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/gomp/sharing-3.f90

index fda58149896358434efe7d5bf025472993a68861..18a987c1149a503056beaa8f03c3341b78477de6 100644 (file)
@@ -1,3 +1,12 @@
+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>
 
        PR lto/44464
index 3d7dde7f189b9ffa62279c0bfe50e57cafd279fe..39cab7a17c4c3a6c06dceea8a9fd77bcb123927d 100644 (file)
@@ -1,3 +1,13 @@
+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>
 
        PR fortran/31588
index a97016a69230f9f0b6b4adaabeeac8130d7f1386..c6af0026ba85f72a40bd8c43d89da4c6306a44a1 100644 (file)
@@ -111,6 +111,7 @@ static void gfc_init_ts (void);
 #undef LANG_HOOKS_INIT_TS
 #undef LANG_HOOKS_OMP_PRIVATIZE_BY_REFERENCE
 #undef LANG_HOOKS_OMP_PREDETERMINED_SHARING
+#undef LANG_HOOKS_OMP_REPORT_DECL
 #undef LANG_HOOKS_OMP_CLAUSE_DEFAULT_CTOR
 #undef LANG_HOOKS_OMP_CLAUSE_COPY_CTOR
 #undef LANG_HOOKS_OMP_CLAUSE_ASSIGN_OP
@@ -137,6 +138,7 @@ static void gfc_init_ts (void);
 #define LANG_HOOKS_INIT_TS             gfc_init_ts
 #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_REPORT_DECL             gfc_omp_report_decl
 #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_ASSIGN_OP                gfc_omp_clause_assign_op
index 50e7847d0e173b79f36e6cd3d51c9de6f59b61ff..1be4b81c8e832966bf52a34e307456491b78bed3 100644 (file)
@@ -75,7 +75,10 @@ gfc_omp_privatize_by_reference (const_tree decl)
 enum omp_clause_default_kind
 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;
 
   /* Cray pointees shouldn't be listed in any clauses and should be
@@ -118,6 +121,19 @@ gfc_omp_predetermined_sharing (tree decl)
   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
    OMP_CLAUSE_PRIVATE_OUTER_REF on the private clause.  */
index 72f8a4367886f48a8b804112afeefefe5ae242bc..946ce2eba729dd615e70bc629e75be12157dca9d 100644 (file)
@@ -523,6 +523,7 @@ bool gfc_get_array_descr_info (const_tree, struct array_descr_info *);
 /* In trans-openmp.c */
 bool gfc_omp_privatize_by_reference (const_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_copy_ctor (tree, tree, tree);
 tree gfc_omp_clause_assign_op (tree, tree, tree);
index 354092ae42921d1ce3670abd1d13ad97c73f2e17..9d2cf8634dcd37f43f2efa0de6a0466293bdf3c8 100644 (file)
@@ -5586,7 +5586,7 @@ omp_notice_variable (struct gimplify_omp_ctx *ctx, tree decl, bool in_code)
        {
        case OMP_CLAUSE_DEFAULT_NONE:
          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)
            error_at (ctx->location, "enclosing task");
          else
index 68b5b72bfc670a36f537a29e6171b6fa2ae4a075..92755e24880b8992e1556d88533b0c00dacdb125 100644 (file)
@@ -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_OMP_PRIVATIZE_BY_REFERENCE hook_bool_const_tree_false
 #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_PRIVATE_DEBUG_CLAUSE hook_bool_tree_bool_false
 #define LANG_HOOKS_OMP_PRIVATE_OUTER_REF hook_bool_tree_false
@@ -224,6 +225,7 @@ extern tree lhd_make_node (enum tree_code);
   LANG_HOOKS_DECL_OK_FOR_SIBCALL, \
   LANG_HOOKS_OMP_PRIVATIZE_BY_REFERENCE, \
   LANG_HOOKS_OMP_PREDETERMINED_SHARING, \
+  LANG_HOOKS_OMP_REPORT_DECL, \
   LANG_HOOKS_OMP_DISREGARD_VALUE_EXPR, \
   LANG_HOOKS_OMP_PRIVATE_DEBUG_CLAUSE, \
   LANG_HOOKS_OMP_PRIVATE_OUTER_REF, \
index c0744e878987216939b354cd339dd8383f363050..535529a08f01dc86651f9b465c40e7693c257397 100644 (file)
@@ -195,6 +195,10 @@ struct lang_hooks_for_decls
      predetermined, OMP_CLAUSE_DEFAULT_UNSPECIFIED otherwise.  */
   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
      disregarded in OpenMP construct, because it is going to be
      remapped during OpenMP lowering.  SHARED is true if DECL
index 6a2a8e82eed6904f56dbb31e4957ce663110ccdd..6b4528c097ae575120a2e89eef747489d63be480 100644 (file)
@@ -1,3 +1,9 @@
+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>
 
        PR target/44534
diff --git a/gcc/testsuite/gfortran.dg/gomp/pr44536.f90 b/gcc/testsuite/gfortran.dg/gomp/pr44536.f90
new file mode 100644 (file)
index 0000000..0dc896d
--- /dev/null
@@ -0,0 +1,10 @@
+! 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
index 5c1581454b22f5465ee0812d5bb58ea66ae4649a..05be38283a9388a606dd9ab2e4637c17e61df955 100644 (file)
@@ -29,7 +29,7 @@ subroutine foo (vara, varb, varc, vard, n)
     !$omp master
       vara(1) = 1              ! { dg-error "not specified" }
       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" }
       vare(1) = 1              ! { dg-error "not specified" }
     !$omp end master