diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index aaf2c882dc1..d83acc73142 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2009-07-15 Janus Weil + + PR fortran/40743 + * resolve.c (resolve_symbol): Don't resolve the formal namespace of a + contained procedure. + 2009-07-14 Taras Glek Rafael Espindola diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 880dfd0e886..5b4fc2d6949 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -9842,7 +9842,8 @@ resolve_symbol (gfc_symbol *sym) formal_arg_flag = 0; /* Resolve formal namespaces. */ - if (sym->formal_ns && sym->formal_ns != gfc_current_ns) + if (sym->formal_ns && sym->formal_ns != gfc_current_ns + && !sym->attr.contained) gfc_resolve (sym->formal_ns); /* Make sure the formal namespace is present. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6f30aef5fcc..4dc08012919 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-07-15 Janus Weil + + PR fortran/40743 + * gfortran.dg/interface_assignment_4.f90: New. + 2009-07-15 Gerald Pfeifer * gcc.dg/builtins-config.h (HAVE_C99_RUNTIME): Do not define diff --git a/gcc/testsuite/gfortran.dg/interface_assignment_4.f90 b/gcc/testsuite/gfortran.dg/interface_assignment_4.f90 new file mode 100644 index 00000000000..535e8842549 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/interface_assignment_4.f90 @@ -0,0 +1,35 @@ +! { dg-do compile } +! +! PR 40743: [4.5 Regression] ICE when compiling iso_varying_string.f95 at revision 149591 +! +! Reduced from http://www.fortran.com/iso_varying_string.f95 +! Contributed by Janus Weil + + implicit none + + type :: varying_string + end type + + interface assignment(=) + procedure op_assign_VS_CH + end interface + +contains + + subroutine op_assign_VS_CH (var, exp) + type(varying_string), intent(out) :: var + character(LEN=*), intent(in) :: exp + end subroutine + + subroutine split_VS + type(varying_string) :: string + call split_CH(string) + end subroutine + + subroutine split_CH (string) + type(varying_string) :: string + string = "" + end subroutine + +end +