This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug fortran/41389] New: problem compiling file


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]