Commit a7ca4d8d by Paul Thomas

re PR fortran/33550 (ICE (segfault) when USEing ambiguous symbols)

2007-10-02  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/33550
	* decl.c (get_proc_name): Return rc if rc is non-zero; ie. if
	the name is a reference to an ambiguous symbol.

2007-10-02  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/33550
	* gfortran.dg/ambiguous_reference_1.f90: New test.

From-SVN: r128949
parent e2d29968
2007-10-02 Paul Thomas <pault@gcc.gnu.org>
PR fortran/33550
* decl.c (get_proc_name): Return rc if rc is non-zero; ie. if
the name is a reference to an ambiguous symbol.
2007-10-02 Paul Thomas <pault@gcc.gnu.org>
PR fortran/31154
PR fortran/31229
PR fortran/33334
......
......@@ -672,7 +672,7 @@ get_proc_name (const char *name, gfc_symbol **result, bool module_fcn_entry)
{
gfc_symtree *st;
gfc_symbol *sym;
int rc;
int rc = 0;
/* Module functions have to be left in their own namespace because
they have potentially (almost certainly!) already been referenced.
......@@ -709,6 +709,9 @@ get_proc_name (const char *name, gfc_symbol **result, bool module_fcn_entry)
else
rc = gfc_get_symbol (name, gfc_current_ns->parent, result);
if (rc)
return rc;
sym = *result;
gfc_current_ns->refs++;
......
2007-10-02 Paul Thomas <pault@gcc.gnu.org>
PR fortran/33550
* gfortran.dg/ambiguous_reference_1.f90: New test.
2007-10-02 Paul Thomas <pault@gcc.gnu.org>
PR fortran/31154
PR fortran/31229
PR fortran/33334
! { dg-do compile }
! Tests the fix for PR33550, in which an ICE would occur, instead of
! the abiguous reference error.
!
! Found at
! http://groups.google.com/group/comp.lang.fortran/browse_thread/thread/1abc1549a6a164f1/
! by James Van Buskirk:
!
module M1
real x
end module M1
module M2
contains
subroutine y
end subroutine y
end module M2
module M3
use M2, x => y
end module M3
module M4
use M1
use M3
end module M4
module M5
use M4 ! 'x' is ambiguous here but is not referred to
end module M5
module M6
use M5 ! ditto
end module M6
program test
use M1
use M3
interface
function x(z) ! { dg-error "ambiguous reference" }
end function x ! { dg-error "Expecting END INTERFACE" }
end interface
write(*,*) 'Hello, world!'
end program test
function x(z)
x = z
end function x
! { dg-final { cleanup-modules "m1 m2 m3 m4 m5 m6" } }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment