From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13086 invoked by alias); 17 Sep 2009 17:05:47 -0000 Received: (qmail 11207 invoked by uid 48); 17 Sep 2009 17:05:28 -0000 Date: Thu, 17 Sep 2009 17:05:00 -0000 Subject: [Bug fortran/41389] New: problem compiling file X-Bugzilla-Reason: CC Message-ID: Reply-To: gcc-bugzilla@gcc.gnu.org To: gcc-bugs@gcc.gnu.org From: "clerman at fuse dot net" Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2009-09/txt/msg01584.txt.bz2 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