mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-05 17:30:58 +08:00
re PR fortran/60526 (Accepts-invalid: Variable name same as type name)
2016-02-14 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/60526 * decl.c (build_sym): If the name has already been defined as a type, it has a symtree with an upper case letter at the beginning. If such a symtree exists, issue an error and exit. Don't do this if there is no corresponding upper case letter. 2016-02-14 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/60526 * gfortran.dg/type_decl_4.f90: Reinstated. From-SVN: r233413
This commit is contained in:
parent
d33082792f
commit
1e6025b653
@ -1,3 +1,11 @@
|
||||
2016-02-14 Thomas Koenig <tkoenig@gcc.gnu.org>
|
||||
|
||||
PR fortran/60526
|
||||
* decl.c (build_sym): If the name has already been defined as a
|
||||
type, it has a symtree with an upper case letter at the beginning.
|
||||
If such a symtree exists, issue an error and exit. Don't do
|
||||
this if there is no corresponding upper case letter.
|
||||
|
||||
2016-02-14 Thomas Koenig <tkoenig@gcc.gnu.org>
|
||||
|
||||
PR fortran/60526
|
||||
|
@ -1215,10 +1215,38 @@ build_sym (const char *name, gfc_charlen *cl, bool cl_deferred,
|
||||
{
|
||||
symbol_attribute attr;
|
||||
gfc_symbol *sym;
|
||||
int upper;
|
||||
|
||||
if (gfc_get_symbol (name, NULL, &sym))
|
||||
return false;
|
||||
|
||||
/* Check if the name has already been defined as a type. The
|
||||
first letter of the symtree will be in upper case then. Of
|
||||
course, this is only necessary if the upper case letter is
|
||||
actually different. */
|
||||
|
||||
upper = TOUPPER(name[0]);
|
||||
if (upper != name[0])
|
||||
{
|
||||
char u_name[GFC_MAX_SYMBOL_LEN + 1];
|
||||
gfc_symtree *st;
|
||||
int nlen;
|
||||
|
||||
nlen = strlen(name);
|
||||
gcc_assert (nlen <= GFC_MAX_SYMBOL_LEN);
|
||||
strncpy (u_name, name, nlen + 1);
|
||||
u_name[0] = upper;
|
||||
|
||||
st = gfc_find_symtree (gfc_current_ns->sym_root, u_name);
|
||||
|
||||
if (st != 0)
|
||||
{
|
||||
gfc_error ("Symbol %qs at %C also declared as a type at %L", name,
|
||||
&st->n.sym->declared_at);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/* Start updating the symbol table. Add basic type attribute if present. */
|
||||
if (current_ts.type != BT_UNKNOWN
|
||||
&& (sym->attr.implicit_type == 0
|
||||
|
@ -1,3 +1,8 @@
|
||||
2016-02-14 Thomas Koenig <tkoenig@gcc.gnu.org>
|
||||
|
||||
PR fortran/60526
|
||||
* gfortran.dg/type_decl_4.f90: Reinstated.
|
||||
|
||||
2016-02-14 John David Anglin <danglin@gcc.gnu.org>
|
||||
|
||||
PR fortran/68746
|
||||
|
7
gcc/testsuite/gfortran.dg/type_decl_4.f90
Normal file
7
gcc/testsuite/gfortran.dg/type_decl_4.f90
Normal file
@ -0,0 +1,7 @@
|
||||
! { dg-do compile }
|
||||
program main
|
||||
type Xx ! { dg-error "Symbol 'xx' at .1. also declared as a type at .2." }
|
||||
end type Xx
|
||||
real :: Xx ! { dg-error "Symbol 'xx' at .1. also declared as a type at .2." }
|
||||
|
||||
end program main
|
Loading…
x
Reference in New Issue
Block a user