From 332e7efe7fa434a998aa5634dca6d4f93810f65f Mon Sep 17 00:00:00 2001 From: "Steven G. Kargl" Date: Sat, 19 Feb 2005 19:16:09 +0000 Subject: [PATCH] check.c (gfc_check_achar): New function * check.c (gfc_check_achar): New function * intrinsic.h: Prototype it. * intrinsic.c (add_function): Use it. * gfortran.dg/achar_1.f90: New test. From-SVN: r95288 --- gcc/fortran/ChangeLog | 6 ++++++ gcc/fortran/check.c | 10 ++++++++++ gcc/fortran/intrinsic.c | 2 +- gcc/fortran/intrinsic.h | 1 + gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/gfortran.dg/achar_1.f90 | 8 ++++++++ 6 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/achar_1.f90 diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index e8d487a63412..54c37ab2264d 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2005-02-19 Steven G. Kargl + + * check.c (gfc_check_achar): New function + * intrinsic.h: Prototype it. + * intrinsic.c (add_function): Use it. + 2005-02-13 Tobias Schl"uter * trans-stmt.c (generate_loop_for_temp_to_lhs, diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c index a63112bd81ef..0a26f2939094 100644 --- a/gcc/fortran/check.c +++ b/gcc/fortran/check.c @@ -401,6 +401,16 @@ gfc_check_abs (gfc_expr * a) return SUCCESS; } +try +gfc_check_achar (gfc_expr * a) +{ + + if (type_check (a, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + try gfc_check_all_any (gfc_expr * mask, gfc_expr * dim) diff --git a/gcc/fortran/intrinsic.c b/gcc/fortran/intrinsic.c index 03d443f3c520..3c1b771c1a9b 100644 --- a/gcc/fortran/intrinsic.c +++ b/gcc/fortran/intrinsic.c @@ -894,7 +894,7 @@ add_functions (void) make_generic ("abs", GFC_ISYM_ABS, GFC_STD_F77); add_sym_1 ("achar", 1, 1, BT_CHARACTER, dc, GFC_STD_F95, - NULL, gfc_simplify_achar, NULL, + gfc_check_achar, gfc_simplify_achar, NULL, i, BT_INTEGER, di, REQUIRED); make_generic ("achar", GFC_ISYM_ACHAR, GFC_STD_F95); diff --git a/gcc/fortran/intrinsic.h b/gcc/fortran/intrinsic.h index 41593efe9c1f..85f3a253e6cc 100644 --- a/gcc/fortran/intrinsic.h +++ b/gcc/fortran/intrinsic.h @@ -31,6 +31,7 @@ try gfc_check_a_xkind (gfc_expr *, gfc_expr *); try gfc_check_a_p (gfc_expr *, gfc_expr *); try gfc_check_abs (gfc_expr *); +try gfc_check_achar (gfc_expr *); try gfc_check_all_any (gfc_expr *, gfc_expr *); try gfc_check_allocated (gfc_expr *); try gfc_check_associated (gfc_expr *, gfc_expr *); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 80c4f0713020..6d09ca0b334a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2005-02-19 Steven G. Kargl + + * gfortran.dg/achar_1.f90: New test. + 2005-02-19 Hans-Peter Nilsson * gcc.c-torture/execute/20020720-1.x: Don't XFAIL cris-*-*. diff --git a/gcc/testsuite/gfortran.dg/achar_1.f90 b/gcc/testsuite/gfortran.dg/achar_1.f90 new file mode 100644 index 000000000000..1fdb77472109 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/achar_1.f90 @@ -0,0 +1,8 @@ +! { dg-do run } +! achar() should work with all supported integer kinds. +program bug6 + integer(1) :: i = 65 + character a + a = achar(i) + if (a /= 'A') call abort +end program bug6