mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-14 21:01:22 +08:00
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
This commit is contained in:
parent
e2d299684b
commit
a7ca4d8d3d
@ -1,3 +1,9 @@
|
||||
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
|
||||
|
@ -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++;
|
||||
|
||||
|
@ -1,3 +1,8 @@
|
||||
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
|
||||
|
50
gcc/testsuite/gfortran.dg/ambiguous_reference_1.f90
Normal file
50
gcc/testsuite/gfortran.dg/ambiguous_reference_1.f90
Normal file
@ -0,0 +1,50 @@
|
||||
! { 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" } }
|
Loading…
x
Reference in New Issue
Block a user