Silverfrost Forums

Welcome to our forums

Weird warning messages when compiling for .NET

26 Dec 2007 11:09 #2548

I have some codes that compile with no problem for Win32 but when I try compiling them for .NET I get warning messages like the following.

WARNING Variable Alternate_address_of_XF has been declared but not used

What could this message mean? I have a variable called xf (actually a structure) but there is no variable called Alternate_address_of_XF.

Later there is another warning,

WARNING Variable Alternate_address_of_XF has been used without being given an initial value

…and then an error.

**ERROR Internal compiler error **

What on earth can these messages mean? I’ve tried compiling for SDK 1.1 and 2.0 but it makes no difference.

Keith

27 Dec 2007 9:02 #2549

This message amounts to a compiler bug.

The variable has been added as a temporary by the compiler so it ought not to complain that it has not been used!

Please post a sample of code that illustrates this message when compiled so that we can fix the bug.

28 Dec 2007 10:41 #2550

Paul

Here is the code stripped down to the minimum that still demonstrates the warning message. The original code had more module dependencies and generates a series of such warning messages and compilation eventually fails with the aforementioned error message.

Keith

! ----------------------------------------------------------------------
! FILE BG_DOC.F90
!
! ----------------------------------------------------------------

MODULE WX_Document

  USE WX_Buff,       ONLY: buffer_t,       &
                           Buff_toStr

  IMPLICIT NONE
  SAVE

  PRIVATE

  INTEGER(KIND=SELECTED_INT_KIND(9)), &
                      PARAMETER :: long   = SELECTED_INT_KIND(9)


  INTEGER(KIND=long), PARAMETER :: XML_ERRMESS_LEN = 100

  CHARACTER(LEN=2),   PARAMETER :: EndOfLine = ACHAR(13) // ACHAR(10)

  TYPE :: XmlError_t
    INTEGER(KIND=long)             :: id  = 0       ! Message integer identifier
    CHARACTER(LEN=XML_ERRMESS_LEN) :: str = ''      ! Message character string
  END TYPE

  TYPE :: XmlDoc_t
    PRIVATE
    LOGICAL                    :: documentIsOpen       = .FALSE.
    LOGICAL                    :: error                = .FALSE.

    TYPE(XmlError_t)           :: errMess              = XmlError_t(0, '')
    TYPE(buffer_t)             :: buffer

  END TYPE

  INTERFACE Xml_Close
    MODULE PROCEDURE Xml_CloseToChan, &
                     Xml_CloseToChar
  END INTERFACE

CONTAINS

!----------------------------------------------------------------
  SUBROUTINE Xml_CloseToChan (xf, lunit, error)
    TYPE(xmlDoc_t),     INTENT(INOUT) :: xf
    INTEGER(KIND=long), INTENT(IN)    :: lunit
    LOGICAL, OPTIONAL,  INTENT(OUT)   :: error

    INTEGER(KIND=long)                  :: ios
    CHARACTER(LEN=XML_ERRMESS_LEN + 10) :: errorString

    IF (xf%error) THEN
      errorString = '0222, Some message goes here'
      WRITE(lunit, '(A)', IOSTAT=ios) Buff_toStr(xf%buffer) // EndOfLine &
                                                            // TRIM(errorString)
    ELSE
      WRITE(lunit, '(A)', IOSTAT=ios) Buff_toStr(xf%buffer)
    ENDIF

    IF (ios /= 0) xf%error = .TRUE.

    IF (PRESENT(error)) error = xf%error

    xf%documentIsOpen = .FALSE.

  END SUBROUTINE

! --------------------------------------------
  SUBROUTINE Xml_CloseToChar (xf, sOut, error)
    TYPE(xmlDoc_t),    INTENT(INOUT) :: xf
    CHARACTER(LEN=*),  INTENT(INOUT) :: sOut
    LOGICAL, OPTIONAL, INTENT(OUT)   :: error

    CHARACTER(LEN=XML_ERRMESS_LEN + 10) :: errorString

    IF (xf%error) THEN
      errorString = '0333, Some message goes here'
      sOut = Buff_toStr(xf%buffer) // EndOfLine &
                                   // TRIM(errorString)
    ELSE
      sOut = Buff_toStr(xf%buffer)
    ENDIF

    IF (PRESENT(error)) error = xf%error

    xf%documentIsOpen = .FALSE.

  END SUBROUTINE

!-------------------------------------------------------------------


END MODULE

! ==================================================================

! ----------------------------------------------------------------------
! FILE BG_BUFF.F90
!
!
! ----------------------------------------------------------------

MODULE WX_Buff

  IMPLICIT NONE
  PRIVATE

  INTEGER(KIND=SELECTED_INT_KIND(9)), &
                      PARAMETER :: long   = SELECTED_INT_KIND(9)

  INTEGER(KIND=long), PARAMETER :: MAX_BUFF_SIZE = 1048576

  TYPE :: buffer_t
    PRIVATE
    INTEGER(KIND=long)           :: size = 0
    CHARACTER(LEN=MAX_BUFF_SIZE) :: str  = ''
  END TYPE

  PUBLIC buffer_t,   &
         Buff_toStr


CONTAINS


!----------------------------------------------------------------
! Returns current contents of buffer as a string.
!
  FUNCTION Buff_toStr (buffer) result(str)
    TYPE(buffer_t), INTENT(IN) :: buffer
    CHARACTER(LEN=buffer%size) :: str

    str = buffer%str(1: buffer%size)
  END FUNCTION

!----------------------------------------------------------------


END MODULE

! ====================================================================
28 Dec 2007 10:52 #2551

Drat – it hasn’t posted properly. It looked ok in Preview! Let's try separate modules.

! ----------------------------------------------------------------------
! FILE BG_DOC.F90
!
! ----------------------------------------------------------------

MODULE WX_Document

  USE WX_Buff,       ONLY: buffer_t,       &
                           Buff_toStr

  IMPLICIT NONE
  SAVE

  PRIVATE

  INTEGER(KIND=SELECTED_INT_KIND(9)), &
                      PARAMETER :: long   = SELECTED_INT_KIND(9)


  INTEGER(KIND=long), PARAMETER :: XML_ERRMESS_LEN = 100

  CHARACTER(LEN=2),   PARAMETER :: EndOfLine = ACHAR(13) // ACHAR(10)

  TYPE :: XmlError_t
    INTEGER(KIND=long)             :: id  = 0       ! Message integer identifier
    CHARACTER(LEN=XML_ERRMESS_LEN) :: str = ''      ! Message character string
  END TYPE

  TYPE :: XmlDoc_t
    PRIVATE
    LOGICAL                    :: documentIsOpen       = .FALSE.
    LOGICAL                    :: error                = .FALSE.

    TYPE(XmlError_t)           :: errMess              = XmlError_t(0, '')
    TYPE(buffer_t)             :: buffer

  END TYPE

  INTERFACE Xml_Close
    MODULE PROCEDURE Xml_CloseToChan, &
                     Xml_CloseToChar
  END INTERFACE

CONTAINS

!----------------------------------------------------------------
  SUBROUTINE Xml_CloseToChan (xf, lunit, error)
    TYPE(xmlDoc_t),     INTENT(INOUT) :: xf
    INTEGER(KIND=long), INTENT(IN)    :: lunit
    LOGICAL, OPTIONAL,  INTENT(OUT)   :: error

    INTEGER(KIND=long)                  :: ios
    CHARACTER(LEN=XML_ERRMESS_LEN + 10) :: errorString

    IF (xf%error) THEN
      errorString = '0222, Some message goes here'
      WRITE(lunit, '(A)', IOSTAT=ios) Buff_toStr(xf%buffer) // EndOfLine &
                                                            // TRIM(errorString)
    ELSE
      WRITE(lunit, '(A)', IOSTAT=ios) Buff_toStr(xf%buffer)
    ENDIF

    IF (ios /= 0) xf%error = .TRUE.

    IF (PRESENT(error)) error = xf%error

    xf%documentIsOpen = .FALSE.

  END SUBROUTINE

! --------------------------------------------
  SUBROUTINE Xml_CloseToChar (xf, sOut, error)
    TYPE(xmlDoc_t),    INTENT(INOUT) :: xf
    CHARACTER(LEN=*),  INTENT(INOUT) :: sOut
    LOGICAL, OPTIONAL, INTENT(OUT)   :: error

    CHARACTER(LEN=XML_ERRMESS_LEN + 10) :: errorString

    IF (xf%error) THEN
      errorString = '0333, Some message goes here'
      sOut = Buff_toStr(xf%buffer) // EndOfLine &
                                   // TRIM(errorString)
    ELSE
      sOut = Buff_toStr(xf%buffer)
    ENDIF

    IF (PRESENT(error)) error = xf%error

    xf%documentIsOpen = .FALSE.

  END SUBROUTINE

!-------------------------------------------------------------------


END MODULE

! ==================================================================
28 Dec 2007 1:21 #2552

(Continue)

! ----------------------------------------------------------------------
! FILE BG_BUFF.F90
!
!
! ----------------------------------------------------------------

MODULE WX_Buff

  IMPLICIT NONE
  PRIVATE

  INTEGER(KIND=SELECTED_INT_KIND(9)), &
                      PARAMETER :: long   = SELECTED_INT_KIND(9)

  INTEGER(KIND=long), PARAMETER :: MAX_BUFF_SIZE = 1048576

  TYPE :: buffer_t
    PRIVATE
    INTEGER(KIND=long)           :: size = 0
    CHARACTER(LEN=MAX_BUFF_SIZE) :: str  = ''
  END TYPE

  PUBLIC buffer_t,   &
         Buff_toStr


CONTAINS


!----------------------------------------------------------------
! Returns current contents of buffer as a string.
!
  FUNCTION Buff_toStr (buffer) result(str)
    TYPE(buffer_t), INTENT(IN) :: buffer
    CHARACTER(LEN=buffer%size) :: str

    str = buffer%str(1: buffer%size)
  END FUNCTION

!----------------------------------------------------------------


END MODULE

!===================================================================
Please login to reply.