aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/openmp.c
diff options
context:
space:
mode:
authorSteven G. Kargl <kargl@gcc.gnu.org>2007-01-20 22:01:41 +0000
committerSteven G. Kargl <kargl@gcc.gnu.org>2007-01-20 22:01:41 +0000
commitedf1eac29ebf11051dfcba996ac4fb3064e3c95c (patch)
treea5e1dd4c7002a6118aa4d0e313e2d22c3b3aa8ad /gcc/fortran/openmp.c
parent70fadd09be30c98ab6fccf3a97eede5f5c253c1e (diff)
downloadgcc-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.c126
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. */