diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index c54da9dc274..b05c594d077 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 e5bfc3bd5a4..3314e176881 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 11845e3d0cc..8b8ebc8156d 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 00000000000..a4d78406006 --- /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