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



Tobias Burnus <burnus at gcc dot gnu.org> changed:



           What    |Removed                     |Added

----------------------------------------------------------------------------

           Keywords|                            |wrong-code

             Status|UNCONFIRMED                 |NEW

   Last reconfirmed|                            |2012-10-30

                 CC|                            |burnus at gcc dot gnu.org,

                   |                            |janus at gcc dot gnu.org

     Ever Confirmed|0                           |1



--- Comment #1 from Tobias Burnus <burnus at gcc dot gnu.org> 2012-10-30 
11:34:37 UTC ---

>From the dump. gfortran first generates a deferred-shape array:

    a.data = (void * restrict) &i[0];

That's fine. But instead of passing

    foo (&a);

it should pass

    foo (a.data);



In resolve.c's resolve_assoc_var, one properly sets sym->as->type =

AS_DEFERRED. 



The problem is that the code assumes that if the variable is not a pointer, it

cannot be AS_DEFERRED. From trans-array.c's 

gfc_conv_array_parameter:



7017          if (!sym->attr.pointer

7018              && sym->as

7019              && sym->as->type != AS_ASSUMED_SHAPE 

7020              && sym->as->type != AS_ASSUMED_RANK 

7021              && !sym->attr.allocatable)

7022            {

...

Reply via email to