Am 07.08.2011 12:56, schrieb Janus Weil:
+ /* Check string length. */
+ if (proc_target->result->ts.type == BT_CHARACTER
+ && proc_target->result->ts.u.cl&& old_target->result->ts.u.cl
+ && gfc_dep_compare_expr (proc_target->result->ts.u.cl->length,
+ old_target->result->ts.u.cl->length) != 0)
+ {
+ gfc_error ("Character length mismatch between '%s' at '%L' "
+ "and overridden FUNCTION", proc->name,&where);
+ return FAILURE;
+ }
}
Well, let's make this into (again, typing the patch directly into
e-mail)
/* Check string length. */
if (proc_target->result->ts.type == BT_CHARACTER
&& proc_target->result->ts.u.cl && old_target->result->ts.u.cl
{
int compval =
gfc_dep_compare_expr (proc_target->result->ts.u.cl->length,
old_target->result->ts.u.cl->length);
switch (compval)
{
case -3:
case -1:
case 1:
gfc_error ("Character length mismatch between '%s' at '%L' "
"and overridden FUNCTION", proc->name, &where);
return FAILURE;
case -2:
gfc_warning ("Possible length mismatch between '%s' at '%L' "
"and overriden FUNCTION, proc->name, &where);
break;
case 0:
break;
default:
gfc_internal_error ("Unexpected return of gfc_dep_compare_expr";
break;
}
and then work on extending gfc_dep_compare_expr to return -3 for more
cases. I can help with that.
Regards
Thomas