From 89508a3fc645ef37340e31c74995c3078e1b1b9b Mon Sep 17 00:00:00 2001 From: "Steven G. Kargl" Date: Fri, 11 Jan 2019 23:41:04 +0000 Subject: [PATCH] re PR fortran/35031 (ELEMENTAL procedure with BIND(C)) 2019-01-11 Steven G. Kargl PR fortran/35031 * decl.c (gfc_match_entry): Check for F2018:C1546. Fix nearby mis-indentation. 2019-01-11 Steven G. Kargl PR fortran/35031 * gfortran.dg/pr35031.f90: new test. From-SVN: r267864 --- gcc/fortran/ChangeLog | 6 ++++++ gcc/fortran/decl.c | 16 +++++++++++++--- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/pr35031.f90 | 10 ++++++++++ 4 files changed, 34 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/pr35031.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index c54da9d..b05c594 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2019-01-11 Steven G. Kargl + + PR fortran/35031 + * decl.c (gfc_match_entry): Check for F2018:C1546. Fix nearby + mis-indentation. + 2019-01-11 Jakub Jelinek PR middle-end/85956 diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index e5bfc3b..3314e17 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -7431,9 +7431,11 @@ gfc_match_entry (void) gfc_error ("Missing required parentheses before BIND(C) at %C"); return MATCH_ERROR; } - if (!gfc_add_is_bind_c (&(entry->attr), entry->name, - &(entry->declared_at), 1)) - return MATCH_ERROR; + + if (!gfc_add_is_bind_c (&(entry->attr), entry->name, + &(entry->declared_at), 1)) + return MATCH_ERROR; + } if (!gfc_current_ns->parent @@ -7517,6 +7519,14 @@ gfc_match_entry (void) return MATCH_ERROR; } + /* F2018:C1546 An elemental procedure shall not have the BIND attribute. */ + if (proc->attr.elemental && entry->attr.is_bind_c) + { + gfc_error ("ENTRY statement at %L with BIND(C) prohibited in an " + "elemental procedure", &entry->declared_at); + return MATCH_ERROR; + } + entry->attr.recursive = proc->attr.recursive; entry->attr.elemental = proc->attr.elemental; entry->attr.pure = proc->attr.pure; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 11845e3..8b8ebc8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-01-11 Steven G. Kargl + + PR fortran/35031 + * gfortran.dg/pr35031.f90: new test. + 2019-01-11 Marek Polacek PR c++/88692, c++/87882 - -Wredundant-move false positive with *this. diff --git a/gcc/testsuite/gfortran.dg/pr35031.f90 b/gcc/testsuite/gfortran.dg/pr35031.f90 new file mode 100644 index 0000000..a4d7840 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr35031.f90 @@ -0,0 +1,10 @@ +! { dg-do compile } +elemental subroutine sub2(x) + integer, intent(in) :: x + entry sub2_c(x) bind(c) ! { dg-error "prohibited in an elemental" } +end subroutine sub2 + +elemental function func2(x) + integer, intent(in) :: x + entry func2_c(x) bind(c) ! { dg-error "prohibited in an elemental" } +end function func2 -- 2.7.4