------- Comment #2 from mikael at gcc dot gnu dot org  2009-09-09 20:41 -------
(In reply to comment #1)
> Thus the question is: Why is the last expr == NULL and not EXPR_VARIABLE of
> flavour FL_PARAMETER?

gfc_match_rvalue replaces parameters with their values:
    case FL_PARAMETER:
      /* A statement of the form "REAL, parameter :: a(0:10) = 1" will
         end up here.  Unfortunately, sym->value->expr_type is set to 
         EXPR_CONSTANT, and so the if () branch would be followed without
         the !sym->as check.  */
      if (sym->value && sym->value->expr_type != EXPR_ARRAY && !sym->as)
        e = gfc_copy_expr (sym->value);

Then why is the value a NULL expr?
Because that's how we recognise c_null(_fun)?_ptr at resolution time.
See the comment in gen_special_c_interop_ptr:
  /* Create a constructor with no expr, that way we can recognize if the user
     tries to call the structure constructor for one of the iso_c_binding
     derived types during resolution (resolve_structure_cons).  */
  tmp_sym->value->value.constructor = gfc_get_constructor ();
So, it's a feature ;)

Tried a bit, but no idea how to fix it.


-- 

mikael at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
     Ever Confirmed|0                           |1
   Last reconfirmed|0000-00-00 00:00:00         |2009-09-09 20:41:34
               date|                            |


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

Reply via email to