diff options
Diffstat (limited to 'gcc/fortran')
| -rw-r--r-- | gcc/fortran/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/fortran/resolve.c | 11 | 
2 files changed, 13 insertions, 3 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 132275fb01f..96c67b1fcea 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2004-12-08  Tobias Schlueter  <tobias.schlueter@physik.uni-muenchen.de> + +	* resolve.c (resolve_code): Impose correct restrictions on +	assigned variable. +  2004-12-02  Steven G. Kargl  <kargls@comcast.net>  	Paul Brook  <paul@codesourcery.com> diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index e592a02ae42..ecc3a3520ae 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -3678,9 +3678,14 @@ resolve_code (gfc_code * code, gfc_namespace * ns)            if (code->label->defined == ST_LABEL_UNKNOWN)              gfc_error ("Label %d referenced at %L is never defined",                         code->label->value, &code->label->where); -          if (t == SUCCESS && code->expr->ts.type != BT_INTEGER) -	    gfc_error ("ASSIGN statement at %L requires an INTEGER " -		       "variable", &code->expr->where); +          if (t == SUCCESS +	      && (code->expr->expr_type != EXPR_VARIABLE +		  || code->expr->symtree->n.sym->ts.type != BT_INTEGER +		  || code->expr->symtree->n.sym->ts.kind  +		        != gfc_default_integer_kind +		  || code->expr->symtree->n.sym->as != NULL)) +	    gfc_error ("ASSIGN statement at %L requires a scalar " +		       "default INTEGER variable", &code->expr->where);  	  break;  	case EXEC_POINTER_ASSIGN:  | 

