Bug 56079 - [4.8 Regression] ICE with C_PTR renaming and TRANSFER
Summary: [4.8 Regression] ICE with C_PTR renaming and TRANSFER
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: fortran (show other bugs)
Version: 4.8.0
: P4 normal
Target Milestone: 4.8.4
Assignee: Not yet assigned to anyone
URL:
Keywords: ice-on-valid-code
: 55356 (view as bug list)
Depends on:
Blocks:
 
Reported: 2013-01-22 19:58 UTC by Thomas Koenig
Modified: 2014-07-11 07:07 UTC (History)
3 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2013-01-23 00:00:00


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Thomas Koenig 2013-01-22 19:58:52 UTC
Maybe related to PR 51578 and PR 55574.

program gar_nichts
   use ISO_C_BINDING
   use ISO_C_BINDING, only: C_PTR
   use ISO_C_BINDING, only: abc => C_PTR
   use ISO_C_BINDING, only: xyz => C_PTR
   type(xyz) nada
   nada = transfer(C_NULL_PTR,nada)
end program gar_nichts
ig25@linux-fd1f:/tmp> gfortran nada6.f90 
f951: interner Compiler-Fehler: Speicherzugriffsfehler
0x96349f crash_signal
        ../../trunk/gcc/toplev.c:332
0x5ab741 tree_check
        ../../trunk/gcc/tree.h:3668
0x5ab741 encode_derived
        ../../trunk/gcc/fortran/target-memory.c:242
0x5ab741 gfc_target_encode_expr(gfc_expr*, unsigned char*, unsigned long)
        ../../trunk/gcc/fortran/target-memory.c:319
0x5a2158 gfc_simplify_transfer(gfc_expr*, gfc_expr*, gfc_expr*)
        ../../trunk/gcc/fortran/simplify.c:6056
0x542f31 do_simplify
        ../../trunk/gcc/fortran/intrinsic.c:3817
0x550146 gfc_intrinsic_func_interface(gfc_expr*, int)
        ../../trunk/gcc/fortran/intrinsic.c:4160
0x58c0f6 resolve_unknown_f
        ../../trunk/gcc/fortran/resolve.c:2613
0x58c0f6 resolve_function
        ../../trunk/gcc/fortran/resolve.c:3214
0x58c0f6 gfc_resolve_expr(gfc_expr*)
        ../../trunk/gcc/fortran/resolve.c:6549
0x591699 resolve_code
        ../../trunk/gcc/fortran/resolve.c:10120
0x59421e resolve_codes
        ../../trunk/gcc/fortran/resolve.c:14963
0x585282 gfc_resolve
        ../../trunk/gcc/fortran/resolve.c:14991
0x579bc2 resolve_all_program_units
        ../../trunk/gcc/fortran/parse.c:4395
0x579bc2 gfc_parse_file()
        ../../trunk/gcc/fortran/parse.c:4662
0x5b5995 gfc_be_parse_file
        ../../trunk/gcc/fortran/f95-lang.c:189
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <http://gcc.gnu.org/bugs.html> for instructions.
ig25@linux-fd1f:/tmp> gdb ~/lib/gcc/x86_64-unknown-linux-gnu/4.8.0/f951
GNU gdb (GDB) 7.5
Copyright (C) 2012 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-unknown-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /home/ig25/lib/gcc/x86_64-unknown-linux-gnu/4.8.0/f951...done.
(gdb) r nada6.f90 
Starting program: /home/ig25/lib/gcc/x86_64-unknown-linux-gnu/4.8.0/f951 nada6.f90
warning: Could not load shared library symbols for linux-vdso.so.1.
Do you need "set solib-search-path" or "set sysroot"?

Program received signal SIGSEGV, Segmentation fault.
encode_derived (buffer_size=8, buffer=0x7fffffffd6c0 "", source=<optimized out>) at ../../trunk/gcc/fortran/target-memory.c:242
242           ptr = TREE_INT_CST_LOW(DECL_FIELD_OFFSET(cmp->backend_decl))
(gdb) p cmp->backend_decl
$1 = (tree) 0x0
(gdb) p *cmp
$2 = {name = 0x7ffff6d5b310 "__xyz_c_address", ts = {type = BT_INTEGER, kind = 8, u = {derived = 0x0, cl = 0x0, pad = 0}, 
    interface = 0x0, is_c_interop = 1, is_iso_c = 0, f90_type = BT_INTEGER, deferred = false}, attr = {allocatable = 0, dimension = 0, 
    codimension = 0, external = 0, intrinsic = 0, optional = 0, pointer = 0, target = 0, value = 0, volatile_ = 0, temporary = 0, 
    dummy = 0, result = 0, assign = 0, threadprivate = 0, not_always_present = 0, implied_index = 0, subref_array_pointer = 0, 
    proc_pointer = 0, asynchronous = 0, contiguous = 0, class_pointer = 0, save = SAVE_NONE, data = 0, is_protected = 0, use_assoc = 0, 
    use_only = 0, use_rename = 0, imported = 0, host_assoc = 0, in_namelist = 0, in_common = 0, in_equivalence = 0, function = 0, 
    subroutine = 0, procedure = 0, generic = 0, generic_copy = 0, implicit_type = 0, untyped = 0, is_bind_c = 0, extension = 0, 
    is_class = 0, class_ok = 0, vtab = 0, vtype = 0, is_c_interop = 0, is_iso_c = 0, sequence = 0, elemental = 0, pure = 0, 
    recursive = 0, unmaskable = 0, masked = 0, contained = 0, mod_proc = 0, abstract = 0, public_used = 0, implicit_pure = 0, 
    noreturn = 0, entry = 0, entry_master = 0, mixed_entry_master = 0, always_explicit = 0, artificial = 0, referenced = 0, 
    is_main_program = 0, access = ACCESS_UNKNOWN, intent = INTENT_UNKNOWN, flavor = FL_UNKNOWN, if_source = IFSRC_UNKNOWN, 
    proc = PROC_UNKNOWN, cray_pointer = 0, cray_pointee = 0, alloc_comp = 0, pointer_comp = 0, proc_pointer_comp = 0, private_comp = 0, 
    zero_comp = 0, coarray_comp = 0, lock_comp = 0, defined_assign_comp = 0, unlimited_polymorphic = 0, select_type_temporary = 0, 
    ext_attr = 0, volatile_ns = 0x0, asynchronous_ns = 0x0}, as = 0x0, backend_decl = 0x0, norestrict_decl = 0x0, loc = {
    nextc = 0x15aa9ac, lb = 0x15aa970}, initializer = 0x0, next = 0x0, formal = 0x0, formal_ns = 0x0, tb = 0x0}

Works with 4.6, haven't checked 4.7 yet.
Comment 1 Thomas Koenig 2013-01-22 20:03:39 UTC
Shortened a bit:

program gar_nichts
   use ISO_C_BINDING, only: C_NULL_PTR
   use ISO_C_BINDING, only: xyz => C_PTR
   type(xyz) nada
   nada = transfer(C_NULL_PTR,nada)
end program gar_nichts
Comment 2 Jakub Jelinek 2013-01-23 09:31:32 UTC
The #c1 testcase started to be rejected with:
http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=177486
and then changed from an (invalid?) error into an ICE with:
http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=177527
Comment 3 Thomas Koenig 2013-01-25 22:56:43 UTC
This also fails in the same place (without renaming):

program gar_nichts
   use ISO_C_BINDING, only :: C_PTR, C_NULL_PTR
   type(c_ptr) nada
   call foo(transfer(C_NULL_PTR,nada))
end program gar_nichts
Comment 4 Thomas Koenig 2013-01-25 23:10:28 UTC
(In reply to comment #3)

Sorry, an error in the test case.  This has the same error:

program gar_nichts
   use ISO_C_BINDING
   type(c_ptr) nada
   call foo(transfer(C_NULL_PTR,nada))
!   call foo(transfer(0_8, nada))
end program gar_nichts

The test case works if the constant 0_8 is used instead.
Comment 5 Tobias Burnus 2013-02-22 11:19:13 UTC
*** Bug 55356 has been marked as a duplicate of this bug. ***
Comment 6 Tobias Burnus 2013-03-25 15:54:36 UTC
Author: burnus
Date: Mon Mar 25 15:40:26 2013
New Revision: 197053

URL: http://gcc.gnu.org/viewcvs?rev=197053&root=gcc&view=rev
Log:
2013-03-25  Tobias Burnus  <burnus@net-b.de>

        PR fortran/38536
        PR fortran/38813
        PR fortran/38894
        PR fortran/39288
        PR fortran/40963
        PR fortran/45824
        PR fortran/47023
        PR fortran/47034
        PR fortran/49023
        PR fortran/50269
        PR fortran/50612
        PR fortran/52426
        PR fortran/54263
        PR fortran/55343
        PR fortran/55444
        PR fortran/55574
        PR fortran/56079
        PR fortran/56378
        * check.c (gfc_var_strlen): Properly handle 0-sized string.
        (gfc_check_c_sizeof): Use is_c_interoperable, add checks.
        (is_c_interoperable, gfc_check_c_associated, gfc_check_c_f_pointer,
        gfc_check_c_f_procpointer, gfc_check_c_funloc, gfc_check_c_loc): New
        functions.
        * expr.c (check_inquiry): Add c_sizeof, compiler_version and
        compiler_options.
        (gfc_check_pointer_assign): Refine function result check.
        gfortran.h (gfc_isym_id): Add GFC_ISYM_C_ASSOCIATED,
        GFC_ISYM_C_F_POINTER, GFC_ISYM_C_F_PROCPOINTER, GFC_ISYM_C_FUNLOC,
        GFC_ISYM_C_LOC.
        (iso_fortran_env_symbol, iso_c_binding_symbol): Handle
        NAMED_SUBROUTINE.
        (generate_isocbinding_symbol): Update prototype.
        (get_iso_c_sym): Remove.
        (gfc_isym_id_by_intmod, gfc_isym_id_by_intmod_sym): New prototypes.
        * intrinsic.c (gfc_intrinsic_subroutine_by_id): New function.
        (gfc_intrinsic_sub_interface): Use it.
        (add_functions, add_subroutines): Add missing C-binding intrinsics.
        (gfc_intrinsic_func_interface): Add special case for c_loc.
        gfc_isym_id_by_intmod, gfc_isym_id_by_intmod_sym): New functions.
        (gfc_intrinsic_func_interface, gfc_intrinsic_sub_interface): Use them.
        * intrinsic.h (gfc_check_c_associated, gfc_check_c_f_pointer,
        gfc_check_c_f_procpointer, gfc_check_c_funloc, gfc_check_c_loc,
        gfc_resolve_c_loc, gfc_resolve_c_funloc): New prototypes.
        * iresolve.c (gfc_resolve_c_loc, gfc_resolve_c_funloc): New
        functions.
        * iso-c-binding.def: Split PROCEDURE into NAMED_SUBROUTINE and
        NAMED_FUNCTION.
        * iso-fortran-env.def: Add NAMED_SUBROUTINE for completeness.
        * module.c (create_intrinsic_function): Support subroutines and
        derived-type results.
        (use_iso_fortran_env_module): Update calls.
        (import_iso_c_binding_module): Ditto; update calls to
        generate_isocbinding_symbol.
        * resolve.c (find_arglists): Skip for intrinsic symbols.
        (gfc_resolve_intrinsic): Find intrinsic subs via id.
        (is_scalar_expr_ptr, gfc_iso_c_func_interface,
        set_name_and_label, gfc_iso_c_sub_interface): Remove.
        (resolve_function, resolve_specific_s0): Remove calls to those.
        (resolve_structure_cons): Fix handling.
        * symbol.c (gen_special_c_interop_ptr): Update c_ptr/c_funptr
        generation.
        (gen_cptr_param, gen_fptr_param, gen_shape_param,
        build_formal_args, get_iso_c_sym): Remove.
        (std_for_isocbinding_symbol): Handle NAMED_SUBROUTINE.
        (generate_isocbinding_symbol): Support hidden symbols and
        using c_ptr/c_funptr symtrees for nullptr defs.
        * target-memory.c (gfc_target_encode_expr): Fix handling
        of c_ptr/c_funptr.
        * trans-expr.c (conv_isocbinding_procedure): Remove.
        (gfc_conv_procedure_call): Remove call to it.
        (gfc_trans_subcomponent_assign, gfc_conv_expr): Update handling
        of c_ptr/c_funptr.
        * trans-intrinsic.c (conv_isocbinding_function,
        conv_isocbinding_subroutine): New.
        (gfc_conv_intrinsic_function, gfc_conv_intrinsic_subroutine):
        Call them.
        * trans-io.c (transfer_expr): Fix handling of c_ptr/c_funptr.
        * trans-types.c (gfc_typenode_for_spec,
        gfc_get_derived_type): Ditto.
        (gfc_init_c_interop_kinds): Handle NAMED_SUBROUTINE.

2013-03-25  Tobias Burnus  <burnus@net-b.de>

        PR fortran/38536
        PR fortran/38813
        PR fortran/38894
        PR fortran/39288
        PR fortran/40963
        PR fortran/45824
        PR fortran/47023
        PR fortran/47034
        PR fortran/49023
        PR fortran/50269
        PR fortran/50612
        PR fortran/52426
        PR fortran/54263
        PR fortran/55343
        PR fortran/55444
        PR fortran/55574
        PR fortran/56079
        PR fortran/56378
        * gfortran.dg/c_assoc_2.f03: Update dg-error wording.
        * gfortran.dg/c_f_pointer_shape_test.f90: Ditto.
        * gfortran.dg/c_f_pointer_shape_tests_3.f03: Ditto.
        * gfortran.dg/c_f_pointer_tests_5.f90: Ditto.
        * gfortran.dg/c_funloc_tests_2.f03: Ditto.
        * gfortran.dg/c_funloc_tests_5.f03: Ditto.
        * gfortran.dg/c_funloc_tests_6.f90: Ditto.
        * gfortran.dg/c_loc_tests_10.f03: Add -std=f2008.
        * gfortran.dg/c_loc_tests_11.f03: Ditto, update dg-error.
        * gfortran.dg/c_loc_tests_16.f90: Ditto.
        * gfortran.dg/c_loc_tests_4.f03: Ditto.
        * gfortran.dg/c_loc_tests_15.f90: Update dg-error wording.
        * gfortran.dg/c_loc_tests_3.f03: Valid since F2003 TC5.
        * gfortran.dg/c_loc_tests_8.f03: Ditto.
        * gfortran.dg/c_ptr_tests_14.f90: Update scan-tree-dump-times.
        * gfortran.dg/c_ptr_tests_15.f90: Ditto.
        * gfortran.dg/c_sizeof_1.f90: Fix invalid code.
        * gfortran.dg/iso_c_binding_init_expr.f03: Update dg-error wording.
        * gfortran.dg/pr32601_1.f03: Ditto.
        * gfortran.dg/storage_size_2.f08: Remove dg-error.
        * gfortran.dg/blockdata_7.f90: New.
        * gfortran.dg/c_assoc_4.f90: New.
        * gfortran.dg/c_f_pointer_tests_6.f90: New.
        * gfortran.dg/c_f_pointer_tests_7.f90: New.
        * gfortran.dg/c_funloc_tests_8.f90: New.
        * gfortran.dg/c_loc_test_17.f90: New.
        * gfortran.dg/c_loc_test_18.f90: New.
        * gfortran.dg/c_loc_test_19.f90: New.
        * gfortran.dg/c_loc_test_20.f90: New.
        * gfortran.dg/c_sizeof_5.f90: New.
        * gfortran.dg/iso_c_binding_rename_3.f90: New.
        * gfortran.dg/transfer_resolve_2.f90: New.
        * gfortran.dg/transfer_resolve_3.f90: New.
        * gfortran.dg/transfer_resolve_4.f90: New.
        * gfortran.dg/pr32601.f03: Update dg-error.
        * gfortran.dg/c_ptr_tests_13.f03: Update dg-error.
        * gfortran.dg/c_ptr_tests_9.f03: Fix test case.


Added:
    trunk/gcc/testsuite/gfortran.dg/blockdata_7.f90
    trunk/gcc/testsuite/gfortran.dg/c_assoc_4.f90
    trunk/gcc/testsuite/gfortran.dg/c_f_pointer_tests_6.f90
    trunk/gcc/testsuite/gfortran.dg/c_f_pointer_tests_7.f90
    trunk/gcc/testsuite/gfortran.dg/c_funloc_tests_8.f90
    trunk/gcc/testsuite/gfortran.dg/c_loc_test_17.f90
    trunk/gcc/testsuite/gfortran.dg/c_loc_test_18.f90
    trunk/gcc/testsuite/gfortran.dg/c_loc_test_19.f90
    trunk/gcc/testsuite/gfortran.dg/c_loc_test_20.f90
    trunk/gcc/testsuite/gfortran.dg/c_loc_tests_17.f90
    trunk/gcc/testsuite/gfortran.dg/c_sizeof_5.f90
    trunk/gcc/testsuite/gfortran.dg/iso_c_binding_rename_3.f90
    trunk/gcc/testsuite/gfortran.dg/transfer_resolve_2.f90
    trunk/gcc/testsuite/gfortran.dg/transfer_resolve_3.f90
    trunk/gcc/testsuite/gfortran.dg/transfer_resolve_4.f90
Modified:
    trunk/gcc/fortran/ChangeLog
    trunk/gcc/fortran/check.c
    trunk/gcc/fortran/expr.c
    trunk/gcc/fortran/gfortran.h
    trunk/gcc/fortran/intrinsic.c
    trunk/gcc/fortran/intrinsic.h
    trunk/gcc/fortran/iresolve.c
    trunk/gcc/fortran/iso-c-binding.def
    trunk/gcc/fortran/iso-fortran-env.def
    trunk/gcc/fortran/module.c
    trunk/gcc/fortran/resolve.c
    trunk/gcc/fortran/symbol.c
    trunk/gcc/fortran/target-memory.c
    trunk/gcc/fortran/trans-expr.c
    trunk/gcc/fortran/trans-intrinsic.c
    trunk/gcc/fortran/trans-io.c
    trunk/gcc/fortran/trans-types.c
    trunk/gcc/testsuite/ChangeLog
    trunk/gcc/testsuite/gfortran.dg/c_assoc_2.f03
    trunk/gcc/testsuite/gfortran.dg/c_f_pointer_shape_test.f90
    trunk/gcc/testsuite/gfortran.dg/c_f_pointer_shape_tests_3.f03
    trunk/gcc/testsuite/gfortran.dg/c_f_pointer_tests_5.f90
    trunk/gcc/testsuite/gfortran.dg/c_funloc_tests_2.f03
    trunk/gcc/testsuite/gfortran.dg/c_funloc_tests_5.f03
    trunk/gcc/testsuite/gfortran.dg/c_funloc_tests_6.f90
    trunk/gcc/testsuite/gfortran.dg/c_loc_tests_10.f03
    trunk/gcc/testsuite/gfortran.dg/c_loc_tests_11.f03
    trunk/gcc/testsuite/gfortran.dg/c_loc_tests_15.f90
    trunk/gcc/testsuite/gfortran.dg/c_loc_tests_16.f90
    trunk/gcc/testsuite/gfortran.dg/c_loc_tests_3.f03
    trunk/gcc/testsuite/gfortran.dg/c_loc_tests_4.f03
    trunk/gcc/testsuite/gfortran.dg/c_loc_tests_8.f03
    trunk/gcc/testsuite/gfortran.dg/c_ptr_tests_13.f03
    trunk/gcc/testsuite/gfortran.dg/c_ptr_tests_14.f90
    trunk/gcc/testsuite/gfortran.dg/c_ptr_tests_15.f90
    trunk/gcc/testsuite/gfortran.dg/c_ptr_tests_9.f03
    trunk/gcc/testsuite/gfortran.dg/c_sizeof_1.f90
    trunk/gcc/testsuite/gfortran.dg/iso_c_binding_init_expr.f03
    trunk/gcc/testsuite/gfortran.dg/pr32601.f03
    trunk/gcc/testsuite/gfortran.dg/pr32601_1.f03
    trunk/gcc/testsuite/gfortran.dg/storage_size_2.f08
Comment 7 Richard Biener 2013-04-11 07:59:30 UTC
GCC 4.7.3 is being released, adjusting target milestone.
Comment 8 Mikael Morin 2013-06-02 14:30:03 UTC
It works with trunk (upcoming 4.9.0).
Comment 9 Richard Biener 2014-06-12 13:47:18 UTC
The 4.7 branch is being closed, moving target milestone to 4.8.4.
Comment 10 Tobias Burnus 2014-07-11 07:07:19 UTC
As the current patch is rather intrusive and as the issue is fixed in the released compiler 4.9.0, it is unlikely that the fix is backported to GCC 4.8.

Hence:
- WON'T FIX for GCC 4.8.
- FIXED for GCC 4.9/4.10.

Thanks for the report, the patience and sorry that it won't get fixed in GCC 4.7/4.8 any more.