------- Comment #5 from janus at gcc dot gnu dot org  2010-07-13 12:12 -------
(In reply to comment #3)
> For the program in comment 0, NAG prints:
>   Error: aaa.f90, line 16: The argument to C_LOC must not be polymorphic
> though ifort and crayftn accept the code. Thus, at least with
> -std=f95/f2003/f2008 one should reject it.

Ah, good point. I totally forgot about the fact that a polymorphic variable is
by definition not interoperable.

Still comment #0 is a bug, since the error message is totally wrong.


> > > However, it regresses at least on c_loc_tests_5.f03 and 
> > > c_loc_tests_14.f90.
> > 
> > Actually I have the feeling that both of these test cases are invalid, and 
> > the
> > patch is right to reject them.
> 
> Well, NAG, ifort, pgi, and crayftn compile both programs; g95 compiles at 
> least
> c_loc_tests_5.f03; thus, I am inclined to say that those two tests are valid.

I think Sun Studio 12 even rejects both of them.

Anyway, we should refer to the standard rather than other compilers to fix
this. F08 clearly states for the argument of C_LOC: "X shall have either the
POINTER or TARGET attribute".

c_loc_tests_5.f03 has:

    integer(c_int), dimension(:), pointer :: int_ptr
    my_c_ptr = c_loc(int_ptr(0))

Here int_ptr is a pointer to an array of integers, but int_ptr(0) is an element
of that array, so it doesn't have the POINTER attribute, does it?


-- 


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

Reply via email to