Summary: | ICE in in gfc_conv_string_parameter | ||
---|---|---|---|
Product: | gcc | Reporter: | francois.jacq |
Component: | fortran | Assignee: | Not yet assigned to anyone <unassigned> |
Status: | RESOLVED FIXED | ||
Severity: | normal | CC: | burnus, gcc-bugs |
Priority: | P3 | ||
Version: | 4.4.0 | ||
Target Milestone: | --- | ||
Host: | Target: | 4.4.0 | |
Build: | GNU Fortran (GCC) 4.4.0 20080821 (experimental) [trunk revision | Known to work: | |
Known to fail: | Last reconfirmed: | 2008-08-23 13:07:50 | |
Bug Depends on: | |||
Bug Blocks: | 32630 |
Description
francois.jacq
2008-08-22 13:47:02 UTC
Confirmed. Reduced test case: program test INTERFACE FUNCTION cdir() BIND(C,name="cdir") RESULT(r) CHARACTER(kind=1) :: r END FUNCTION END INTERFACE WRITE(*,*) ICHAR(cdir()) END PROGRAM Needed a little better summary *** Bug 37205 has been marked as a duplicate of this bug. *** Actually, removing the assert --- /home/tob/projects/gcc/gcc/fortran/trans-expr.c (Revision 139520) +++ /home/tob/projects/gcc/gcc/fortran/trans-expr.c @@ -4008,2 +4008,0 @@ gfc_conv_string_parameter (gfc_se * se) - gcc_assert (se->string_length - && TREE_CODE (TREE_TYPE (se->string_length)) == INTEGER_TYPE); is enough for assignments. Proof: str[1]{lb: 1 sz: 1} = cdir (); ! str = cdir() i = (integer(kind=4)) cdir (); ! i = ichar(cdir()) TODO: Come up with a better assert which works also in this case. * * * For I/O one also needs the following: --- trans-io.c (Revision 139521) +++ trans-io.c @@ -2071,2 +2071,6 @@ transfer_expr (gfc_se * se, gfc_typespec - gcc_assert (TREE_CODE (TREE_TYPE (tmp)) == ARRAY_TYPE); - arg2 = TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (tmp))); + + /* BIND(C) function return value. */ + if (TREE_CODE (TREE_TYPE (tmp)) != ARRAY_TYPE) + arg2 = build_int_cst (gfc_charlen_type_node, 1); + else + arg2 = TYPE_MAX_VALUE (TYPE_DOMAIN (TREE_TYPE (tmp))); Subject: Bug 37201 Author: burnus Date: Sun Aug 24 17:16:46 2008 New Revision: 139537 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=139537 Log: 2008-08-24 Tobias Burnus <burnus@net-b.de> PR fortran/37201 * trans-expr.c (gfc_conv_function_call): Add string_length for character-returning bind(C) functions. 2008-08-24 Tobias Burnus <burnus@net-b.de> PR fortran/37201 * gfortran.dg/bind_c_usage_17.f90: New. * gfortran.dg/bind_c_usage_17_c.c: New. Added: trunk/gcc/testsuite/gfortran.dg/bind_c_usage_17.f90 trunk/gcc/testsuite/gfortran.dg/bind_c_usage_17_c.c Modified: trunk/gcc/fortran/ChangeLog trunk/gcc/fortran/trans-expr.c trunk/gcc/testsuite/ChangeLog FIXED on the trunk (4.4). Thanks for reporting the bug. Subject: Bug 37201 Author: burnus Date: Sun Aug 24 20:31:09 2008 New Revision: 139545 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=139545 Log: 2008-08-24 Tobias Burnus <burnus@net-b.de> PR fortran/37201 * decl.c (verify_bind_c_sym): Reject array/string returning functions. 2008-08-24 Tobias Burnus <burnus@net-b.de> PR fortran/37201 * gfortran.dg/bind_c_18.f90: New. Added: trunk/gcc/testsuite/gfortran.dg/bind_c_18.f90 Modified: trunk/gcc/fortran/ChangeLog trunk/gcc/fortran/decl.c trunk/gcc/testsuite/ChangeLog |