This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug fortran/41389] New: problem compiling file
- From: "clerman at fuse dot net" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 17 Sep 2009 17:05:28 -0000
- Subject: [Bug fortran/41389] New: problem compiling file
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
to the gfortran development team,
Here is a file that I am trying to compile:
module exceptions
! Purpose: module for the program-wide exceptions
! Author: N. S. Clerman
! Notes:
! =====
! N. S. Clerman, 5 Sept. 2009: there is a problem here. Calls are made to
Set_flag, which is not pure. No procedure that
! invokes it can be pure. I need to check the Fortran exception handling to
see what happens. (I would think that not
! the case.) The exceptions themselves -- exception_array -- are private, so
I think I could potentially be calling
! this simultaneously from more than one thread, but how do I handle the case
where one thread is setting the flag to
! SIGNALLING and another to QUIET?
implicit none
private
public :: Get_flag, Set_flag
! public :: UNKNOWN_INDEX, BAD_YEAR_INDEX, BAD_MONTH_INDEX, BAD_DAY_INDEX,
BAD_DATE_INDEX
! public :: READ_ERROR_INDEX, FILE_OPEN_ERROR_INDEX, BAD_PRICE_INDEX,
BAD_NO_OF_SHARES_INDEX
! public :: BAD_TRANSACTION_INDEX, UNOPENED_PORTFOLIO_INDEX,
EMPTY_PORTFOLIO_INDEX
! public :: PORTFOLIO_OPENED_INDEX, BAD_PORTFOLIO_NAME_INDEX
! public :: LAST_INDEX, ALLOCATION_ERROR_INDEX
logical, public, parameter :: QUIET = .false., SIGNALLING = .true.
type, public :: exception_t
logical :: flag = QUIET
end type exception_t
type, private :: exception_flag_t
integer :: flag_index
end type exception_flag_t
enum, bind(c)
enumerator :: UNKNOWN_INDEX, BAD_YEAR_INDEX, BAD_MONTH_INDEX,
BAD_DAY_INDEX, BAD_DATE_INDEX , &
READ_ERROR_INDEX, FILE_OPEN_ERROR_INDEX, BAD_PRICE_INDEX,
BAD_NO_OF_SHARES_INDEX, &
BAD_TRANSACTION_INDEX, UNOPENED_PORTFOLIO_INDEX,
EMPTY_PORTFOLIO_INDEX, &
PORTFOLIO_OPENED_INDEX, BAD_PORTFOLIO_NAME_INDEX,
ALLOCATION_ERROR_INDEX, EMPTY_INVESTOR_INDEX, &
LAST_INDEX
end enum
! UNKNOWN_FLAG -
! BAD_YEAR_FLAG - year is out of exceptable range
! BAD_MONTH_FLAG - month is out of range
! BAD_DAY_FLAG - day is out of range
! BAD_DATE_FLAG - date is out of range
! READ_ERROR_FLAG - problem reading with read statement
! FILE_OPEN_ERROR_FLAG - problem opening a file with the open statement.
! BAD_PRICE_FLAG - negative price
! BAD_NO_OF_SHARES_FLAG -
! BAD_TRANSACTION_FLAG -
!
type (exception_flag_t), public, parameter :: &
UNKNOWN_FLAG = exception_flag_t (UNKNOWN_INDEX), &
BAD_YEAR_FLAG = exception_flag_t (BAD_YEAR_INDEX), &
BAD_MONTH_FLAG = exception_flag_t (BAD_MONTH_INDEX), &
BAD_DAY_FLAG = exception_flag_t (BAD_DAY_INDEX), &
BAD_DATE_FLAG = exception_flag_t (BAD_DATE_INDEX), &
READ_ERROR_FLAG = exception_flag_t (READ_ERROR_INDEX), &
FILE_OPEN_ERROR_FLAG = exception_flag_t (FILE_OPEN_ERROR_INDEX), &
BAD_PRICE_FLAG = exception_flag_t (BAD_PRICE_INDEX), &
BAD_NO_OF_SHARES_FLAG = exception_flag_t (BAD_NO_OF_SHARES_INDEX), &
BAD_TRANSACTION_FLAG = exception_flag_t (BAD_TRANSACTION_INDEX), &
EMPTY_PORTFOLIO_FLAG = exception_flag_t (EMPTY_PORTFOLIO_INDEX), &
PORTFOLIO_OPENED_FLAG = exception_flag_t (PORTFOLIO_OPENED_INDEX), &
BAD_PORTFOLIO_NAME_FLAG = exception_flag_t (BAD_PORTFOLIO_NAME_INDEX), &
ALLOCATION_ERROR_FLAG = exception_flag_t (ALLOCATION_ERROR_INDEX), &
EMPTY_INVESTOR_FLAG = exception_flag_t (EMPTY_INVESTOR_INDEX)
type (exception_t), save :: exception_array(0: LAST_INDEX - 1)
contains
elemental function Get_flag (flag_) result (return_value)
type (exception_flag_t), intent (in) :: flag_
logical :: return_value
if (lbound (exception_array, dim = 1) <= flag_% flag_index .and. flag_%
flag_index <= ubound (exception_array, dim = 1) ) &
return_value = exception_array (flag_% flag_index) % flag
end function Get_flag
subroutine Set_flag (flag_, passed_value_)
type (exception_flag_t), intent (in) :: flag_
logical, intent (in) :: passed_value_
if (lbound (exception_array, dim = 1) <= flag_% flag_index .and. flag_%
flag_index <= ubound (exception_array, dim = 1) ) &
exception_array(flag_% flag_index) = exception_t (passed_value_)
end subroutine Set_flag
end module exceptions
here is the output of the compilaton:
norm@oxford:~/allocator> cat exceptions.gfortran.xyz
Using built-in specs.
Target: x86_64-unknown-linux-gnu
Configured with: /home/tob/projects/gcc-trunk-checkout/configure
--with-gmp-lib=/home/tob/projects/gcc-build/lib-aux
--with-mpfr-lib=/home/tob/projects/gcc-build/lib-aux
--with-mpc-lib=/home/tob/projects/gcc-build/lib-aux
--enable-languages=c,fortran,c++ --prefix=/projects/tob/gcc-trunk
Thread model: posix
gcc version 4.5.0 20090917 (experimental) [trunk revision 151786] (GCC)
COLLECT_GCC_OPTIONS='-c' '-g' '-Wall' '-std=f2003' '-O0' '-v' '-mtune=generic'
/opt/gfortran/gcc-trunk/bin/../libexec/gcc/x86_64-unknown-linux-gnu/4.5.0/f951
exceptionsM.f90 -quiet -dumpbase exceptionsM.f90 -mtune=generic -auxbase
exceptionsM -g -O0 -Wall -std=f2003 -version -fintrinsic-modules-path
/opt/gfortran/gcc-trunk/bin/../lib/gcc/x86_64-unknown-linux-gnu/4.5.0/finclude
-o /tmp/ccvPWckV.s
GNU Fortran (GCC) version 4.5.0 20090917 (experimental) [trunk revision 151786]
(x86_64-unknown-linux-gnu)
compiled by GNU C version 4.5.0 20090917 (experimental) [trunk revision
151786], GMP version 4.3.1, MPFR version 2.4.1-p5, MPC version 0.6
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
GNU Fortran (GCC) version 4.5.0 20090917 (experimental) [trunk revision 151786]
(x86_64-unknown-linux-gnu)
compiled by GNU C version 4.5.0 20090917 (experimental) [trunk revision
151786], GMP version 4.3.1, MPFR version 2.4.1-p5, MPC version 0.6
GGC heuristics: --param ggc-min-expand=30 --param ggc-min-heapsize=4096
COLLECT_GCC_OPTIONS='-c' '-g' '-Wall' '-std=f2003' '-O0' '-v' '-mtune=generic'
as -V -Qy -o exceptionsM.o /tmp/ccvPWckV.s
GNU assembler version 2.19 (x86_64-suse-linux) using BFD version (GNU Binutils;
openSUSE 11.1) 2.19
/tmp/ccvPWckV.s: Assembler messages:
/tmp/ccvPWckV.s:133: Error: unknown .loc sub-directive `discriminator'
/tmp/ccvPWckV.s:133: Error: junk at end of line, first unrecognized character
is `1'
/tmp/ccvPWckV.s:136: Error: unknown .loc sub-directive `discriminator'
/tmp/ccvPWckV.s:136: Error: junk at end of line, first unrecognized character
is `1'
/tmp/ccvPWckV.s:140: Error: unknown .loc sub-directive `discriminator'
/tmp/ccvPWckV.s:140: Error: junk at end of line, first unrecognized character
is `2'
/tmp/ccvPWckV.s:143: Error: unknown .loc sub-directive `discriminator'
/tmp/ccvPWckV.s:143: Error: junk at end of line, first unrecognized character
is `2'
/tmp/ccvPWckV.s:145: Error: unknown .loc sub-directive `discriminator'
/tmp/ccvPWckV.s:145: Error: junk at end of line, first unrecognized character
is `2'
/tmp/ccvPWckV.s:148: Error: unknown .loc sub-directive `discriminator'
/tmp/ccvPWckV.s:148: Error: junk at end of line, first unrecognized character
is `2'
/tmp/ccvPWckV.s:181: Error: unknown .loc sub-directive `discriminator'
/tmp/ccvPWckV.s:181: Error: junk at end of line, first unrecognized character
is `1'
/tmp/ccvPWckV.s:184: Error: unknown .loc sub-directive `discriminator'
/tmp/ccvPWckV.s:184: Error: junk at end of line, first unrecognized character
is `1'
/tmp/ccvPWckV.s:187: Error: unknown .loc sub-directive `discriminator'
/tmp/ccvPWckV.s:187: Error: junk at end of line, first unrecognized character
is `2'
/tmp/ccvPWckV.s:190: Error: unknown .loc sub-directive `discriminator'
/tmp/ccvPWckV.s:190: Error: junk at end of line, first unrecognized character
is `2'
I'm afraid I cannot interpret this problem. Perhaps I am using the incorrect
flags, but they are the same that I am using to compile files that are far
longer and more complicated. (Both version 5.2 of the nag compiler and version
11.1 of the Intel compiler are able to successfully compile this file.)
Yours truly,
Norm
Norm Clerman
--
Summary: problem compiling file
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: clerman at fuse dot net
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=41389