re PR fortran/90744 (Bogus length for character temporaries passed to external procedures since r268992)

2019-06-08  Thomas Koenig  <tkoenig@gcc.gnu.org>
	Tomáš Trnka  <trnka@scm.com>

	PR fortran/90744
	* trans-types.c (get_formal_from_actual_arglist): Unset typespec
	flags which make no sense for procedures without explicit
	interface.

2019-06-08  Thomas Koenig  <tkoenig@gcc.gnu.org>
	Tomáš Trnka  <trnka@scm.com>

	PR fortran/90744
	* gfortran.dg/deferred_character_33.f90: New test.
	* gfortran.dg/deferred_character_33a.f90: New test.

From-SVN: r272082
This commit is contained in:
Thomas Koenig 2019-06-08 13:50:42 +00:00
parent 604ba08ab4
commit 304d779b9e
5 changed files with 63 additions and 1 deletions

View file

@ -1,3 +1,11 @@
2019-06-08 Thomas Koenig <tkoenig@gcc.gnu.org>
Tomáš Trnka <trnka@scm.com>
PR fortran/90744
* trans-types.c (get_formal_from_actual_arglist): Unset typespec
flags which make no sense for procedures without explicit
interface.
2019-06-02 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/90539

View file

@ -3005,6 +3005,9 @@ get_formal_from_actual_arglist (gfc_symbol *sym, gfc_actual_arglist *actual_args
else
{
s->ts = a->expr->ts;
s->ts.deferred = 0;
s->ts.is_iso_c = 0;
s->ts.is_c_interop = 0;
s->attr.flavor = FL_VARIABLE;
if (a->expr->rank > 0)
{

View file

@ -1,3 +1,10 @@
2019-06-08 Thomas Koenig <tkoenig@gcc.gnu.org>
Tomáš Trnka <trnka@scm.com>
PR fortran/90744
* gfortran.dg/deferred_character_33.f90: New test.
* gfortran.dg/deferred_character_33a.f90: New test.
2019-06-08 Marek Polacek <polacek@redhat.com>
PR c++/77548
@ -10,7 +17,7 @@
* gcc.target/aarch64/sve/init_1.c: Remove options
-O2 -fno-schedule-insns and instead pass -O.
Update assembly in comments.
Update assembly in comments.
* gcc.target/aarch64/sve/init_2.c: Likewise.
* gcc.target/aarch64/sve/init_3.c: Likewise.
* gcc.target/aarch64/sve/init_4.c: Likewise.

View file

@ -0,0 +1,35 @@
! { dg-do run }
! { dg-additional-sources deferred_character_33a.f90 }
! PR fortran/90744 - this used to pass a wrong length
! to an external function without a prototype.
! Original test case by Tomáš Trnka.
module StringModule
implicit none
contains
function getstr()
character(:), allocatable :: getstr
getstr = 'OK'
end function
end module
module TestModule
use StringModule
implicit none
contains
subroutine DoTest()
if (.false.) then
call convrs('A',getstr())
else
call convrs('B',getstr())
end if
end subroutine
end module
program external_char_length
use TestModule
implicit none
call DoTest()
end program

View file

@ -0,0 +1,9 @@
! { dg-do compile }
subroutine convrs(quanty,fromto)
implicit none
character(*), intent(in) :: quanty,fromto
if (len(fromto) /= 2) stop 1
if (fromto /= 'OK') stop 2
end subroutine