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

Reply via email to