aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/openmp.c3
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/pr77765.f9019
4 files changed, 32 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index fbf0b4d..e9043dd 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2017-06-29 Cesar Philippidis <cesar@codesourcery.com>
+
+ PR fortran/77765
+ * openmp.c (gfc_match_oacc_routine): Check if proc_name exist before
+ comparing the routine name against it.
+
2017-06-27 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/80164
diff --git a/gcc/fortran/openmp.c b/gcc/fortran/openmp.c
index 2b56558..8400354 100644
--- a/gcc/fortran/openmp.c
+++ b/gcc/fortran/openmp.c
@@ -2295,7 +2295,8 @@ gfc_match_oacc_routine (void)
if (st)
{
sym = st->n.sym;
- if (strcmp (sym->name, gfc_current_ns->proc_name->name) == 0)
+ if (gfc_current_ns->proc_name != NULL
+ && strcmp (sym->name, gfc_current_ns->proc_name->name) == 0)
sym = NULL;
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 8aba9c2..8fe42ba 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2017-06-29 Cesar Philippidis <cesar@codesourcery.com>
+
+ PR fortran/77765
+ * gfortran.dg/goacc/pr77765.f90: New test.
+
2017-06-29 Steve Ellcey <sellcey@cavium.com>
* gcc.target/aarch64/ccmp_2.c: New test.
diff --git a/gcc/testsuite/gfortran.dg/goacc/pr77765.f90 b/gcc/testsuite/gfortran.dg/goacc/pr77765.f90
new file mode 100644
index 0000000..3819cf7
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/goacc/pr77765.f90
@@ -0,0 +1,19 @@
+! Test the presence of an ACC ROUTINE directive inside a function
+! containg an error.
+
+! { dg-do compile }
+
+module m
+contains
+ recursive function f(x)
+ end function f
+ recursive function f(x)
+ !$acc routine (f)
+ end function f
+end module m
+
+! { dg-error "Procedure 'f' at .1. is already defined" "" { target *-*-* } 8 }
+! { dg-error "Duplicate RECURSIVE attribute specified" "" { target *-*-* } 8 }
+! { dg-error ".1." "" { target *-*-* } 10 }
+! { dg-error "Unexpected ..ACC ROUTINE" "" { target *-*-* } 11 }
+! { dg-error "Expecting END MODULE statement" "" { target *-*-* } 12 }