https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83088

            Bug ID: 83088
           Summary: ICE with -init-derived
           Product: gcc
           Version: 8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: valeryweber at hotmail dot com
  Target Milestone: ---

hi all
the following code is ICEing
v

gfortran-intel-trunk -free -c -finit-derived  hfx_libint_wrapper.F90           
                 hfx_libint_wrapper.F90:101:0:

 END MODULE hfx_libint_wrapper

internal compiler error: Segmentation fault
0xc2f705 crash_signal
        ../../gcc-trunk-src/gcc/toplev.c:325
0x6ba206 contains_struct_check
        ../../gcc-trunk-src/gcc/tree.h:3203
0x6ba206 gfc_conv_structure(gfc_se*, gfc_expr*, int)
        ../../gcc-trunk-src/gcc/fortran/trans-expr.c:7751
0x674480 gfc_conv_array_initializer(tree_node*, gfc_expr*)
        ../../gcc-trunk-src/gcc/fortran/trans-array.c:5894
0x6b9dfa gfc_conv_initializer(gfc_expr*, gfc_typespec*, tree_node*, bool, bool,
bool)
        ../../gcc-trunk-src/gcc/fortran/trans-expr.c:6848
0x69c48f gfc_get_symbol_decl(gfc_symbol*)
        ../../gcc-trunk-src/gcc/fortran/trans-decl.c:1825
0x69e063 gfc_create_module_variable
        ../../gcc-trunk-src/gcc/fortran/trans-decl.c:4943
0x653930 do_traverse_symtree
        ../../gcc-trunk-src/gcc/fortran/symbol.c:4157
0x69d4d2 gfc_generate_module_vars(gfc_namespace*)
        ../../gcc-trunk-src/gcc/fortran/trans-decl.c:5415
0x66b2c8 gfc_generate_module_code(gfc_namespace*)
        ../../gcc-trunk-src/gcc/fortran/trans.c:2180
0x6212c2 translate_all_program_units
        ../../gcc-trunk-src/gcc/fortran/parse.c:6078
0x6212c2 gfc_parse_file()
        ../../gcc-trunk-src/gcc/fortran/parse.c:6294
0x66775f gfc_be_parse_file
        ../../gcc-trunk-src/gcc/fortran/f95-lang.c:204
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.





cat hfx_libint_wrapper.F90
MODULE hfx_libint_wrapper
   USE ISO_C_BINDING,                   ONLY: C_DOUBLE,&
                                              C_F_POINTER,&
                                              C_F_PROCPOINTER,&
                                              C_INT,&
                                              C_LOC,&
                                              C_PTR,&
                                              c_funptr

   IMPLICIT NONE
   PRIVATE

   INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(14, 200)

   integer,parameter :: build_deriv1_eri_size=10,build_eri_size=2,
libderiv_max_am1=4, &
        libint_max_am=4, libint_dvrr_classes_size=1, libint_vrr_classes_size=1,
prim_data_f_size=1
   integer, dimension(1):: nco

   TYPE, BIND(C) :: prim_data
      REAL(C_DOUBLE) :: F(prim_data_f_size)
      REAL(C_DOUBLE) :: U(3, 6)
      REAL(C_DOUBLE) :: twozeta_a
      REAL(C_DOUBLE) :: twozeta_b
      REAL(C_DOUBLE) :: twozeta_c
      REAL(C_DOUBLE) :: twozeta_d
      REAL(C_DOUBLE) :: oo2z
      REAL(C_DOUBLE) :: oo2n
      REAL(C_DOUBLE) :: oo2zn
      REAL(C_DOUBLE) :: poz
      REAL(C_DOUBLE) :: pon
      REAL(C_DOUBLE) :: oo2p
      REAL(C_DOUBLE) :: ss_r12_ss
   END TYPE prim_data


   TYPE, BIND(C) :: lib_int
      TYPE(C_PTR)     :: int_stack
      TYPE(C_PTR)     :: PrimQuartet
      REAL(C_DOUBLE)  :: AB(3)
      REAL(C_DOUBLE)  :: CD(3)
      TYPE(C_PTR)     :: vrr_classes(libint_vrr_classes_size,
libint_vrr_classes_size)
      TYPE(C_PTR)     :: vrr_stack
   END TYPE lib_int

   TYPE, BIND(C) :: lib_deriv
      TYPE(C_PTR)     :: int_stack
      TYPE(C_PTR)     :: PrimQuartet
      TYPE(C_PTR)     :: zero_stack
      TYPE(C_PTR)     :: ABCD(156)
      REAL(C_DOUBLE)  :: AB(3)
      REAL(C_DOUBLE)  :: CD(3)
      TYPE(C_PTR)     :: deriv_classes(12, libint_dvrr_classes_size,
libint_dvrr_classes_size)
      TYPE(C_PTR)     :: deriv2_classes(144, libint_dvrr_classes_size,
libint_dvrr_classes_size)
      TYPE(C_PTR)     :: dvrr_classes(libint_dvrr_classes_size,
libint_dvrr_classes_size)
      TYPE(C_PTR)     :: dvtt_stack
   END TYPE lib_deriv

   CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'hfx_libint_wrapper'


   TYPE(C_FUNPTR), DIMENSION(0:build_eri_size, 0:build_eri_size,
0:build_eri_size, 0:build_eri_size), BIND(C) :: build_eri
   TYPE(C_FUNPTR), DIMENSION(0:build_deriv1_eri_size, 0:build_deriv1_eri_size,
&
                             0:build_deriv1_eri_size, 0:build_deriv1_eri_size),
BIND(C) :: build_deriv1_eri

   INTERFACE
      SUBROUTINE build_deriv1(deriv, np) BIND(C)
         IMPORT
         TYPE(lib_deriv)                :: deriv
         INTEGER(KIND=C_INT), VALUE      :: np
      END SUBROUTINE build_deriv1
   END INTERFACE

CONTAINS
   SUBROUTINE get_derivs(n_d, n_c, n_b, n_a, deriv, prim, work_forces,
a_mysize)
      INTEGER, INTENT(IN)                                :: n_d, n_c, n_b, n_a
      TYPE(lib_deriv)                                    :: deriv
      TYPE(prim_data), TARGET                            :: prim
      REAL(dp), DIMENSION(nco(n_a)*nco(n_b)*nco(n_c)*nco&
         (n_d), 12)                                      :: work_forces
      INTEGER                                            :: a_mysize(1)

      PROCEDURE(build_deriv1), POINTER         :: pbuild_deriv1
      TYPE(C_PTR)                              :: pc_result
      REAL(C_DOUBLE), DIMENSION(:), POINTER    :: tmp_data
      INTEGER                                  :: i, k

      deriv%PrimQuartet = C_LOC(prim)
      CALL C_F_PROCPOINTER(build_deriv1_eri(n_d, n_c, n_b, n_a), pbuild_deriv1)
      CALL pbuild_deriv1(deriv, 1)

      DO k = 1, 12
         IF (k == 4 .OR. k == 5 .OR. k == 6) CYCLE
         pc_result = deriv%ABCD(k)
         CALL C_F_POINTER(pc_result, tmp_data, a_mysize)
         DO i = 1, a_mysize(1)
            work_forces(i, k) = tmp_data(i)
         ENDDO
      END DO
   END SUBROUTINE get_derivs

END MODULE hfx_libint_wrapper

Reply via email to