- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
we are trying to build our programs for 64 bits Linux, but are stumbling on an ICE. The code compiles
fine for 32-bits, but causes the following message with 64 bits (ia64):
: catastrophic error: **Internal compiler error: internal abort** Please report this error along with the circumstances in which it occurred in a Software Problem Report. Note: File and line given may not be explicit cause of this error.
It is not clear where in the source file this is coming from. I did find out that the -g is causing the problem.
Without it, the compilation succeeds.
The platform: Linux, 64 bits, Intel Fortran 11.0
The (reduced) code that gives this problem is included below.
Regards,
Arjen
----
module MHCallBack
abstract interface
subroutine mh_callbackiface(level)
integer, intent(in) :: level !< The severity level
end subroutine mh_callbackiface
end interface
end module MHCallBack
module MessageHandling
use MHCallBack
implicit none
public SetMessage
public GetMessageCount
public SetMessageHandling
public mess
public err
public GetMessage_MH
public resetMessageCount_MH
public getMaxErrorLevel
public resetMaxerrorLevel
integer,parameter, public :: LEVEL_DEBUG = 1
integer,parameter, public :: LEVEL_INFO = 2
integer,parameter, public :: LEVEL_WARN = 3
integer,parameter, public :: LEVEL_ERROR = 4
integer,parameter, public :: LEVEL_FATAL = 5
integer,parameter, public :: Charln = 40
integer,parameter, public :: max_level = 5
character(len=12), dimension(max_level), &
private :: level_prefix = &
(/' ', ' ', '** WARNING:', '** ERROR:', '** FATAL:'/)
interface mess
module procedure message1string
end interface
interface err
module procedure error1char
end interface
private
integer, parameter, private :: maxMessages = 3000
character(len=256), dimension(maxMessages), private :: Messages
integer , dimension(maxMessages), private :: Levels
integer , private :: messagecount
integer , private :: maxErrorLevel = 0
integer , private :: thresholdLvl = 0
integer, save :: lunMess = 0
logical, save :: writeMessage2Screen = .false.
logical, save :: useLogging = .true.
!> Callback routine invoked upon any mess/err (i.e. SetMessage)
procedure(mh_callbackiface), pointer :: mh_callback => null()
contains
!> Sets up the output of messages. All three formats are optional
!! and can be used in any combination.
subroutine SetMessageHandling(write2screen, useLog, lunMessages, callback, thresholdLevel)
logical, optional, intent(in) :: write2screen !< Print messages to stdout.
logical, optional, intent(in) :: useLog !< Store messages in buffer.
integer, optional, intent(in) :: lunMessages !< File pointer whereto messages can be written.
integer, optional, intent(in) :: thresholdLevel !< Messages with level lower than the thresholdlevel
!< will be discarded.
procedure(mh_callbackiface), optional, pointer :: callback
if (present(write2screen) ) writeMessage2Screen = write2screen
if (present(lunMessages) ) lunMess = lunMessages
if (present(useLog) ) useLogging = useLog
if (present(callback) ) mh_callback =>callback
if (present(thresholdLevel) ) thresholdLvl = thresholdLevel
end subroutine SetMessageHandling
!> The main message routine. Puts the message string to all output
!! channels previously set up by SetMessageHandling
subroutine SetMessage(level, string)
integer, intent(in) :: level !< One of: LEVEL_(DEBUG|INFO|WARN|ERROR|FATAL).
character(len=*), intent(in) :: string !< Complete message string.
integer :: levelact
levelact = max(1,min(max_level, level))
! Optional callback routine for any user-specified actions (e.g., upon error)
if (associated(mh_callback)) then
call mh_callback(level) ! AvD: in future, possibly also error #ID
end if
end subroutine
integer function getMessageCount()
getMessageCount = messagecount
end function
integer function GetMessage_MH(imessage, message)
character(len=200) :: message
integer, intent(in) :: imessage
message=messages(imessage)
GetMessage_MH = levels(imessage)
end function
subroutine resetMessageCount_MH()
messageCount = 0
end subroutine
integer function getMaxErrorLevel()
getMaxErrorLevel = maxErrorLevel
end function
subroutine resetMaxerrorLevel()
maxErrorLevel = 0
end subroutine
subroutine message1string(level, w1)
character(*) :: w1
integer :: level
integer :: l1
character(600) :: rec
rec = ' '
l1 = max(1, len_trim(w1))
write (rec(1:), '(a)') w1(:l1)
call setMessage(level, rec)
end subroutine message1string
!-- Error interfaces ----------------------------
subroutine error1char(w1)
character(*) :: w1
call mess(LEVEL_ERROR, w1)
end subroutine error1char
end module MessageHandling
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
You posted this in the Windows forum, but...
Would you please show me the command line you used and the output of an "ifort -V" command? Do you really mean IA-64 (Itanum) or perhaps did you mean "Intel 64" (x64)?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Are you targeting Itanium systems?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
the output from ifort -V is:
Intel Fortran Intel 64 Compiler Professional for applications running on Intel 64, Version 11.0 Build 20090131 Package ID: l_cprof_p_11.0.081
Copyright (C) 1985-2009 Intel Corporation. All rights reserved.
(this is after issuing: . ..../ifortvars.sh ia64)
I noticed there are three possible targets: ia32, ia64 and intel64. I guess I should be using intel64, as we
are not targeting Itanium perse.
Regards,
Arjen
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Can you try a more current compiler?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
platform.
I will see if we alreadyhave 11.1 installed somewhere.
Regards,
Arjen
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Thanks,
Arjen
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page