IBM Support

LI76095: TYPO CAUSING INTERNAL COMPILER ERROR

Subscribe

You can track all active APARs for this component.

 

APAR status

  • Closed as program error.

Error description

  • The typo on line 104 of test.f90 causes the Fortran compiler to
    abend.
    
    ===== COMPILE COMMAND:
    $ xlf95 -c test.f90
    
    ===== TESTCASE:
    $ cat test.f90
    Module Series
    
    Implicit None
    
    Integer, Parameter :: wp = Kind(1.0d0)   ! working, double
    
    Contains
    
    !------------------------------------------------------------
      Subroutine Jonc(z, s, res_J, est_abs_err, est_rel_err, &
           &               n, k, abs_err, rel_err, meth)
    
        Implicit none
    
        ! Subroutine arguments:
        Real(wp), intent(IN)  :: z
        Real(wp), intent(IN)  :: s
        Real(wp), intent(OUT) :: res_J
        Real(wp), intent(OUT) :: est_abs_err
        Real(wp), intent(OUT) :: est_rel_err
        Integer,  intent(IN), optional :: n
        Integer,  intent(IN), optional :: k
        Real(wp), intent(IN), optional :: abs_err
        Real(wp), intent(IN), optional :: rel_err
        Integer,  intent(IN), optional :: meth
    
        ! Local variables:
        Integer  :: i, j, j1, j2, nn, kk
        Real(wp) :: den, num, res
        Real(wp) :: uabs_err, r
        Integer  :: umeth
        Real(wp), allocatable :: C(:)
        Real(wp), allocatable :: A(:,:)
    
        If (present(n)) Then
           nn=n
        Else
           nn=50
        End If
        If (present(k)) Then
           kk=k
        Else
           kk=5
        End If
        If (present(abs_err)) Then
           uabs_err=abs_err
        Else
           uabs_err=1.0e-5
        End If
        If (present(meth)) Then
           umeth=meth
        Else
           umeth=1
        End If
    
        If ( (z <= 10.0_wp*tiny(1.0_wp)) .AND. (z >=
    10.0_wp*tiny(1.0_wp)) )  Then
           res_J = z
           est_abs_err = 0.00001_wp
    
        Else If ( (z <= 0.001_wp) .AND. ( z >= -0.001_wp) ) Then
           res_J = z + (z*z)/(2.0_wp**s)
           est_abs_err = 0.00001_wp
    
        Else If ( (z < 2.49_wp) ) Then
           allocate(C(1:nn))
           allocate(A(0:nn,1:kk))
           Forall (i=1:nn)
              C(i) = (z**i) *  ( 1.0_wp / (Real(i,wp))**s )
           End Forall
           A(0,1) = C(1)
           Forall (i=1: nn)
              A(i,1) = sum(C(1:i))
           End Forall
           If (umeth == 0) Then
              res = A(nn,1)
              est_abs_err = abs(res-A(nn-1,1))
              est_rel_err = abs(est_abs_err / res)
           End If
           deallocate(C)
           deallocate(A)
    
        End If
    
      End Subroutine Jonc
    End Module Series
    
    !===============================================================
    
    Program Jonc1
    
      Implicit none
    
      Integer, Parameter :: wp = Kind(1.0d0)   ! working, double
      Integer, Parameter :: kp = Kind(1.0e0)   ! komplot, single
    
      Integer, Parameter :: np=80, nirc = 12
      real(wp) :: psi, den, RI, RI_err
      Real(wp) :: bias, mo1, mo1_err, bias_err
      Real(wp) :: xar(1:np), yar(1:np), dyar(1:np), zar1(1:np),
    zar2(1:np)
      Real(wp) :: yintar(1:np), yintarc(1:np), dyintar(1:np)
      Real(wp) :: R(1:nirc), err_est(1:nirc)
      Integer  :: i
      ! syntax error -------------v
      Real(kp) :: xark(1:np), yark*1:np), dyark(1:np), zar1k(1:np),
    zar2k(1:np)
      ! syntax error -------------^
    
      Do i       = 1, np
         RI         = R(3) ; RI_err   = err_est(3)
         bias       = R(5) ; bias_err = err_est(5)
         Mo1        = R(9) ; Mo1_err  = err_est(9)
         yintarc(i) = yintar(i)/den
         dyintar(i) = RI/(xar(i)**2)
      End Do
    
      Forall (i=1:np)
        xark(i)     = Real(xar(i),kp)
        yark(i)     = max(min(Real(yar(i),kp), 1.0_kp), -1000.0_kp)
        dyark(i)    = max(min(Real(dyar(i),kp), 1000.0_kp),
    -1000.0_kp)
        zar1k(i)    = Real(zar1(i),kp)
        zar2k(i)    = Real(zar2(i),kp)
      End Forall
    
    End Program Jonc1
    
    !============================================================
    $
    
    
    
    ===== ACTUAL OUTPUT:
    $xlf95 -c test.f90
    ** series   === End of Compilation 1 ===
    /usr/bin/.orig/xlf95: 1501-230 (S) Internal compiler error;
    please contact your Service Representative. For more information
    visit:
    http://www.ibm.com/support/docview.wss?uid=swg21110810
    1501-511  Compilation failed for file test.f90.
    $
    
    ===== EXPECTED OUTPUT:
    $xlf95 -c test.f90
    ** series   === End of Compilation 1 ===
    "test.f90", line 104.12: 1515-019 (S) Syntax is incorrect.
    "test.f90", line 116.5: 1516-036 (S) Entity xark has undefined
    type.
    "test.f90", line 116.5: 1515-025 (S) Only a name of a variable,
    array element, or character substring is permitted on the left
    hand side of an assignment statement.
    "test.f90", line 117.5: 1516-036 (S) Entity yark has undefined
    type.
    "test.f90", line 117.5: 1515-025 (S) Only a name of a variable,
    array element, or character substring is permitted on the left
    hand side of an assignment statement.
    "test.f90", line 118.5: 1516-036 (S) Entity dyark has undefined
    type.
    "test.f90", line 118.5: 1515-025 (S) Only a name of a variable,
    array element, or character substring is permitted on the left
    hand side of an assignment statement.
    "test.f90", line 119.5: 1516-036 (S) Entity zar1k has undefined
    type.
    "test.f90", line 119.5: 1515-025 (S) Only a name of a variable,
    array element, or character substring is permitted on the left
    hand side of an assignment statement.
    "test.f90", line 120.5: 1516-036 (S) Entity zar2k has undefined
    type.
    "test.f90", line 120.5: 1515-025 (S) Only a name of a variable,
    array element, or character substring is permitted on the left
    hand side of an assignment statement.
    ** jonc1   === End of Compilation 2 ===
    

Local fix

  • n/a
    

Problem summary

  • USERS AFFECTED:
    Users of XL Fortran 13.1 on AIX and Linux are potentially
    affected by this issue.
    
    PROBLEM DESCRIPTION:
    When the declaration of a variable that is used in FORALL has a
    syntax error, the Fortran compiler can
    sometimes have an internal compiler error. The reason for this
    internal compiler error is because
    the compiler tries to recover from detecting the typo in the
    source code to continue finding other
    syntax errors during compile time. Due to the recovery process
    of the first syntax error, the compiler
    can sometimes miss interpret information leading to an abend.
    

Problem conclusion

  • The problem has been fixed to detect and handle the scenario
    mentioned in the test case.
    

Temporary fix

Comments

APAR Information

  • APAR number

    LI76095

  • Reported component name

    XL FORTRAN LINU

  • Reported component ID

    5724X1600

  • Reported release

    D10

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt / Xsystem

  • Submitted date

    2011-04-27

  • Closed date

    2011-04-27

  • Last modified date

    2011-04-27

  • APAR is sysrouted FROM one or more of the following:

    IZ87501

  • APAR is sysrouted TO one or more of the following:

Fix information

  • Fixed component name

    XL FORTRAN LINU

  • Fixed component ID

    5724X1600

Applicable component levels

[{"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSAT4T","label":"XL Fortran for Linux"},"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"D10","Line of Business":{"code":"LOB57","label":"Power"}}]

Document Information

Modified date:
17 October 2021