decl.c (gfc_match_function_decl): Correctly error out in case of omitted function argument list.

fortran/
* decl.c (gfc_match_function_decl): Correctly error out in case of
omitted function argument list.
testsuite/
* gfortran.dg/func_decl_1.f90: New.
* gfortran.dg/array_alloc_1.f90: Fix wrong function declaration.
* gfortran.dg/array_alloc_2.f90: Likewise.
* gfortran.dg/char_result_8.f90: Likewise.
* gfortran.dg/dup_save_1.f90: Likewise.
* gfortran.dg/dup_save_2.f90: Likewise.
* gfortran.dg/f2c_6.f90: Likewise.
* gfortran.dg/f2c_7.f90: Likewise.
* gfortran.dg/func_result_2.f90: Likewise.
* gfortran.fortran-torture/execute/pr23373-2.f90: Likewise.

From-SVN: r109451
This commit is contained in:
Tobias Schlüter 2006-01-07 17:30:53 +01:00 committed by Tobias Schlüter
parent 5487b6e597
commit 2b9a33aeea
13 changed files with 72 additions and 23 deletions

View File

@ -1,3 +1,8 @@
2005-01-07 Tobias Schl"uter <tobias.schlueter@physik.uni-muenchen.de>
* decl.c (gfc_match_function_decl): Correctly error out in case of
omitted function argument list.
2006-01-07 Paul Thomas <pault@gcc.gnu.org>
PR fortran/22146

View File

@ -2548,7 +2548,12 @@ gfc_match_function_decl (void)
m = gfc_match_formal_arglist (sym, 0, 0);
if (m == MATCH_NO)
gfc_error ("Expected formal argument list in function definition at %C");
{
gfc_error ("Expected formal argument list in function "
"definition at %C");
m = MATCH_ERROR;
goto cleanup;
}
else if (m == MATCH_ERROR)
goto cleanup;

View File

@ -1,3 +1,16 @@
2005-01-07 Tobias Schl"uter <tobias.schlueter@physik.uni-muenchen.de>
* gfortran.dg/func_decl_1.f90: New.
* gfortran.dg/array_alloc_1.f90: Fix wrong function declaration.
* gfortran.dg/array_alloc_2.f90: Likewise.
* gfortran.dg/char_result_8.f90: Likewise.
* gfortran.dg/dup_save_1.f90: Likewise.
* gfortran.dg/dup_save_2.f90: Likewise.
* gfortran.dg/f2c_6.f90: Likewise.
* gfortran.dg/f2c_7.f90: Likewise.
* gfortran.dg/func_result_2.f90: Likewise.
* gfortran.fortran-torture/execute/pr23373-2.f90: Likewise.
2006-01-07 Paul Thomas <pault@gcc.gnu.org>
PR fortran/22146

View File

@ -13,7 +13,7 @@ contains
end do
end subroutine test
function f
function f ()
integer, dimension (10) :: f
integer :: i
forall (i = 1:10) f (i) = i * 100

View File

@ -17,7 +17,7 @@ contains
end do
end subroutine test
function f1
function f1 ()
integer, dimension (n) :: f1
integer :: i
forall (i = 1:n) f1 (i) = i * 100

View File

@ -13,7 +13,7 @@ program main
call indirect (100)
contains
function f1
function f1 ()
character (len = 30) :: f1
f1 = ''
end function f1
@ -24,7 +24,7 @@ contains
f2 = ''
end function f2
function f3
function f3 ()
character (len = 30), pointer :: f3
f3 => string
end function f3

View File

@ -19,7 +19,7 @@ program save_1
end do
end program save_1
integer function foo1
integer function foo1 ()
integer j
save
save ! { dg-warning "Blanket SAVE" }
@ -28,7 +28,7 @@ integer function foo1
foo1 = j
end function foo1
integer function foo2
integer function foo2 ()
integer j
save j
save j ! { dg-warning "Duplicate SAVE" }
@ -37,7 +37,7 @@ integer function foo2
foo2 = j
end function foo2
integer function foo3
integer function foo3 ()
integer j ! { dg-warning "Duplicate SAVE" }
save
save j ! { dg-warning "SAVE statement" }
@ -46,7 +46,7 @@ integer function foo3
foo3 = j
end function foo3
integer function foo4
integer function foo4 ()
integer j ! { dg-warning "Duplicate SAVE" }
save j
save

View File

@ -20,7 +20,7 @@ program save_2
end do
end program save_2
integer function foo1
integer function foo1 ()
integer j
save
save ! { dg-error "Blanket SAVE" }
@ -29,7 +29,7 @@ integer function foo1
foo1 = j
end function foo1
integer function foo2
integer function foo2 ()
integer j
save j
save j ! { dg-error "Duplicate SAVE" }
@ -38,7 +38,7 @@ integer function foo2
foo2 = j
end function foo2
integer function foo3
integer function foo3 ()
integer j
save
save j ! { dg-error "SAVE statement" }
@ -47,7 +47,7 @@ integer function foo3
foo3 = j
end function foo3
integer function foo4
integer function foo4 ()
integer j ! { dg-error "Duplicate SAVE" }
save j
save

View File

@ -38,22 +38,22 @@ function f() result(r)
end function f
interface
function c
function c ()
complex, pointer :: c
end function c
end interface
interface
function d
function d()
complex, pointer :: d
end function d
end interface
interface
function e result(r)
function e () result(r)
complex, pointer :: r
end function e
end interface
interface
function f result(r)
function f () result(r)
complex, pointer :: r
end function f
end interface

View File

@ -17,12 +17,12 @@ end function d
subroutine test_without_result
interface
function c
function c ()
complex :: c(5)
end function c
end interface
interface
function d
function d ()
complex :: d(5)
end function d
end interface
@ -35,12 +35,12 @@ end subroutine test_without_result
subroutine test_with_result
interface
function c result(r)
function c () result(r)
complex :: r(5)
end function c
end interface
interface
function d result(r)
function d () result(r)
complex :: r(5)
end function d
end interface

View File

@ -0,0 +1,26 @@
! { dg-do compile }
! we didn't correctly reject function declarations without argument lists
! note that there are no end statements for syntactically wrong function
! declarations
interface
function f1 ! { dg-error "Expected formal argument list" }
function f3()
end function f3
function f4 result (x) ! { dg-error "Expected formal argument list" }
function f5() result (x)
end function f5
end interface
f1 = 1.
end
FUNCTION f1 ! { dg-error "Expected formal argument list" }
function f2()
f2 = 1.
end function f2
function f3 result (x) ! { dg-error "Expected formal argument list" }
function f4 () result (x)
x = 4.
end function f4

View File

@ -3,7 +3,7 @@
program testch
if (ch().ne."hello ") call abort()
contains
function ch result(str)
function ch () result(str)
character(len = 10) :: str
str ="hello"
end function ch

View File

@ -6,7 +6,7 @@ program main
if (.not. associated (x)) call abort
if (size (x) .ne. 10) call abort
contains
function test
function test()
real, dimension (:), pointer :: test
if (associated (x)) call abort
allocate (test (10))