On Wed, Nov 04, 2015 at 06:32:00AM -0600, James Norris wrote: > +/* Node in the linked list used for storing !$oacc declare constructs. */ > + > +typedef struct gfc_oacc_declare > +{ > + struct gfc_oacc_declare *next; > + bool module_var; > + gfc_omp_clauses *clauses; > + gfc_omp_clauses *return_clauses; > +} > +gfc_oacc_declare; > + > +#define gfc_get_oacc_declare() XCNEW (gfc_oacc_declare) > + > + > /* Node in the linked list used for storing !$omp declare simd constructs. > */ > > typedef struct gfc_omp_declare_simd > @@ -1644,7 +1668,7 @@ typedef struct gfc_namespace > struct gfc_data *data, *old_data; > > /* !$ACC DECLARE clauses. */ > - gfc_omp_clauses *oacc_declare_clauses; > + struct gfc_oacc_declare *oacc_declare_clauses;
This should be renamed now that it doesn't hold just clauses, perhaps just oacc_declare? Also, no need to use struct keyword. > @@ -2857,6 +2957,42 @@ oacc_compatible_clauses (gfc_omp_clauses *clauses, int > list, > return false; > } > > +/* Check if a variable appears in multiple clauses. */ > + > +static void > +resolve_omp_duplicate_list (gfc_omp_namelist *clause_list, bool openacc, > + int list) > +{ > + gfc_omp_namelist *n; > + const char *error_msg = "Symbol %qs present on multiple clauses at %L"; > + > + /* OpenACC reduction clauses are compatible with everything. We only > + need to check if a reduction variable is used more than once. */ > + if (openacc && list == OMP_LIST_REDUCTION) > + { > + hash_set<gfc_symbol *> reductions; > + > + for (n = clause_list; n; n = n->next) > + { > + if (reductions.contains (n->sym)) > + gfc_error (error_msg, n->sym->name, &n->expr->where); > + else > + reductions.add (n->sym); > + } > + > + return; > + } > + > + /* Ensure that variables are only used in one clause. */ > + for (n = clause_list; n; n = n->next) > + { > + if (n->sym->mark) > + gfc_error (error_msg, n->sym->name, &n->expr->where); > + else > + n->sym->mark = 1; > + } > +} You are readding a function that has been rejected, OMP_LIST_REDUCTION is handled differently now. Jakub