Bug 32800 - ISO Bind C: C_F_Pointer argument bogus checking
Summary: ISO Bind C: C_F_Pointer argument bogus checking
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: fortran (show other bugs)
Version: 4.3.0
: P3 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords: rejects-valid
Depends on:
Blocks: 32630
  Show dependency treegraph
 
Reported: 2007-07-17 20:23 UTC by Tobias Burnus
Modified: 2007-07-23 17:52 UTC (History)
1 user (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Tobias Burnus 2007-07-17 20:23:17 UTC
The following fails if the FPTR argument is not the second argument.
The argument checking should be based on the ordered argument list not on the position of the call ("FPTR=" is not always at the second position).

(Related to PR32797)

      CALL C_F_POINTER(FPTR=FPTR, CPTR=CPTR,SHAPE=[strlen(cptr)])
                                                                1
Error: Argument 'cptr' to 'c_f_pointer' at (1) must have the POINTER attribute



   FUNCTION C_F_STRING(CPTR) RESULT(FPTR)
      USE ISO_C_BINDING
      implicit none
      TYPE(C_PTR), INTENT(IN) :: CPTR ! The C address
      CHARACTER(KIND=C_CHAR), DIMENSION(:), POINTER :: FPTR
      INTERFACE
         FUNCTION strlen(string) RESULT(len) BIND(C,NAME="strlen")
            import
            TYPE(C_PTR), VALUE :: string ! A C pointer
            integer(c_int) :: len
         END FUNCTION
      END INTERFACE
      CALL C_F_POINTER(FPTR=FPTR, CPTR=CPTR,SHAPE=[strlen(cptr)])
   END FUNCTION
Comment 1 Tobias Burnus 2007-07-23 09:32:21 UTC
Patch:
http://gcc.gnu.org/ml/gcc-patches/2007-07/msg01543.html

Cf. also PR 32797.
Comment 2 Tobias Burnus 2007-07-23 17:47:29 UTC
Subject: Bug 32800

Author: burnus
Date: Mon Jul 23 17:47:16 2007
New Revision: 126856

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=126856
Log:
2007-07-23  Christopher D. Rickett  <crickett@lanl.gov>

        PR fortran/32797
        PR fortran/32800
        * decl.c (verify_bind_c_sym): Use the result symbol for functions
        with a result clause.  Warn if implicitly typed.  Verify the type
        and rank of the SHAPE argument, if given.
        * resolve.c (gfc_iso_c_sub_interface): Use gfc_procedure_use to
        check the actual args against the formal, sorting them if
        necessary.
        * symbol.c (gen_shape_param): Initialize type of SHAPE param to
        BT_VOID.

2007-07-23  Christopher D. Rickett  <crickett@lanl.gov>

        PR fortran/32797
        PR fortran/32800
        * gfortran.dg/bind_c_usage_8.f03: New test case.
        * gfortran.dg/c_f_pointer_tests_2.f03: Ditto.
        * gfortran.dg/c_ptr_tests_5.f03: Updated expected error message.


Added:
    trunk/gcc/testsuite/gfortran.dg/bind_c_usage_8.f03
    trunk/gcc/testsuite/gfortran.dg/c_f_pointer_tests_2.f03
Modified:
    trunk/gcc/fortran/ChangeLog
    trunk/gcc/fortran/decl.c
    trunk/gcc/fortran/resolve.c
    trunk/gcc/fortran/symbol.c
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/gfortran.dg/c_ptr_tests_5.f03

Comment 3 Tobias Burnus 2007-07-23 17:52:07 UTC
FIXED.