public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug fortran/53175] New: Fortran 4.8 undefined reference to a variable in a module
@ 2012-05-01 17:39 michael.a.richmond at nasa dot gov
2012-05-02 6:00 ` [Bug fortran/53175] [4.8 Regression] link failure for private module variables used in function specification burnus at gcc dot gnu.org
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: michael.a.richmond at nasa dot gov @ 2012-05-01 17:39 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53175
Bug #: 53175
Summary: Fortran 4.8 undefined reference to a variable in a
module
Classification: Unclassified
Product: gcc
Version: 4.8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: michael.a.richmond@nasa.gov
Host: i686-pc-linux-gnu
Target: i686-pc-linux-gnu
Build: i686-pc-linux-gnu
This error occurs only in gnu Fortran 4.8 dated 04/08/2012 or later.
If I type "gfortran main.f90 e.f90 s.f90" I get the following error message:
/tmp/ccwf6p16.o: In function `default_settings.1813':
s.f90:(.text+0x1b): undefined reference to `__energy_function_MOD_dim'
/tmp/ccwf6p16.o: In function `set_simplex_options.1815':
s.f90:(.text+0x1cd): undefined reference to `__energy_function_MOD_dim'
collect2: error: ld returned 1 exit status
If I concatenate e.f90 and s.f90 so that they are compiled as a single file,
the error goes away.
Listed below are the contents of these files:
main.f90
PROGRAM main
END PROGRAM main
e.f90
MODULE ENERGY_FUNCTION
IMPLICIT NONE
TYPE PARAM
PRIVATE
INTEGER :: WHICH_VECTOR
END TYPE PARAM
INTEGER, PRIVATE :: DIM
CONTAINS
FUNCTION ENERGY_FUNCTION_CURRENT_ARGS()
INTEGER, DIMENSION(DIM) :: ENERGY_FUNCTION_CURRENT_ARGS
END FUNCTION ENERGY_FUNCTION_CURRENT_ARGS
FUNCTION ENERGY_FUNCTION_GET_PARAMS()
TYPE(PARAM), DIMENSION(DIM) :: ENERGY_FUNCTION_GET_PARAMS
END FUNCTION ENERGY_FUNCTION_GET_PARAMS
END MODULE ENERGY_FUNCTION
s.f90
MODULE SEARCH_EMIN
USE ENERGY_FUNCTION
IMPLICIT NONE
CONTAINS
SUBROUTINE SEARCH_EMIN_START()
TYPE(PARAM), DIMENSION(:), ALLOCATABLE :: EF_PARAMS
DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: START_PARAMETERS
CALL SET_SIMPLEX_OPTIONS
CONTAINS
SUBROUTINE SET_SIMPLEX_OPTIONS
EF_PARAMS = ENERGY_FUNCTION_GET_PARAMS()
CALL DEFAULT_SETTINGS
END SUBROUTINE SET_SIMPLEX_OPTIONS
SUBROUTINE DEFAULT_SETTINGS
START_PARAMETERS = ENERGY_FUNCTION_CURRENT_ARGS()
END SUBROUTINE DEFAULT_SETTINGS
END SUBROUTINE SEARCH_EMIN_START
END MODULE SEARCH_EMIN
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug fortran/53175] [4.8 Regression] link failure for private module variables used in function specification
2012-05-01 17:39 [Bug fortran/53175] New: Fortran 4.8 undefined reference to a variable in a module michael.a.richmond at nasa dot gov
@ 2012-05-02 6:00 ` burnus at gcc dot gnu.org
2012-05-02 17:16 ` burnus at gcc dot gnu.org
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: burnus at gcc dot gnu.org @ 2012-05-02 6:00 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53175
Tobias Burnus <burnus at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Keywords| |rejects-valid
Last reconfirmed| |2012-05-02
CC| |burnus at gcc dot gnu.org
Ever Confirmed|0 |1
Summary|Fortran 4.8 undefined |[4.8 Regression] link
|reference to a variable in |failure for private module
|a module |variables used in function
| |specification
Target Milestone|--- |4.8.0
--- Comment #1 from Tobias Burnus <burnus at gcc dot gnu.org> 2012-05-02 06:00:08 UTC ---
The regression has been caused by PR 52751 (cf. also PR 40973 and PR 52916).
The patch for those PRs marks the module variable "DIM" as nonpublic, which
increases the optimization possibilities for the compiler. However, "dim" is
used for the type parameter of the result variable of two (public) functions.
The solution is to do the same as for PR 52916 - but this time for module
variables: Setting attr.public_used for the module variable if it is used as
type parameter of public functions - even if those are only available
indirectly via generic interfaces.
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug fortran/53175] [4.8 Regression] link failure for private module variables used in function specification
2012-05-01 17:39 [Bug fortran/53175] New: Fortran 4.8 undefined reference to a variable in a module michael.a.richmond at nasa dot gov
2012-05-02 6:00 ` [Bug fortran/53175] [4.8 Regression] link failure for private module variables used in function specification burnus at gcc dot gnu.org
@ 2012-05-02 17:16 ` burnus at gcc dot gnu.org
2012-05-04 18:54 ` burnus at gcc dot gnu.org
2012-05-04 19:28 ` burnus at gcc dot gnu.org
3 siblings, 0 replies; 5+ messages in thread
From: burnus at gcc dot gnu.org @ 2012-05-02 17:16 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53175
--- Comment #2 from Tobias Burnus <burnus at gcc dot gnu.org> 2012-05-02 17:15:33 UTC ---
As I have not clearly mentioned it before, there exist the following
workarounds:
a) Make "dim" *not* PRIVATE. ("dim" can be marked as PROTECTED to avoid
unwanted changes.) That might be easier for the real world code than
concatenating files together.
b) Put MODULE ENERGY_FUNCTION into the same file as all the callers of its
functions. (For completeness.)
b) Compile "MODULE ENERGY_FUNCTION" with -O0.
c) Use GCC 4.7 and wait for the patch ;-)
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug fortran/53175] [4.8 Regression] link failure for private module variables used in function specification
2012-05-01 17:39 [Bug fortran/53175] New: Fortran 4.8 undefined reference to a variable in a module michael.a.richmond at nasa dot gov
2012-05-02 6:00 ` [Bug fortran/53175] [4.8 Regression] link failure for private module variables used in function specification burnus at gcc dot gnu.org
2012-05-02 17:16 ` burnus at gcc dot gnu.org
@ 2012-05-04 18:54 ` burnus at gcc dot gnu.org
2012-05-04 19:28 ` burnus at gcc dot gnu.org
3 siblings, 0 replies; 5+ messages in thread
From: burnus at gcc dot gnu.org @ 2012-05-04 18:54 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53175
--- Comment #3 from Tobias Burnus <burnus at gcc dot gnu.org> 2012-05-04 18:54:33 UTC ---
Author: burnus
Date: Fri May 4 18:54:25 2012
New Revision: 187175
URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=187175
Log:
2012-05-04 Tobias Burnus <burnus@net-b.de>
PR fortran/53175
* resolve.c (resolve_variable): Set public_used
if a private module variable is used in a (public)
specification expression.
* trans-decl.c (gfc_finish_var_decl): Mark those
TREE_PUBLIC.
2012-05-04 Tobias Burnus <burnus@net-b.de>
PR fortran/53175
gfortran.dg/public_private_module_5.f90: New.
Added:
trunk/gcc/testsuite/gfortran.dg/public_private_module_5.f90
Modified:
trunk/gcc/fortran/ChangeLog
trunk/gcc/fortran/resolve.c
trunk/gcc/fortran/trans-decl.c
trunk/gcc/testsuite/ChangeLog
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug fortran/53175] [4.8 Regression] link failure for private module variables used in function specification
2012-05-01 17:39 [Bug fortran/53175] New: Fortran 4.8 undefined reference to a variable in a module michael.a.richmond at nasa dot gov
` (2 preceding siblings ...)
2012-05-04 18:54 ` burnus at gcc dot gnu.org
@ 2012-05-04 19:28 ` burnus at gcc dot gnu.org
3 siblings, 0 replies; 5+ messages in thread
From: burnus at gcc dot gnu.org @ 2012-05-04 19:28 UTC (permalink / raw)
To: gcc-bugs
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53175
Tobias Burnus <burnus at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Resolution| |FIXED
--- Comment #4 from Tobias Burnus <burnus at gcc dot gnu.org> 2012-05-04 19:28:20 UTC ---
FIXED on the trunk (4.8).
Thanks again for the bug report!
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2012-05-04 19:28 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-05-01 17:39 [Bug fortran/53175] New: Fortran 4.8 undefined reference to a variable in a module michael.a.richmond at nasa dot gov
2012-05-02 6:00 ` [Bug fortran/53175] [4.8 Regression] link failure for private module variables used in function specification burnus at gcc dot gnu.org
2012-05-02 17:16 ` burnus at gcc dot gnu.org
2012-05-04 18:54 ` burnus at gcc dot gnu.org
2012-05-04 19:28 ` burnus at gcc dot gnu.org
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).