diff options
author | François-Xavier Coudert <fxcoudert@gcc.gnu.org> | 2005-03-22 22:08:22 +0000 |
---|---|---|
committer | François-Xavier Coudert <fxcoudert@gcc.gnu.org> | 2005-03-22 22:08:22 +0000 |
commit | f77b6ca3da8ff2f43a31ef3ec15ab7428827a691 (patch) | |
tree | c943a952cc8f85047adedcf7ede1cb9c387f3412 /gcc/fortran/check.c | |
parent | e5c4f28a6c44485134c426d5ad4ba3f90cc26a41 (diff) | |
download | gcc-f77b6ca3da8ff2f43a31ef3ec15ab7428827a691.zip gcc-f77b6ca3da8ff2f43a31ef3ec15ab7428827a691.tar.gz gcc-f77b6ca3da8ff2f43a31ef3ec15ab7428827a691.tar.bz2 |
Makefile.am: Added new files.
* Makefile.am: Added new files.
* Makefile.in: Regenerate.
* aclocal.m4: Regenerate.
* configure.ac: add checks for signal.h headers file, as well as
following functions: chdir, strerror, getlogin, gethostname, kill,
link, symlink, perror, sleep, time.
* configure: Regenerate.
* intrinsics/chdir.c, intrinsics/gerror.c, intrinsics/getlog.c,
intrinsics/hostnm.c, intrinsics/ierrno.c, intrinsics/kill.c,
intrinsics/link.c, intrinsics/perror.c, intrinsics/rename.c,
intrinsics/sleep.c, intrinsics/symlnk.c, intrinsics/time.c: Newly
implementend g77 intrinsics.
* check.c (gfc_check_chdir, gfc_check_chdir_sub, gfc_check_kill,
gfc_check_kill_sub, gfc_check_link, gfc_check_link_sub,
gfc_check_symlnk, gfc_check_symlnk_sub, gfc_check_rename,
gfc_check_rename_sub, gfc_check_sleep_sub, gfc_check_gerror,
gfc_check_getlog, gfc_check_hostnm, gfc_check_hostnm_sub,
gfc_check_perror): new functions to check newly implemented
g77 intrinsics.
* gfortran.h: adding symbols for new intrinsics.
* intrinsic.c (add_functions): adding new intrinsics.
(add_subroutines): adding new intrinsics.
* intrinsic.h: prototype for all checking and resolving
functions.
* iresolve.c (gfc_resolve_chdir, gfc_resolve_chdir_sub,
gfc_resolve_hostnm, gfc_resolve_ierrno, gfc_resolve_kill,
gfc_resolve_link, gfc_resolve_rename, gfc_resolve_symlnk,
gfc_resolve_time, gfc_resolve_time8, gfc_resolve_rename_sub,
gfc_resolve_kill_sub, gfc_resolve_link_sub,
gfc_resolve_symlnk_sub, gfc_resolve_sleep_sub,
gfc_resolve_gerror, gfc_resolve_getlog, gfc_resolve_hostnm_sub,
gfc_resolve_perror): new functions to resolve intrinsics.
* trans-intrinsic.c (gfc_conv_intrinsic_function): add case
for new symbols.
* g77_intrinsics_funcs.f: New test.
* g77_intrinsics_sub.f: New test.
From-SVN: r96893
Diffstat (limited to 'gcc/fortran/check.c')
-rw-r--r-- | gcc/fortran/check.c | 241 |
1 files changed, 241 insertions, 0 deletions
diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c index 7a971f2..8fae444 100644 --- a/gcc/fortran/check.c +++ b/gcc/fortran/check.c @@ -575,6 +575,35 @@ gfc_check_char (gfc_expr * i, gfc_expr * kind) try +gfc_check_chdir (gfc_expr * dir) +{ + if (type_check (dir, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +try +gfc_check_chdir_sub (gfc_expr * dir, gfc_expr * status) +{ + if (type_check (dir, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + if (status == NULL) + return SUCCESS; + + if (type_check (status, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (status, 1) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +try gfc_check_cmplx (gfc_expr * x, gfc_expr * y, gfc_expr * kind) { if (numeric_check (x, 0) == FAILURE) @@ -1008,6 +1037,41 @@ gfc_check_ishftc (gfc_expr * i, gfc_expr * shift, gfc_expr * size) try +gfc_check_kill (gfc_expr * pid, gfc_expr * sig) +{ + if (type_check (pid, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (type_check (sig, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +try +gfc_check_kill_sub (gfc_expr * pid, gfc_expr * sig, gfc_expr * status) +{ + if (type_check (pid, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (type_check (sig, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + if (status == NULL) + return SUCCESS; + + if (type_check (status, 2, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (status, 2) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +try gfc_check_kind (gfc_expr * x) { if (x->ts.type == BT_DERIVED) @@ -1039,6 +1103,76 @@ gfc_check_lbound (gfc_expr * array, gfc_expr * dim) try +gfc_check_link (gfc_expr * path1, gfc_expr * path2) +{ + if (type_check (path1, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + if (type_check (path2, 1, BT_CHARACTER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +try +gfc_check_link_sub (gfc_expr * path1, gfc_expr * path2, gfc_expr * status) +{ + if (type_check (path1, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + if (type_check (path2, 1, BT_CHARACTER) == FAILURE) + return FAILURE; + + if (status == NULL) + return SUCCESS; + + if (type_check (status, 2, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (status, 2) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +try +gfc_check_symlnk (gfc_expr * path1, gfc_expr * path2) +{ + if (type_check (path1, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + if (type_check (path2, 1, BT_CHARACTER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +try +gfc_check_symlnk_sub (gfc_expr * path1, gfc_expr * path2, gfc_expr * status) +{ + if (type_check (path1, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + if (type_check (path2, 1, BT_CHARACTER) == FAILURE) + return FAILURE; + + if (status == NULL) + return SUCCESS; + + if (type_check (status, 2, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (status, 2) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +try gfc_check_logical (gfc_expr * a, gfc_expr * kind) { if (type_check (a, 0, BT_LOGICAL) == FAILURE) @@ -1454,6 +1588,41 @@ gfc_check_real (gfc_expr * a, gfc_expr * kind) try +gfc_check_rename (gfc_expr * path1, gfc_expr * path2) +{ + if (type_check (path1, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + if (type_check (path2, 1, BT_CHARACTER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +try +gfc_check_rename_sub (gfc_expr * path1, gfc_expr * path2, gfc_expr * status) +{ + if (type_check (path1, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + if (type_check (path2, 1, BT_CHARACTER) == FAILURE) + return FAILURE; + + if (status == NULL) + return SUCCESS; + + if (type_check (status, 2, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (status, 2) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +try gfc_check_repeat (gfc_expr * x, gfc_expr * y) { if (type_check (x, 0, BT_CHARACTER) == FAILURE) @@ -1658,6 +1827,19 @@ gfc_check_size (gfc_expr * array, gfc_expr * dim) try +gfc_check_sleep_sub (gfc_expr * seconds) +{ + if (type_check (seconds, 0, BT_INTEGER) == FAILURE) + return FAILURE; + + if (scalar_check (seconds, 0) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +try gfc_check_spread (gfc_expr * source, gfc_expr * dim, gfc_expr * ncopies) { if (source->rank >= GFC_MAX_DIMENSIONS) @@ -2234,6 +2416,16 @@ gfc_check_etime_sub (gfc_expr * values, gfc_expr * time) try +gfc_check_gerror (gfc_expr * msg) +{ + if (type_check (msg, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +try gfc_check_getcwd_sub (gfc_expr * cwd, gfc_expr * status) { if (type_check (cwd, 0, BT_CHARACTER) == FAILURE) @@ -2253,6 +2445,16 @@ gfc_check_getcwd_sub (gfc_expr * cwd, gfc_expr * status) try +gfc_check_getlog (gfc_expr * msg) +{ + if (type_check (msg, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +try gfc_check_exit (gfc_expr * status) { if (status == NULL) @@ -2285,6 +2487,45 @@ gfc_check_flush (gfc_expr * unit) try +gfc_check_hostnm (gfc_expr * name) +{ + if (type_check (name, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +try +gfc_check_hostnm_sub (gfc_expr * name, gfc_expr * status) +{ + if (type_check (name, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + if (status == NULL) + return SUCCESS; + + if (scalar_check (status, 1) == FAILURE) + return FAILURE; + + if (type_check (status, 1, BT_INTEGER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +try +gfc_check_perror (gfc_expr * string) +{ + if (type_check (string, 0, BT_CHARACTER) == FAILURE) + return FAILURE; + + return SUCCESS; +} + + +try gfc_check_umask (gfc_expr * mask) { if (type_check (mask, 0, BT_INTEGER) == FAILURE) |