aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/openmp.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/fortran/openmp.c')
-rw-r--r--gcc/fortran/openmp.c33
1 files changed, 25 insertions, 8 deletions
diff --git a/gcc/fortran/openmp.c b/gcc/fortran/openmp.c
index 1b1a0b4..983b83d 100644
--- a/gcc/fortran/openmp.c
+++ b/gcc/fortran/openmp.c
@@ -2322,15 +2322,10 @@ gfc_match_oacc_routine (void)
sym = NULL;
}
- if ((isym == NULL && st == NULL)
- || (sym
- && !sym->attr.external
- && !sym->attr.function
- && !sym->attr.subroutine))
+ if (isym == NULL && st == NULL)
{
- gfc_error ("Syntax error in !$ACC ROUTINE ( NAME ) at %C, "
- "invalid function name %s",
- (sym) ? sym->name : buffer);
+ gfc_error ("Invalid NAME %qs in !$ACC ROUTINE ( NAME ) at %C",
+ buffer);
gfc_current_locus = old_loc;
return MATCH_ERROR;
}
@@ -2400,6 +2395,7 @@ gfc_match_oacc_routine (void)
n->sym = sym;
n->clauses = c;
n->next = gfc_current_ns->oacc_routine_names;
+ n->loc = old_loc;
gfc_current_ns->oacc_routine_names = n;
}
}
@@ -6072,6 +6068,27 @@ gfc_resolve_oacc_declare (gfc_namespace *ns)
}
}
+
+void
+gfc_resolve_oacc_routines (gfc_namespace *ns)
+{
+ for (gfc_oacc_routine_name *orn = ns->oacc_routine_names;
+ orn;
+ orn = orn->next)
+ {
+ gfc_symbol *sym = orn->sym;
+ if (!sym->attr.external
+ && !sym->attr.function
+ && !sym->attr.subroutine)
+ {
+ gfc_error ("NAME %qs does not refer to a subroutine or function"
+ " in !$ACC ROUTINE ( NAME ) at %L", sym->name, &orn->loc);
+ continue;
+ }
+ }
+}
+
+
void
gfc_resolve_oacc_directive (gfc_code *code, gfc_namespace *ns ATTRIBUTE_UNUSED)
{