A fix is available
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:
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