Bug 32627

Summary: [ISO Bind C] Accept c_f_pointer for TYPE
Product: gcc Reporter: Tobias Burnus <burnus>
Component: fortranAssignee: Not yet assigned to anyone <unassigned>
Status: RESOLVED FIXED    
Severity: normal CC: gcc-bugs
Priority: P3 Keywords: rejects-valid
Version: 4.3.0   
Target Milestone: 4.3.0   
Host: Target:
Build: Known to work:
Known to fail: Last reconfirmed:
Bug Depends on:    
Bug Blocks: 32630    

Description Tobias Burnus 2007-07-04 19:58:51 UTC
From: http://de.wikibooks.org/w/index.php?title=Fortran:_Fortran_und_C:_Fortran_2003#Datenverbund

/tmp/ccW1yqyk.o: In function `MAIN__':
f.f90:(.text+0x3e): undefined reference to `__iso_c_binding_c_f_pointer_s1'


program main
  use iso_c_binding
  implicit none
  type, bind( c ) :: A
    integer( c_int ) :: xc, yc
    type( c_ptr )    :: str
  end type
  type( c_ptr )               :: x
  type( A ), pointer          :: fptr
  character( len=9 ), pointer :: strptr
  call c_f_pointer( fptr%str, strptr )
end program main
Comment 1 Tobias Burnus 2007-07-11 08:46:48 UTC
Also http://www.lrz-muenchen.de/services/software/mathematik/gsl/fortran/index.html
fails with the same error.
(One needs to change "g95)" into "g95|gfortran)" in configure.)
Comment 2 patchapp@dberlin.org 2007-07-16 19:05:40 UTC
Subject: Bug number pr32627

A patch for this bug has been added to the patch tracker.
The mailing list url for the patch is http://gcc.gnu.org/ml/gcc-patches/2007-07/msg01459.html
Comment 3 Tobias Burnus 2007-07-17 15:25:15 UTC
> Also
> http://www.lrz-muenchen.de/services/software/mathematik/gsl/fortran/index.html
> fails with the same error.
> (One needs to change "g95)" into "g95|gfortran)" in configure.)

This is related in so far that it is c_f_pointer, but it fails for a different reason: SHAPE can be any integer kind, but gfortran only accepts the default kind.
Comment 4 patchapp@dberlin.org 2007-07-18 18:10:55 UTC
Subject: Bug number PR 32627

A patch for this bug has been added to the patch tracker.
The mailing list url for the patch is http://gcc.gnu.org/ml/gcc-patches/2007-07/msg01541.html
Comment 5 kargls 2007-07-21 23:45:55 UTC
Subject: Bug 32627

Author: kargl
Date: Sat Jul 21 23:45:44 2007
New Revision: 126817

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

        PR fortran/32627
        * resolve.c (set_name_and_label): Set kind number for character
        version of c_f_pointer.
        (gfc_iso_c_sub_interface): Set the kind of the SHAPE formal arg to
        that of the actual SHAPE arg.
        * symbol.c (gen_shape_param): Initialize kind for SHAPE arg.

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

        PR fortran/32627
        * libgfortran/intrinsics/iso_c_generated_procs.c: Add c_f_pointer
        for character/string arguments.
        * libgfortran/intrinsic/iso_c_binding.c (c_f_pointer_u0): Allow
        the optional SHAPE arg to be any valid integer kind.
        * libgfortran/gfortran.map: Add c_f_pointer_s0.
        * libgfortran/mk-kinds-h.sh: Save smallest integer kind as default
        character kind.
        * libgfortran/intrinsics/iso_c_generated_procs.c: Add versions of
        c_f_pointer for complex and logical types.
        * libgfortran/gfortran.map: Add c_f_pointer versions for logical
        and complex types.

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

        PR fortran/32627
        * gfortran.dg/pr32627_driver.c: Driver for pr32627.
        * gfortran.dg/pr32627.f03: New test case.
        * gfortran.dg/c_f_pointer_logical.f03: New test case.
        * gfortran.dg/c_f_pointer_logical_driver.c: Driver for
        c_f_pointer_logical.
        * gfortran.dg/c_f_pointer_complex_driver.c: Driver for
        c_f_pointer_complex.
        * gfortran.dg/c_f_pointer_complex.f03: New test case.
        * gfortran.dg/c_f_pointer_shape_tests_2_driver.c: Driver for
        c_f_pointer_shape_tests_2.
        * gfortran.dg/c_f_pointer_shape_tests_2.f03: New test case.


Added:
    trunk/gcc/testsuite/gfortran.dg/c_f_pointer_complex.f03
    trunk/gcc/testsuite/gfortran.dg/c_f_pointer_complex_driver.c
    trunk/gcc/testsuite/gfortran.dg/c_f_pointer_logical.f03
    trunk/gcc/testsuite/gfortran.dg/c_f_pointer_logical_driver.c
    trunk/gcc/testsuite/gfortran.dg/c_f_pointer_shape_tests_2.f03
    trunk/gcc/testsuite/gfortran.dg/c_f_pointer_shape_tests_2_driver.c
    trunk/gcc/testsuite/gfortran.dg/pr32627.f03
    trunk/gcc/testsuite/gfortran.dg/pr32627_driver.c
Modified:
    trunk/gcc/fortran/ChangeLog
    trunk/gcc/fortran/resolve.c
    trunk/gcc/fortran/symbol.c
    trunk/gcc/testsuite/ChangeLog
    trunk/libgfortran/ChangeLog
    trunk/libgfortran/gfortran.map
    trunk/libgfortran/intrinsics/iso_c_binding.c
    trunk/libgfortran/intrinsics/iso_c_generated_procs.c
    trunk/libgfortran/mk-kinds-h.sh

Comment 6 kargls 2007-07-21 23:48:32 UTC
Fixed on trunk.