http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59488
Tobias Burnus <burnus at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |openmp CC| |burnus at gcc dot gnu.org, | |jakub at gcc dot gnu.org Summary|l[OpenMP] named constant in |[OpenMP] named constant in |parallel construct lead to |parallel construct leads to |"not specified in enclosing |"not specified in enclosing |parallel" error. |parallel" error. --- Comment #1 from Tobias Burnus <burnus at gcc dot gnu.org> --- >From the original report: "works fine with OpenMP Intel, Sun, Absoft, and PathScale". Remark:Internally, integer, parameter :: nlcdtypes(nnlcd) = (/ 11, 12 /) has a dual nature: It is known to the compiler (at least the FE) as compile time constant and, thus, can be compile-time folded [esp. when used as scalar]. On the other hand, it is generated as static variable (marked as TREE_READONLY). [In case of module parameters the static variable is only in the translation unit of the module]. Maybe something like the following could be the right approach? diff --git a/gcc/gimplify.c b/gcc/gimplify.c index 1ca847a..286f1e8 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -5632,4 +5632,8 @@ omp_notice_variable (struct gimplify_omp_ctx *ctx, tree decl, bool in_code) goto do_outer; + /* Array-valued Fortran named constant can reach here. */ + if (TREE_READONLY (lang_hooks.decls.omp_report_decl (decl))) + goto do_outer; + /* ??? Some compiler-generated variables (like SAVE_EXPRs) could be remapped firstprivate instead of shared. To some extent this is