re PR fortran/35831 ([F95] Shape mismatch check missing for dummy procedure argument)
2013-12-10 Janus Weil <janus@gcc.gnu.org> PR fortran/35831 * interface.c (check_dummy_characteristics): Add checks for several attributes. 2013-12-10 Janus Weil <janus@gcc.gnu.org> PR fortran/35831 * gfortran.dg/c_by_val_5.f90: Modified. * gfortran.dg/dummy_procedure_10.f90: New. From-SVN: r205873
This commit is contained in:
parent
61063a2a69
commit
688974a346
|
@ -1,3 +1,9 @@
|
||||||
|
2013-12-10 Janus Weil <janus@gcc.gnu.org>
|
||||||
|
|
||||||
|
PR fortran/35831
|
||||||
|
* interface.c (check_dummy_characteristics): Add checks for several
|
||||||
|
attributes.
|
||||||
|
|
||||||
2013-12-10 Janus Weil <janus@gcc.gnu.org>
|
2013-12-10 Janus Weil <janus@gcc.gnu.org>
|
||||||
|
|
||||||
* gfortran.texi: Add possible kind values (and default) for
|
* gfortran.texi: Add possible kind values (and default) for
|
||||||
|
|
|
@ -1114,8 +1114,37 @@ check_dummy_characteristics (gfc_symbol *s1, gfc_symbol *s2,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* FIXME: Do more comprehensive testing of attributes, like e.g.
|
/* Check ASYNCHRONOUS attribute. */
|
||||||
ASYNCHRONOUS, CONTIGUOUS, VALUE, VOLATILE, etc. */
|
if (s1->attr.asynchronous != s2->attr.asynchronous)
|
||||||
|
{
|
||||||
|
snprintf (errmsg, err_len, "ASYNCHRONOUS mismatch in argument '%s'",
|
||||||
|
s1->name);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check CONTIGUOUS attribute. */
|
||||||
|
if (s1->attr.contiguous != s2->attr.contiguous)
|
||||||
|
{
|
||||||
|
snprintf (errmsg, err_len, "CONTIGUOUS mismatch in argument '%s'",
|
||||||
|
s1->name);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check VALUE attribute. */
|
||||||
|
if (s1->attr.value != s2->attr.value)
|
||||||
|
{
|
||||||
|
snprintf (errmsg, err_len, "VALUE mismatch in argument '%s'",
|
||||||
|
s1->name);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check VOLATILE attribute. */
|
||||||
|
if (s1->attr.volatile_ != s2->attr.volatile_)
|
||||||
|
{
|
||||||
|
snprintf (errmsg, err_len, "VOLATILE mismatch in argument '%s'",
|
||||||
|
s1->name);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/* Check interface of dummy procedures. */
|
/* Check interface of dummy procedures. */
|
||||||
if (s1->attr.flavor == FL_PROCEDURE)
|
if (s1->attr.flavor == FL_PROCEDURE)
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
2013-12-10 Janus Weil <janus@gcc.gnu.org>
|
||||||
|
|
||||||
|
PR fortran/35831
|
||||||
|
* gfortran.dg/c_by_val_5.f90: Modified.
|
||||||
|
* gfortran.dg/dummy_procedure_10.f90: New.
|
||||||
|
|
||||||
2013-12-10 Yury Gribov <y.gribov@samsung.com>
|
2013-12-10 Yury Gribov <y.gribov@samsung.com>
|
||||||
|
|
||||||
* gcc-dg/tsan/tsan.exp: Added missing call to torture-finish.
|
* gcc-dg/tsan/tsan.exp: Added missing call to torture-finish.
|
||||||
|
|
|
@ -23,7 +23,7 @@ module x
|
||||||
! "external" only.
|
! "external" only.
|
||||||
interface
|
interface
|
||||||
subroutine bmp_write(nx)
|
subroutine bmp_write(nx)
|
||||||
integer :: nx
|
integer, value :: nx
|
||||||
end subroutine bmp_write
|
end subroutine bmp_write
|
||||||
end interface
|
end interface
|
||||||
contains
|
contains
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
! { dg-do compile }
|
||||||
|
!
|
||||||
|
! PR 35831: [F95] Shape mismatch check missing for dummy procedure argument
|
||||||
|
!
|
||||||
|
! Contributed by Janus Weil <janus@gcc.gnu.org>
|
||||||
|
|
||||||
|
program test_attributes
|
||||||
|
|
||||||
|
call tester1 (a1) ! { dg-error "ASYNCHRONOUS mismatch in argument" }
|
||||||
|
call tester2 (a2) ! { dg-error "CONTIGUOUS mismatch in argument" }
|
||||||
|
call tester3 (a1) ! { dg-error "VALUE mismatch in argument" }
|
||||||
|
call tester4 (a1) ! { dg-error "VOLATILE mismatch in argument" }
|
||||||
|
|
||||||
|
contains
|
||||||
|
|
||||||
|
subroutine a1(aa)
|
||||||
|
real :: aa
|
||||||
|
end subroutine
|
||||||
|
|
||||||
|
subroutine a2(bb)
|
||||||
|
real :: bb(:)
|
||||||
|
end subroutine
|
||||||
|
|
||||||
|
subroutine tester1 (f1)
|
||||||
|
interface
|
||||||
|
subroutine f1 (a)
|
||||||
|
real, asynchronous :: a
|
||||||
|
end subroutine
|
||||||
|
end interface
|
||||||
|
end subroutine
|
||||||
|
|
||||||
|
subroutine tester2 (f2)
|
||||||
|
interface
|
||||||
|
subroutine f2 (b)
|
||||||
|
real, contiguous :: b(:)
|
||||||
|
end subroutine
|
||||||
|
end interface
|
||||||
|
end subroutine
|
||||||
|
|
||||||
|
subroutine tester3 (f3)
|
||||||
|
interface
|
||||||
|
subroutine f3 (c)
|
||||||
|
real, value :: c
|
||||||
|
end subroutine
|
||||||
|
end interface
|
||||||
|
end subroutine
|
||||||
|
|
||||||
|
subroutine tester4 (f4)
|
||||||
|
interface
|
||||||
|
subroutine f4 (d)
|
||||||
|
real, volatile :: d
|
||||||
|
end subroutine
|
||||||
|
end interface
|
||||||
|
end subroutine
|
||||||
|
|
||||||
|
end
|
Loading…
Reference in New Issue