diff options
author | Steven G. Kargl <kargl@gcc.gnu.org> | 2007-01-20 22:01:41 +0000 |
---|---|---|
committer | Steven G. Kargl <kargl@gcc.gnu.org> | 2007-01-20 22:01:41 +0000 |
commit | edf1eac29ebf11051dfcba996ac4fb3064e3c95c (patch) | |
tree | a5e1dd4c7002a6118aa4d0e313e2d22c3b3aa8ad /gcc/fortran/openmp.c | |
parent | 70fadd09be30c98ab6fccf3a97eede5f5c253c1e (diff) | |
download | gcc-edf1eac29ebf11051dfcba996ac4fb3064e3c95c.zip gcc-edf1eac29ebf11051dfcba996ac4fb3064e3c95c.tar.gz gcc-edf1eac29ebf11051dfcba996ac4fb3064e3c95c.tar.bz2 |
openmp.c, [...]: Next installment in the massive whitespace patch.
* openmp.c, matchexp.c, module.c, scanner.c, resolve.c, st.c,
parse.c, primary.c, options.c, misc.c, simplify.c: Next installment
in the massive whitespace patch.
From-SVN: r121012
Diffstat (limited to 'gcc/fortran/openmp.c')
-rw-r--r-- | gcc/fortran/openmp.c | 126 |
1 files changed, 76 insertions, 50 deletions
diff --git a/gcc/fortran/openmp.c b/gcc/fortran/openmp.c index 09ec255..9694c89 100644 --- a/gcc/fortran/openmp.c +++ b/gcc/fortran/openmp.c @@ -1,5 +1,6 @@ /* OpenMP directive matching and resolving. - Copyright (C) 2005, 2006 Free Software Foundation, Inc. + Copyright (C) 2005, 2006, 2007 + Free Software Foundation, Inc. Contributed by Jakub Jelinek This file is part of GCC. @@ -19,7 +20,6 @@ along with GCC; see the file COPYING. If not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ - #include "config.h" #include "system.h" #include "flags.h" @@ -410,6 +410,7 @@ gfc_match_omp_parallel (void) return MATCH_YES; } + match gfc_match_omp_critical (void) { @@ -424,6 +425,7 @@ gfc_match_omp_critical (void) return MATCH_YES; } + match gfc_match_omp_do (void) { @@ -435,6 +437,7 @@ gfc_match_omp_do (void) return MATCH_YES; } + match gfc_match_omp_flush (void) { @@ -450,6 +453,7 @@ gfc_match_omp_flush (void) return MATCH_YES; } + match gfc_match_omp_threadprivate (void) { @@ -478,8 +482,8 @@ gfc_match_omp_threadprivate (void) { case MATCH_YES: if (sym->attr.in_common) - gfc_error_now ("Threadprivate variable at %C is an element of" - " a COMMON block"); + gfc_error_now ("Threadprivate variable at %C is an element of " + "a COMMON block"); else if (gfc_add_threadprivate (&sym->attr, sym->name, &sym->declared_at) == FAILURE) goto cleanup; @@ -525,6 +529,7 @@ cleanup: return MATCH_ERROR; } + match gfc_match_omp_parallel_do (void) { @@ -537,6 +542,7 @@ gfc_match_omp_parallel_do (void) return MATCH_YES; } + match gfc_match_omp_parallel_sections (void) { @@ -549,6 +555,7 @@ gfc_match_omp_parallel_sections (void) return MATCH_YES; } + match gfc_match_omp_parallel_workshare (void) { @@ -560,6 +567,7 @@ gfc_match_omp_parallel_workshare (void) return MATCH_YES; } + match gfc_match_omp_sections (void) { @@ -571,6 +579,7 @@ gfc_match_omp_sections (void) return MATCH_YES; } + match gfc_match_omp_single (void) { @@ -583,6 +592,7 @@ gfc_match_omp_single (void) return MATCH_YES; } + match gfc_match_omp_workshare (void) { @@ -593,6 +603,7 @@ gfc_match_omp_workshare (void) return MATCH_YES; } + match gfc_match_omp_master (void) { @@ -603,6 +614,7 @@ gfc_match_omp_master (void) return MATCH_YES; } + match gfc_match_omp_ordered (void) { @@ -613,6 +625,7 @@ gfc_match_omp_ordered (void) return MATCH_YES; } + match gfc_match_omp_atomic (void) { @@ -623,6 +636,7 @@ gfc_match_omp_atomic (void) return MATCH_YES; } + match gfc_match_omp_barrier (void) { @@ -633,6 +647,7 @@ gfc_match_omp_barrier (void) return MATCH_YES; } + match gfc_match_omp_end_nowait (void) { @@ -646,6 +661,7 @@ gfc_match_omp_end_nowait (void) return MATCH_YES; } + match gfc_match_omp_end_single (void) { @@ -663,6 +679,7 @@ gfc_match_omp_end_single (void) return MATCH_YES; } + /* OpenMP directive resolving routines. */ static void @@ -691,16 +708,16 @@ resolve_omp_clauses (gfc_code *code) gfc_expr *expr = omp_clauses->num_threads; if (gfc_resolve_expr (expr) == FAILURE || expr->ts.type != BT_INTEGER || expr->rank != 0) - gfc_error ("NUM_THREADS clause at %L requires a scalar" - " INTEGER expression", &expr->where); + gfc_error ("NUM_THREADS clause at %L requires a scalar " + "INTEGER expression", &expr->where); } if (omp_clauses->chunk_size) { gfc_expr *expr = omp_clauses->chunk_size; if (gfc_resolve_expr (expr) == FAILURE || expr->ts.type != BT_INTEGER || expr->rank != 0) - gfc_error ("SCHEDULE clause's chunk_size at %L requires" - " a scalar INTEGER expression", &expr->where); + gfc_error ("SCHEDULE clause's chunk_size at %L requires " + "a scalar INTEGER expression", &expr->where); } /* Check that no symbol appears on multiple clauses, except that @@ -774,19 +791,19 @@ resolve_omp_clauses (gfc_code *code) for (; n != NULL; n = n->next) { if (n->sym->as && n->sym->as->type == AS_ASSUMED_SIZE) - gfc_error ("Assumed size array '%s' in COPYPRIVATE clause" - " at %L", n->sym->name, &code->loc); + gfc_error ("Assumed size array '%s' in COPYPRIVATE clause " + "at %L", n->sym->name, &code->loc); if (n->sym->attr.allocatable) - gfc_error ("COPYPRIVATE clause object '%s' is ALLOCATABLE" - " at %L", n->sym->name, &code->loc); + gfc_error ("COPYPRIVATE clause object '%s' is ALLOCATABLE " + "at %L", n->sym->name, &code->loc); } break; case OMP_LIST_SHARED: for (; n != NULL; n = n->next) { if (n->sym->attr.threadprivate) - gfc_error ("THREADPRIVATE object '%s' in SHARED clause at" - " %L", n->sym->name, &code->loc); + gfc_error ("THREADPRIVATE object '%s' in SHARED clause at " + "%L", n->sym->name, &code->loc); if (n->sym->attr.cray_pointee) gfc_error ("Cray pointee '%s' in SHARED clause at %L", n->sym->name, &code->loc); @@ -819,8 +836,8 @@ resolve_omp_clauses (gfc_code *code) if (n->sym->attr.in_namelist && (list < OMP_LIST_REDUCTION_FIRST || list > OMP_LIST_REDUCTION_LAST)) - gfc_error ("Variable '%s' in %s clause is used in" - " NAMELIST statement at %L", + gfc_error ("Variable '%s' in %s clause is used in " + "NAMELIST statement at %L", n->sym->name, name, &code->loc); switch (list) { @@ -839,8 +856,8 @@ resolve_omp_clauses (gfc_code *code) case OMP_LIST_EQV: case OMP_LIST_NEQV: if (n->sym->ts.type != BT_LOGICAL) - gfc_error ("%s REDUCTION variable '%s' must be LOGICAL" - " at %L", + gfc_error ("%s REDUCTION variable '%s' must be LOGICAL " + "at %L", list == OMP_LIST_AND ? ".AND." : list == OMP_LIST_OR ? ".OR." : list == OMP_LIST_EQV ? ".EQV." : ".NEQV.", @@ -850,8 +867,8 @@ resolve_omp_clauses (gfc_code *code) case OMP_LIST_MIN: if (n->sym->ts.type != BT_INTEGER && n->sym->ts.type != BT_REAL) - gfc_error ("%s REDUCTION variable '%s' must be" - " INTEGER or REAL at %L", + gfc_error ("%s REDUCTION variable '%s' must be " + "INTEGER or REAL at %L", list == OMP_LIST_MAX ? "MAX" : "MIN", n->sym->name, &code->loc); break; @@ -859,8 +876,8 @@ resolve_omp_clauses (gfc_code *code) case OMP_LIST_IOR: case OMP_LIST_IEOR: if (n->sym->ts.type != BT_INTEGER) - gfc_error ("%s REDUCTION variable '%s' must be INTEGER" - " at %L", + gfc_error ("%s REDUCTION variable '%s' must be INTEGER " + "at %L", list == OMP_LIST_IAND ? "IAND" : list == OMP_LIST_MULT ? "IOR" : "IEOR", n->sym->name, &code->loc); @@ -878,6 +895,7 @@ resolve_omp_clauses (gfc_code *code) } } + /* Return true if SYM is ever referenced in EXPR except in the SE node. */ static bool @@ -917,6 +935,7 @@ expr_references_sym (gfc_expr *e, gfc_symbol *s, gfc_expr *se) } } + /* If EXPR is a conversion function that widens the type if WIDENING is true or narrows the type if WIDENING is false, return the inner expression, otherwise return NULL. */ @@ -950,6 +969,7 @@ is_conversion (gfc_expr *expr, bool widening) return NULL; } + static void resolve_omp_atomic (gfc_code *code) { @@ -968,8 +988,8 @@ resolve_omp_atomic (gfc_code *code) && code->expr->ts.type != BT_COMPLEX && code->expr->ts.type != BT_LOGICAL)) { - gfc_error ("!$OMP ATOMIC statement must set a scalar variable of" - " intrinsic type at %L", &code->loc); + gfc_error ("!$OMP ATOMIC statement must set a scalar variable of " + "intrinsic type at %L", &code->loc); return; } @@ -1008,8 +1028,8 @@ resolve_omp_atomic (gfc_code *code) alt_op = INTRINSIC_EQV; break; default: - gfc_error ("!$OMP ATOMIC assignment operator must be" - " +, *, -, /, .AND., .OR., .EQV. or .NEQV. at %L", + gfc_error ("!$OMP ATOMIC assignment operator must be " + "+, *, -, /, .AND., .OR., .EQV. or .NEQV. at %L", &expr2->where); return; } @@ -1056,8 +1076,8 @@ resolve_omp_atomic (gfc_code *code) if (v == NULL) { - gfc_error ("!$OMP ATOMIC assignment must be var = var op expr" - " or var = expr op var at %L", &expr2->where); + gfc_error ("!$OMP ATOMIC assignment must be var = var op expr " + "or var = expr op var at %L", &expr2->where); return; } @@ -1070,9 +1090,9 @@ resolve_omp_atomic (gfc_code *code) case INTRINSIC_DIVIDE: case INTRINSIC_EQV: case INTRINSIC_NEQV: - gfc_error ("!$OMP ATOMIC var = var op expr not" - " mathematically equivalent to var = var op" - " (expr) at %L", &expr2->where); + gfc_error ("!$OMP ATOMIC var = var op expr not " + "mathematically equivalent to var = var op " + "(expr) at %L", &expr2->where); break; default: break; @@ -1102,8 +1122,8 @@ resolve_omp_atomic (gfc_code *code) if (e->rank != 0 || expr_references_sym (code->expr2, var, v)) { - gfc_error ("expr in !$OMP ATOMIC assignment var = var op expr" - " must be scalar and cannot reference var at %L", + gfc_error ("expr in !$OMP ATOMIC assignment var = var op expr " + "must be scalar and cannot reference var at %L", &expr2->where); return; } @@ -1126,15 +1146,15 @@ resolve_omp_atomic (gfc_code *code) case GFC_ISYM_IEOR: if (expr2->value.function.actual->next->next != NULL) { - gfc_error ("!$OMP ATOMIC assignment intrinsic IAND, IOR" + gfc_error ("!$OMP ATOMIC assignment intrinsic IAND, IOR " "or IEOR must have two arguments at %L", &expr2->where); return; } break; default: - gfc_error ("!$OMP ATOMIC assignment intrinsic must be" - " MIN, MAX, IAND, IOR or IEOR at %L", + gfc_error ("!$OMP ATOMIC assignment intrinsic must be " + "MIN, MAX, IAND, IOR or IEOR at %L", &expr2->where); return; } @@ -1149,17 +1169,17 @@ resolve_omp_atomic (gfc_code *code) && arg->expr->symtree->n.sym == var) var_arg = arg; else if (expr_references_sym (arg->expr, var, NULL)) - gfc_error ("!$OMP ATOMIC intrinsic arguments except one must not" - " reference '%s' at %L", var->name, &arg->expr->where); + gfc_error ("!$OMP ATOMIC intrinsic arguments except one must not " + "reference '%s' at %L", var->name, &arg->expr->where); if (arg->expr->rank != 0) - gfc_error ("!$OMP ATOMIC intrinsic arguments must be scalar" - " at %L", &arg->expr->where); + gfc_error ("!$OMP ATOMIC intrinsic arguments must be scalar " + "at %L", &arg->expr->where); } if (var_arg == NULL) { - gfc_error ("First or last !$OMP ATOMIC intrinsic argument must" - " be '%s' at %L", var->name, &expr2->where); + gfc_error ("First or last !$OMP ATOMIC intrinsic argument must " + "be '%s' at %L", var->name, &expr2->where); return; } @@ -1176,10 +1196,11 @@ resolve_omp_atomic (gfc_code *code) } } else - gfc_error ("!$OMP ATOMIC assignment must have an operator or intrinsic" - " on right hand side at %L", &expr2->where); + gfc_error ("!$OMP ATOMIC assignment must have an operator or intrinsic " + "on right hand side at %L", &expr2->where); } + struct omp_context { gfc_code *code; @@ -1189,6 +1210,7 @@ struct omp_context } *omp_current_ctx; gfc_code *omp_current_do_code; + void gfc_resolve_omp_do_blocks (gfc_code *code, gfc_namespace *ns) { @@ -1197,6 +1219,7 @@ gfc_resolve_omp_do_blocks (gfc_code *code, gfc_namespace *ns) gfc_resolve_blocks (code->block, ns); } + void gfc_resolve_omp_parallel_blocks (gfc_code *code, gfc_namespace *ns) { @@ -1225,6 +1248,7 @@ gfc_resolve_omp_parallel_blocks (gfc_code *code, gfc_namespace *ns) pointer_set_destroy (ctx.private_iterators); } + /* Note a DO iterator variable. This is special in !$omp parallel construct, where they are predetermined private. */ @@ -1260,6 +1284,7 @@ gfc_resolve_do_iterator (gfc_code *code, gfc_symbol *sym) } } + static void resolve_omp_do (gfc_code *code) { @@ -1273,8 +1298,8 @@ resolve_omp_do (gfc_code *code) do_code = code->block->next; if (do_code->op == EXEC_DO_WHILE) - gfc_error ("!$OMP DO cannot be a DO WHILE or DO without loop control at %L", - &do_code->loc); + gfc_error ("!$OMP DO cannot be a DO WHILE or DO without loop control " + "at %L", &do_code->loc); else { gcc_assert (do_code->op == EXEC_DO); @@ -1283,22 +1308,23 @@ resolve_omp_do (gfc_code *code) &do_code->loc); dovar = do_code->ext.iterator->var->symtree->n.sym; if (dovar->attr.threadprivate) - gfc_error ("!$OMP DO iteration variable must not be THREADPRIVATE at %L", - &do_code->loc); + gfc_error ("!$OMP DO iteration variable must not be THREADPRIVATE " + "at %L", &do_code->loc); if (code->ext.omp_clauses) for (list = 0; list < OMP_LIST_NUM; list++) if (list != OMP_LIST_PRIVATE && list != OMP_LIST_LASTPRIVATE) for (n = code->ext.omp_clauses->lists[list]; n; n = n->next) if (dovar == n->sym) { - gfc_error ("!$OMP DO iteration variable present on clause" - " other than PRIVATE or LASTPRIVATE at %L", + gfc_error ("!$OMP DO iteration variable present on clause " + "other than PRIVATE or LASTPRIVATE at %L", &do_code->loc); break; } } } + /* Resolve OpenMP directive clauses and check various requirements of each directive. */ |