Commit 9e35b386 by Erik Edelmann Committed by Tobias Schlüter

re PR fortran/20363 (interface body has incorrect scope)

2005-08-25  Erik Edelmann  <eedelman@acclab.helsinki.fi>
fortran/
	PR fortran/20363
	* symbol.c (find_special): Remove.
	(build_sym, add_init_expr, attr_decl1): Remove calls to
	find_special in favor of calls to gfc_get_symbol.
testsuite/
	PR fortran/20363
	* gfortran.dg/named_interface.f90: New.

From-SVN: r103486
parent a5e668d5
2005-08-25 Erik Edelmann <eedelman@acclab.helsinki.fi>
PR fortran/20363
* symbol.c (find_special): Remove.
(build_sym, add_init_expr, attr_decl1): Remove calls to
find_special in favor of calls to gfc_get_symbol.
2005-08-24 Thomas Koenig <Thomas.Koenig@online.de> 2005-08-24 Thomas Koenig <Thomas.Koenig@online.de>
PR fortran/17758 PR fortran/17758
......
...@@ -530,29 +530,34 @@ syntax: ...@@ -530,29 +530,34 @@ syntax:
} }
/* Special subroutine for finding a symbol. If we're compiling a /* Special subroutine for finding a symbol. Check if the name is found
function or subroutine and the parent compilation unit is an in the current name space. If not, and we're compiling a function or
interface, then check to see if the name we've been given is the subroutine and the parent compilation unit is an interface, then check
name of the interface (located in another namespace). If so, to see if the name we've been given is the name of the interface
return that symbol. If not, use gfc_get_symbol(). */ (located in another namespace). */
static int static int
find_special (const char *name, gfc_symbol ** result) find_special (const char *name, gfc_symbol ** result)
{ {
gfc_state_data *s; gfc_state_data *s;
int i;
i = gfc_get_symbol (name, NULL, result);
if (i==0)
goto end;
if (gfc_current_state () != COMP_SUBROUTINE if (gfc_current_state () != COMP_SUBROUTINE
&& gfc_current_state () != COMP_FUNCTION) && gfc_current_state () != COMP_FUNCTION)
goto normal; goto end;
s = gfc_state_stack->previous; s = gfc_state_stack->previous;
if (s == NULL) if (s == NULL)
goto normal; goto end;
if (s->state != COMP_INTERFACE) if (s->state != COMP_INTERFACE)
goto normal; goto end;
if (s->sym == NULL) if (s->sym == NULL)
goto normal; /* Nameless interface */ goto end; /* Nameless interface */
if (strcmp (name, s->sym->name) == 0) if (strcmp (name, s->sym->name) == 0)
{ {
...@@ -560,8 +565,8 @@ find_special (const char *name, gfc_symbol ** result) ...@@ -560,8 +565,8 @@ find_special (const char *name, gfc_symbol ** result)
return 0; return 0;
} }
normal: end:
return gfc_get_symbol (name, NULL, result); return i;
} }
...@@ -616,7 +621,8 @@ build_sym (const char *name, gfc_charlen * cl, ...@@ -616,7 +621,8 @@ build_sym (const char *name, gfc_charlen * cl,
symbol_attribute attr; symbol_attribute attr;
gfc_symbol *sym; gfc_symbol *sym;
if (find_special (name, &sym)) /* if (find_special (name, &sym)) */
if (gfc_get_symbol (name, NULL, &sym))
return FAILURE; return FAILURE;
/* Start updating the symbol table. Add basic type attribute /* Start updating the symbol table. Add basic type attribute
......
2005-08-25 Erik Edelmann <eedelman@acclab.helsinki.fi>
PR fortran/20363
* gfortran.dg/named_interface.f90: New.
2005-08-26 Maciej W. Rozycki <macro@linux-mips.org> 2005-08-26 Maciej W. Rozycki <macro@linux-mips.org>
* gcc.c-torture/execute/frame-address.c: New test. * gcc.c-torture/execute/frame-address.c: New test.
......
! { dg-do compile }
! PR 20363
module snafu
interface foo
subroutine really_snafu (foo)
integer, intent (inout) :: foo
end subroutine really_snafu
end interface foo
end module snafu
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