http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48303

--- Comment #3 from Steven Bosscher <steven at gcc dot gnu.org> 2011-03-27 
23:08:20 UTC ---
Interpret them as Hollerith constants? Something like this extremely crude code
from the hip:

  /* Only DATA Statements come here.  */
  if (!conform)
    {
      /* Numeric can be converted to any other numeric. And Hollerith can be
         converted to any other type.  */
      if ((gfc_numeric_ts (&lvalue->ts) && gfc_numeric_ts (&rvalue->ts))
          || rvalue->ts.type == BT_HOLLERITH)
        return SUCCESS;

      if (lvalue->ts.type == BT_LOGICAL && rvalue->ts.type == BT_LOGICAL)
        return SUCCESS;

      /* In legacy mode, accept CHARACTER data, interpreted as a Hollerith
         constant.  */
      if (lvalue->ts.type != rvalue->ts.type
          && rvalue->ts.type == BT_CHARACTER
          && rvalue->ts.kind == gfc_default_character_kind)
        {
          gfc_expr *e;
          unsigned i, l;

          if (gfc_notify_std (GFC_STD_LEGACY, "Shame on you at %C ")
              == FAILURE)
            return FAILURE;

          l = rvalue->value.character.length;
          e = gfc_get_constant_expr (BT_HOLLERITH, gfc_default_character_kind,
                                     &rvalue->where);
          e->representation.string = XCNEWVEC (char, l + 1);
          for (i = 0; i < l; i++)
            {
              gfc_char_t c = rvalue->value.character.string[i];
              e->representation.string[i] = (char) c;
            }
          *rvalue = *e; /* ??? Not sure how to replace rvalue with the new e */
          return SUCCESS;
        }

Reply via email to