summaryrefslogtreecommitdiff
path: root/gcc/testsuite/gfortran.dg
diff options
context:
space:
mode:
authorfxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4>2006-07-30 20:48:00 +0000
committerfxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4>2006-07-30 20:48:00 +0000
commitd2fc5bb1c109c1afbe52c970650c2cc250b95459 (patch)
tree42900f38bd309eacda612a5027a33176a6f75fb0 /gcc/testsuite/gfortran.dg
parent5d87d34c2adc7950a04fda3147e59ab7ff527639 (diff)
downloadgcc-d2fc5bb1c109c1afbe52c970650c2cc250b95459.tar.gz
* intrinsic.c (add_functions): Add ACCESS, CHMOD, RSHIFT, LSHIFT.
(add_subroutines): Add LTIME, GMTIME and CHMOD. * intrinsic.h (gfc_check_access_func, gfc_check_chmod, gfc_check_chmod_sub, gfc_check_ltime_gmtime, gfc_simplify_rshift, gfc_simplify_lshift, gfc_resolve_access, gfc_resolve_chmod, gfc_resolve_rshift, gfc_resolve_lshift, gfc_resolve_chmod_sub, gfc_resolve_gmtime, gfc_resolve_ltime): Add prototypes. * gfortran.h (gfc_generic_isym_id): Add GFC_ISYM_ACCESS, GFC_ISYM_CHMOD, GFC_ISYM_LSHIFT, GFC_ISYM_RSHIFT. * iresolve.c (gfc_resolve_access, gfc_resolve_chmod, gfc_resolve_rshift, gfc_resolve_lshift, gfc_resolve_chmod_sub, gfc_resolve_gmtime, gfc_resolve_ltime): New functions. * check.c (gfc_check_access_func, gfc_check_chmod, gfc_check_chmod_sub, gfc_check_ltime_gmtime): New functions. * trans-intrinsic.c (gfc_conv_intrinsic_rlshift): New function. (gfc_conv_intrinsic_function): Add cases for the new GFC_ISYM_*. * intrinsics/date_and_time.c: Add functions for GMTIME and LTIME. * intrinsics/access.c: New file. * intrinsics/chmod.c: New file. * configure.ac: Add checks for <sys/wait.h>, access, fork,execl and wait. * Makefile.am: Add new files intrinsics/access.c and intrinsics/chmod.c. * configure: Regenerate. * config.h.in: Regenerate. * Makefile.in: Regenerate. * gcc/testsuite/gfortran.dg/chmod_3.f90: New test. * gcc/testsuite/gfortran.dg/ltime_gmtime_1.f90: New test. * gcc/testsuite/gfortran.dg/ltime_gmtime_2.f90: New test. * gcc/testsuite/gfortran.dg/lrshift_1.f90: New test. * gcc/testsuite/gfortran.dg/chmod_1.f90: New test. * gcc/testsuite/gfortran.dg/chmod_2.f90: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@115825 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/testsuite/gfortran.dg')
-rw-r--r--gcc/testsuite/gfortran.dg/chmod_1.f9034
-rw-r--r--gcc/testsuite/gfortran.dg/chmod_2.f9034
-rw-r--r--gcc/testsuite/gfortran.dg/chmod_3.f9034
-rw-r--r--gcc/testsuite/gfortran.dg/lrshift_1.f9018
-rw-r--r--gcc/testsuite/gfortran.dg/ltime_gmtime_1.f909
-rw-r--r--gcc/testsuite/gfortran.dg/ltime_gmtime_2.f909
6 files changed, 138 insertions, 0 deletions
diff --git a/gcc/testsuite/gfortran.dg/chmod_1.f90 b/gcc/testsuite/gfortran.dg/chmod_1.f90
new file mode 100644
index 00000000000..e9ea27f1b1d
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/chmod_1.f90
@@ -0,0 +1,34 @@
+! { dg-do run }
+! { dg-options "-std=gnu" }
+ implicit none
+ character(len=*), parameter :: n = "foobar_file"
+ integer :: i
+
+ open (10,file=n)
+ close (10,status="delete")
+
+ open (10,file=n)
+ close (10,status="keep")
+
+ if (access(n,"") /= 0 .or. access(n," ") /= 0 .or. access(n,"r") /= 0 .or. &
+ access(n,"R") /= 0 .or. access(n,"w") /= 0 .or. access(n,"W") /= 0) &
+ call abort
+
+ call chmod (n, "a+x", i)
+ if (i == 0) then
+ if (access(n,"x") /= 0 .or. access(n,"X") /= 0) call abort
+ end if
+
+ call chmod (n, "a-w", i)
+ if (i == 0) then
+ if (access(n,"w") == 0 .or. access(n,"W") == 0) call abort
+ end if
+
+ open (10,file=n)
+ close (10,status="delete")
+
+ if (access(n,"") == 0 .or. access(n," ") == 0 .or. access(n,"r") == 0 .or. &
+ access(n,"R") == 0 .or. access(n,"w") == 0 .or. access(n,"W") == 0) &
+ call abort
+
+ end
diff --git a/gcc/testsuite/gfortran.dg/chmod_2.f90 b/gcc/testsuite/gfortran.dg/chmod_2.f90
new file mode 100644
index 00000000000..e413fcad8f3
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/chmod_2.f90
@@ -0,0 +1,34 @@
+! { dg-do run }
+! { dg-options "-std=gnu" }
+ implicit none
+ character(len=*), parameter :: n = "foobar_file"
+ integer :: i
+
+ open (10,file=n)
+ close (10,status="delete")
+
+ open (10,file=n)
+ close (10,status="keep")
+
+ if (access(n,"") /= 0 .or. access(n," ") /= 0 .or. access(n,"r") /= 0 .or. &
+ access(n,"R") /= 0 .or. access(n,"w") /= 0 .or. access(n,"W") /= 0) &
+ call abort
+
+ i = chmod (n, "a+x")
+ if (i == 0) then
+ if (access(n,"x") /= 0 .or. access(n,"X") /= 0) call abort
+ end if
+
+ i = chmod (n, "a-w")
+ if (i == 0) then
+ if (access(n,"w") == 0 .or. access(n,"W") == 0) call abort
+ end if
+
+ open (10,file=n)
+ close (10,status="delete")
+
+ if (access(n,"") == 0 .or. access(n," ") == 0 .or. access(n,"r") == 0 .or. &
+ access(n,"R") == 0 .or. access(n,"w") == 0 .or. access(n,"W") == 0) &
+ call abort
+
+ end
diff --git a/gcc/testsuite/gfortran.dg/chmod_3.f90 b/gcc/testsuite/gfortran.dg/chmod_3.f90
new file mode 100644
index 00000000000..4ea34eb8cf4
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/chmod_3.f90
@@ -0,0 +1,34 @@
+! { dg-do run }
+! { dg-options "-std=gnu -fdefault-integer-8" }
+ implicit none
+ character(len=*), parameter :: n = "foobar_file"
+ integer :: i
+
+ open (10,file=n)
+ close (10,status="delete")
+
+ open (10,file=n)
+ close (10,status="keep")
+
+ if (access(n,"") /= 0 .or. access(n," ") /= 0 .or. access(n,"r") /= 0 .or. &
+ access(n,"R") /= 0 .or. access(n,"w") /= 0 .or. access(n,"W") /= 0) &
+ call abort
+
+ i = chmod (n, "a+x")
+ if (i == 0) then
+ if (access(n,"x") /= 0 .or. access(n,"X") /= 0) call abort
+ end if
+
+ i = chmod (n, "a-w")
+ if (i == 0) then
+ if (access(n,"w") == 0 .or. access(n,"W") == 0) call abort
+ end if
+
+ open (10,file=n)
+ close (10,status="delete")
+
+ if (access(n,"") == 0 .or. access(n," ") == 0 .or. access(n,"r") == 0 .or. &
+ access(n,"R") == 0 .or. access(n,"w") == 0 .or. access(n,"W") == 0) &
+ call abort
+
+ end
diff --git a/gcc/testsuite/gfortran.dg/lrshift_1.f90 b/gcc/testsuite/gfortran.dg/lrshift_1.f90
new file mode 100644
index 00000000000..7feed2962ea
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/lrshift_1.f90
@@ -0,0 +1,18 @@
+! { dg-do run }
+! { dg-options "-std=gnu -w" }
+! { dg-additional-sources lrshift_1.c }
+program test_rshift_lshift
+ implicit none
+ integer :: i(15), j, n
+ integer, external :: c_lshift, c_rshift
+
+ i = (/ -huge(i), -huge(i)/2, -129, -128, -127, -2, -1, 0, &
+ 1, 2, 127, 128, 129, huge(i)/2, huge(i) /)
+
+ do n = 1, size(i)
+ do j = -30, 30
+ if (lshift(i(n),j) /= c_lshift(i(n),j)) call abort
+ if (rshift(i(n),j) /= c_rshift(i(n),j)) call abort
+ end do
+ end do
+end program test_rshift_lshift
diff --git a/gcc/testsuite/gfortran.dg/ltime_gmtime_1.f90 b/gcc/testsuite/gfortran.dg/ltime_gmtime_1.f90
new file mode 100644
index 00000000000..9babbaf1e5d
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/ltime_gmtime_1.f90
@@ -0,0 +1,9 @@
+! { dg-do run }
+! { dg-options "-std=gnu" }
+ integer :: x(9), y(9), t
+
+ t = time()
+ call ltime(t,x)
+ call gmtime(t,y)
+ if (x(1) /= y(1) .or. x(2) /= y(2)) call abort
+ end
diff --git a/gcc/testsuite/gfortran.dg/ltime_gmtime_2.f90 b/gcc/testsuite/gfortran.dg/ltime_gmtime_2.f90
new file mode 100644
index 00000000000..870f011692e
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/ltime_gmtime_2.f90
@@ -0,0 +1,9 @@
+! { dg-do run }
+! { dg-options "-fdefault-integer-8 -std=gnu" }
+ integer :: x(9), y(9), t
+
+ t = time()
+ call ltime(t,x)
+ call gmtime(t,y)
+ if (x(1) /= y(1) .or. x(2) /= y(2)) call abort
+ end