OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [gfortran.dg/] [used_interface_ref.f90] - Rev 708

Go to most recent revision | Compare with Previous | Blame | View Log

! { dg-do run }
! Tests the fix for PR26393, in which an ICE would occur in trans-decl.c
! (gfc_get_symbol_decl) because anzKomponenten is not referenced in the
! interface for solveCConvert. The solution was to assert that the symbol
! is either referenced or in an interface body.
!
! Based on the testcase in the PR.
!
  MODULE MODULE_CONC
    INTEGER, SAVE :: anzKomponenten = 2
  END MODULE MODULE_CONC

  MODULE MODULE_THERMOCALC
    INTERFACE
      FUNCTION solveCConvert ()
        USE MODULE_CONC, ONLY: anzKomponenten
        REAL :: solveCConvert(1:anzKomponenten)
        END FUNCTION solveCConvert
    END INTERFACE
  END MODULE MODULE_THERMOCALC

  SUBROUTINE outDiffKoeff
    USE MODULE_CONC
    USE MODULE_THERMOCALC
    REAL :: buffer_conc(1:anzKomponenten)
    buffer_conc = solveCConvert ()
    if (any(buffer_conc .ne. (/(real(i), i = 1, anzKomponenten)/))) &
          call abort ()
  END SUBROUTINE outDiffKoeff

  program missing_ref
    USE MODULE_CONC
    call outDiffKoeff
! Now set anzKomponenten to a value that would cause a segfault if
! buffer_conc and solveCConvert did not have the correct allocation
! of memory.
    anzKomponenten = 5000
    call outDiffKoeff
  end program missing_ref
 
  FUNCTION solveCConvert ()
    USE MODULE_CONC, ONLY: anzKomponenten
    REAL :: solveCConvert(1:anzKomponenten)
    solveCConvert = (/(real(i), i = 1, anzKomponenten)/)
  END FUNCTION solveCConvert

! { dg-final { cleanup-modules "module_conc module_thermocalc" } }

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.