--- gcc/langhooks.h.jj	2010-05-21 11:46:31.000000000 +0200
+++ gcc/langhooks.h	2010-06-15 13:12:53.000000000 +0200
@@ -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
--- gcc/langhooks-def.h.jj	2010-05-21 11:46:31.000000000 +0200
+++ gcc/langhooks-def.h	2010-06-15 13:11:42.000000000 +0200
@@ -202,6 +202,7 @@ extern tree lhd_make_node (enum tree_cod
 #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_cod
   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, \
--- gcc/gimplify.c.jj	2010-06-09 13:42:07.000000000 +0200
+++ gcc/gimplify.c	2010-06-15 13:18:57.000000000 +0200
@@ -5586,7 +5586,7 @@ omp_notice_variable (struct gimplify_omp
 	{
 	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
--- gcc/fortran/trans-openmp.c.jj	2010-05-25 11:27:34.000000000 +0200
+++ gcc/fortran/trans-openmp.c	2010-06-15 13:41:24.000000000 +0200
@@ -75,7 +75,10 @@ gfc_omp_privatize_by_reference (const_tr
 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.  */
--- gcc/fortran/trans.h.jj	2010-06-09 13:42:02.000000000 +0200
+++ gcc/fortran/trans.h	2010-06-15 13:14:18.000000000 +0200
@@ -523,6 +523,7 @@ bool gfc_get_array_descr_info (const_tre
 /* 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);
--- gcc/fortran/f95-lang.c.jj	2010-06-12 10:38:13.000000000 +0200
+++ gcc/fortran/f95-lang.c	2010-06-15 13:13:58.000000000 +0200
@@ -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
--- gcc/testsuite/gfortran.dg/gomp/pr44536.f90.jj	2010-06-15 13:48:34.000000000 +0200
+++ gcc/testsuite/gfortran.dg/gomp/pr44536.f90	2010-06-15 13:45:35.000000000 +0200
@@ -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
--- gcc/testsuite/gfortran.dg/gomp/sharing-3.f90.jj	2008-09-05 12:55:10.000000000 +0200
+++ gcc/testsuite/gfortran.dg/gomp/sharing-3.f90	2010-06-15 13:54:36.000000000 +0200
@@ -29,7 +29,7 @@ subroutine foo (vara, varb, varc, vard, 
     !$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
