From fe7ca15b14a53a449bd045065f765bee9f4ba9f2 Mon Sep 17 00:00:00 2001 From: janus Date: Mon, 22 Dec 2014 18:15:08 +0000 Subject: [PATCH] 2014-12-22 Janus Weil PR fortran/63363 * check.c (gfc_check_kind): Reject polymorphic and non-data arguments. 2014-12-22 Janus Weil PR fortran/63363 * gfortran.dg/kind_1.f90: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@219027 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/fortran/ChangeLog | 5 +++++ gcc/fortran/check.c | 13 ++++++++++--- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/kind_1.f90 | 24 ++++++++++++++++++++++++ 4 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/kind_1.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index de2d2a9..3b8ebdf 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2014-12-22 Janus Weil + + PR fortran/63363 + * check.c (gfc_check_kind): Reject polymorphic and non-data arguments. + 2014-12-19 Janus Weil PR fortran/64209 diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c index 95c5223..d2f35ec 100644 --- a/gcc/fortran/check.c +++ b/gcc/fortran/check.c @@ -2531,13 +2531,20 @@ gfc_check_kill_sub (gfc_expr *pid, gfc_expr *sig, gfc_expr *status) bool gfc_check_kind (gfc_expr *x) { - if (x->ts.type == BT_DERIVED) + if (x->ts.type == BT_DERIVED || x->ts.type == BT_CLASS) { - gfc_error ("%qs argument of %qs intrinsic at %L must be a " - "non-derived type", gfc_current_intrinsic_arg[0]->name, + gfc_error ("%qs argument of %qs intrinsic at %L must be of " + "intrinsic type", gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic, &x->where); return false; } + if (x->ts.type == BT_PROCEDURE) + { + gfc_error ("%qs argument of %qs intrinsic at %L must be a data entity", + gfc_current_intrinsic_arg[0]->name, gfc_current_intrinsic, + &x->where); + return false; + } return true; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6009938..e756a17 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-12-22 Janus Weil + + PR fortran/63363 + * gfortran.dg/kind_1.f90: New. + 2014-12-22 Oleg Endo PR target/52933 diff --git a/gcc/testsuite/gfortran.dg/kind_1.f90 b/gcc/testsuite/gfortran.dg/kind_1.f90 new file mode 100644 index 0000000..3230bfa5 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/kind_1.f90 @@ -0,0 +1,24 @@ +! { dg-do compile } +! +! PR 63363: No diagnostic for passing function as actual argument to KIND +! +! Contributed by Ian Harvey + + type :: t + end type + type(t) :: d + class(*), allocatable :: c + + print *, KIND(d) ! { dg-error "must be of intrinsic type" } + print *, KIND(c) ! { dg-error "must be of intrinsic type" } + + print *, KIND(f) ! { dg-error "must be a data entity" } + print *, KIND(f()) + print *, KIND(s) ! { dg-error "must be a data entity" } +contains + FUNCTION f() + INTEGER(SELECTED_INT_KIND(4)) :: f + END FUNCTION + subroutine s + end subroutine +END -- 2.7.4