IBM Support

PI07445: ABEND WITH DIVIDE BY ZERO MESSAGE

A fix is available

Subscribe

You can track all active APARs for this component.

 

APAR status

  • Closed as program error.

Error description

  • The following test case generates compiler abend with divide by
    zero message.
    
    xlc -c test.c
    CEE3209S The system detected a fixed-point divide exception
    (System Completion Code=0C9).
             From entry point PIC390 at statement 70 at compile
    unit offset +00000020 at entry offset +00000020 at address
             281D05D8.
    FSUM3224 xlc: Fatal error in util/usr/lpp/cbclib/xlc/exe/
    ccndrvr: signal 9 received.
    
    
    ====Start of test.c=====
    typedef unsigned int size_t;
    int    __memcmp  (const void *, const void *, size_t);
    
    typedef int verify_sizeof_flt[(((((6 * 4) - 1) + (((63 - (-64))
    | 7) < 0x100 ? 8 : ((63 - (-64)) | 7) < 0x200 ? 9 : ((63 -
    (-64)) | 7) < 0x400 ? 10 : ((63 - (-64)) | 7) < 0x800 ? 11 :
    ((63 - (-64)) | 7) < 0x1000 ? 12 : ((63 - (-64)) | 7) < 0x2000
    ? 13 : ((63 - (-64)) | 7) < 0x4000 ? 14 : ((63 - (-64)) | 7) <
    0x8000 ? 15 : ((63 - (-64)) | 7) < 0x10000 ? 16 : ((63 - (-64))
    | 7) < 0x20000 ? 17 : ((63 - (-64)) | 7) < 0x40000 ? 18 : ((63
    - (-64)) | 7) < 0x80000 ? 19 : ((63 - (-64)) | 7) < 0x100000 ?
    20 : ((63 - (-64)) | 7) < 0x200000 ? 21 : ((63 - (-64)) | 7) <
    0x400000 ? 22 : ((63 - (-64)) | 7) < 0x800000 ? 23 : ((63 -
    (-64)) | 7) < 0x1000000 ? 24 : ((63 - (-64)) | 7) < 0x2000000 ?
    25 : ((63 - (-64)) | 7) < 0x4000000 ? 26 : ((63 - (-64)) | 7) <
    0x8000000 ? 27 : ((63 - (-64)) | 7) < 0x10000000 ? 28 : ((63 -
    (-64)) | 7) < 0x20000000 ? 29 : ((63 - (-64)) | 7) < 0x40000000
    ? 30 : ((63 - (-64)) | 7) <= 0x7fffffff ? 31 : 32) + 1) + 8 -
    1) / 8) <= sizeof (float) ? 1 : -1];
    typedef int verify_sizeof_dbl[(((((14 * 4) - 1) + (((63 -
    (-64)) | 7) < 0x100 ? 8 : ((63 - (-64)) | 7) < 0x200 ? 9 : ((63
    - (-64)) | 7) < 0x400 ? 10 : ((63 - (-64)) | 7) < 0x800 ? 11 :
    ((63 - (-64)) | 7) < 0x1000 ? 12 : ((63 - (-64)) | 7) < 0x2000
    ? 13 : ((63 - (-64)) | 7) < 0x4000 ? 14 : ((63 - (-64)) | 7) <
    0x8000 ? 15 : ((63 - (-64)) | 7) < 0x10000 ? 16 : ((63 - (-64))
    | 7) < 0x20000 ? 17 : ((63 - (-64)) | 7) < 0x40000 ? 18 : ((63
    - (-64)) | 7) < 0x80000 ? 19 : ((63 - (-64)) | 7) < 0x100000 ?
    20 : ((63 - (-64)) | 7) < 0x200000 ? 21 : ((63 - (-64)) | 7) <
    0x400000 ? 22 : ((63 - (-64)) | 7) < 0x800000 ? 23 : ((63 -
    (-64)) | 7) < 0x1000000 ? 24 : ((63 - (-64)) | 7) < 0x2000000 ?
    25 : ((63 - (-64)) | 7) < 0x4000000 ? 26 : ((63 - (-64)) | 7) <
    0x8000000 ? 27 : ((63 - (-64)) | 7) < 0x10000000 ? 28 : ((63 -
    (-64)) | 7) < 0x20000000 ? 29 : ((63 - (-64)) | 7) < 0x40000000
    ? 30 : ((63 - (-64)) | 7) <= 0x7fffffff ? 31 : 32) + 1) + 8 -
    1) / 8) <= sizeof (double) ? 1 : - 1];
    typedef int verify_sizeof_ldbl[(((((28 * 4) - 1) + (((63 -
    (-64)) | 7) < 0x100 ? 8 : ((63 - (-64)) | 7) < 0x200 ? 9 : ((63
    - (-64)) | 7) < 0x400 ? 10 : ((63 - (-64)) | 7) < 0x800 ? 11 :
    ((63 - (-64)) | 7) < 0x1000 ? 12 : ((63 - (-64)) | 7) < 0x2000
    ? 13 : ((63 - (-64)) | 7) < 0x4000 ? 14 : ((63 - (-64)) | 7) <
    0x8000 ? 15 : ((63 - (-64)) | 7) < 0x10000 ? 16 : ((63 - (-64))
    | 7) < 0x20000 ? 17 : ((63 - (-64)) | 7) < 0x40000 ? 18 : ((63
    - (-64)) | 7) < 0x80000 ? 19 : ((63 - (-64)) | 7) < 0x100000 ?
    20 : ((63 - (-64)) | 7) < 0x200000 ? 21 : ((63 - (-64)) | 7) <
    0x400000 ? 22 : ((63 - (-64)) | 7) < 0x800000 ? 23 : ((63 -
    (-64)) | 7) < 0x1000000 ? 24 : ((63 - (-64)) | 7) < 0x2000000 ?
    25 : ((63 - (-64)) | 7) < 0x4000000 ? 26 : ((63 - (-64)) | 7) <
    0x8000000 ? 27 : ((63 - (-64)) | 7) < 0x10000000 ? 28 : ((63 -
    (-64)) | 7) < 0x20000000 ? 29 : ((63 - (-64)) | 7) < 0x40000000
    ? 30 : ((63 - (-64)) | 7) <= 0x7fffffff ? 31 : 32) + 1) + 8 -
    1) / 8) <= sizeof (long double) ? 1 : - 1];
    
    typedef union { float value; unsigned int word[((sizeof (float)
    + sizeof (unsigned int) - 1) / sizeof (unsigned int))]; }
    memory_double;
    
    int
    rpl_isnanf (float x)
    {
    
      static memory_double nan = { 0.0f / 0.0f };
      static float plus_inf = 1.0f / 0.0f;
      static float minus_inf = -1.0f / 0.0f;
      {
        memory_double m;
    
    
        m.value = x;
        if (((m.word[0] ^ nan.word[0])
             & (((63 - (-64)) | 7) << 20))
            == 0)
          return (__memcmp(&m.value,&plus_inf,(((((6 * 4) - 1) +
    (((63 - (-64)) | 7) < 0x100 ? 8 : ((63 - (-64)) | 7) < 0x200 ?
    9 : ((63 - (-64)) | 7) < 0x400 ? 10 : ((63 - (-64)) | 7) <
    0x800 ? 11 : ((63 - (-64)) | 7) < 0x1000 ? 12 : ((63 - (-64)) |
    7) < 0x2000 ? 13 : ((63 - (-64)) | 7) < 0x4000 ? 14 : ((63 -
    (-64)) | 7) < 0x8000 ? 15 : ((63 - (-64)) | 7) < 0x10000 ? 16 :
    ((63 - (-64)) | 7) < 0x20000 ? 17 : ((63 - (-64)) | 7) <
    0x40000 ? 18 : ((63 - (-64)) | 7) < 0x80000 ? 19 : ((63 -
    (-64)) | 7) < 0x100000 ? 20 : ((63 - (-64)) | 7) < 0x200000 ?
    21 : ((63 - (-64)) | 7) < 0x400000 ? 22 : ((63 - (-64)) | 7) <
    0x800000 ? 23 : ((63 - (-64)) | 7) < 0x1000000 ? 24 : ((63 -
    (-64)) | 7) < 0x2000000 ? 25 : ((63 - (-64)) | 7) < 0x4000000 ?
    26 : ((63 - (-64)) | 7) < 0x8000000 ? 27 : ((63 - (-64)) | 7) <
    0x10000000 ? 28 : ((63 - (-64)) | 7) < 0x20000000 ? 29 : ((63 -
    (-64)) | 7) < 0x40000000 ? 30 : ((63 - (-64)) | 7) <=
    0x7fffffff ? 31 : 32) + 1) + 8 - 1) / 8)) != 0
                  && __memcmp(&m.value,&minus_inf,(((((6 * 4) - 1)
    + (((63 - (-64)) | 7) < 0x100 ? 8 : ((63 - (-64)) | 7) < 0x200
    ? 9 : ((63 - (-64)) | 7) < 0x400 ? 10 : ((63 - (-64)) | 7) <
    0x800 ? 11 : ((63 - (-64)) | 7) < 0x1000 ? 12 : ((63 - (-64)) |
    7) < 0x2000 ? 13 : ((63 - (-64)) | 7) < 0x4000 ? 14 : ((63 -
    (-64)) | 7) < 0x8000 ? 15 : ((63 - (-64)) | 7) < 0x10000 ? 16 :
    ((63 - (-64)) | 7) < 0x20000 ? 17 : ((63 - (-64)) | 7) <
    0x40000 ? 18 : ((63 - (-64)) | 7) < 0x80000 ? 19 : ((63 -
    (-64)) | 7) < 0x100000 ? 20 : ((63 - (-64)) | 7) < 0x200000 ?
    21 : ((63 - (-64)) | 7) < 0x400000 ? 22 : ((63 - (-64)) | 7) <
    0x800000 ? 23 : ((63 - (-64)) | 7) < 0x1000000 ? 24 : ((63 -
    (-64)) | 7) < 0x2000000 ? 25 : ((63 - (-64)) | 7) < 0x4000000 ?
    26 : ((63 - (-64)) | 7) < 0x8000000 ? 27 : ((63 - (-64)) | 7) <
    0x10000000 ? 28 : ((63 - (-64)) | 7) < 0x20000000 ? 29 : ((63 -
    (-64)) | 7) < 0x40000000 ? 30 : ((63 - (-64)) | 7) <=
    0x7fffffff ? 31 : 32) + 1) + 8 - 1) / 8)) != 0);
        else
          return 0;
      }
    }
    =====End of test.c======
    

Local fix

  • Use -qfloat=ieee
    

Problem summary

  • ****************************************************************
    * USERS AFFECTED: Users who code a constant expression         *
    *                 containing a divide by zero in a HEX         *
    *                 floating point mode.                         *
    ****************************************************************
    * PROBLEM DESCRIPTION: Using a constant expression which       *
    *                      contains divide by zero in a HEX        *
    *                      floating point mode causes an           *
    *                      internal compiler error. Compiler       *
    *                      does not provide any indication about   *
    *                      the cause of the error.                 *
    ****************************************************************
    * RECOMMENDATION:                                              *
    ****************************************************************
    

Problem conclusion

  • Apply provided service.
    

Temporary fix

Comments

APAR Information

  • APAR number

    PI07445

  • Reported component name

    C/C++ FOR MVS

  • Reported component ID

    56551210A

  • Reported release

    790

  • Status

    CLOSED PER

  • PE

    NoPE

  • HIPER

    NoHIPER

  • Special Attention

    NoSpecatt / Xsystem

  • Submitted date

    2013-12-04

  • Closed date

    2013-12-05

  • Last modified date

    2016-05-06

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

    PM97663

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

Modules/Macros

  •    CCNEP
    

Fix information

  • Fixed component name

    C/C++ FOR MVS

  • Fixed component ID

    56551210A

Applicable component levels

  • R790 PSY UI13286

       UP14/01/14 P F401

Fix is available

  • Select the PTF appropriate for your component level. You will be required to sign in. Distribution on physical media is not available in all countries.

[{"Business Unit":{"code":"BU054","label":"Systems w\/TPS"},"Product":{"code":"SG19M","label":"APARs - z\/OS environment"},"Component":"","ARM Category":[],"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"790","Edition":"","Line of Business":{"code":"","label":""}},{"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSQKCWV","label":"IBM C\/C++ for MVS\/ESA"},"Component":"","ARM Category":[],"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"790","Edition":"","Line of Business":{"code":"LOB35","label":"Mainframe SW"}}]

Document Information

Modified date:
15 August 2024