Fixes are available
XL C/C++ for AIX Fix Pack 14 (May 2013 PTF) for 11.1
XL C for AIX Fix Pack 14 (May 2013 PTF) for 11.1
XL C/C++ for AIX Fix Pack 15 (August 2013 PTF) for 11.1
XL C for AIX Fix Pack 15 (August 2013 PTF) for 11.1
XL C/C++ for AIX Fix Pack 16 (November 2013 PTF) for 11.1
XL C for AIX Fix Pack 17 (February 2014 PTF) for 11.1
XL C/C++ for AIX Fix Pack 17 (February 2014 PTF) for 11.1
XL C/C++ for AIX Fix Pack 18 (May 2014 PTF) for 11.1
XL C/C++ for AIX Fix Pack 19 (August 2014 PTF) for 11.1
XL C/C++ for AIX Fix Pack 20 (November 2014 PTF) for 11.1
XL C for AIX Fix Pack 21 (April 2015 PTF) for 11.1
XL C/C++ for AIX Fix Pack 21 (April 2015 PTF) for 11.1
XL C/C++ for AIX Fix Pack 22 (September 2015 PTF) for 11.1
XL C for AIX Fix Pack 23 (March 2016 PTF) for 11.1
XL C/C++ for AIX Fix Pack 23 (March 2016 PTF) for 11.1
XL C for AIX Fix Pack 24 (September 2016 PTF) for 11.1
XL C/C++ for AIX Fix Pack 24 (September 2016 PTF) for 11.1
XL C for AIX Fix Pack 16 (November 2013 PTF) for 11.1
XL C for AIX Fix Pack 18 (May 2014 PTF) for 11.1
XL C for AIX Fix Pack 19 (August 2014 PTF) for 11.1
XL C for AIX Fix Pack 20 (November 2014 PTF) for 11.1
XL C for AIX Fix Pack 22 (September 2015 PTF) for 11.1
APAR status
Closed as program error.
Error description
Consider the following testcase: $cat test.cpp /************************************************************/ #define __STDC_WANT_DEC_FP #include <iostream> #include <stdio.h> class Decimal128 { _Decimal128 d_value; public: Decimal128(_Decimal128 x); _Decimal128 value() const; }; Decimal128::Decimal128(_Decimal128 x) { d_value = x; } _Decimal128 Decimal128::value() const { return d_value; } std::ostream &operator<<(std::ostream &o, _Decimal128 d) { char b[48]; snprintf(b, sizeof(b), "%DDe", d); return o << b; } int main() { Decimal128 dec(0.0dl); std::cout << dec.value() << std::endl; } /************************************************************/ Compile the testcase as: xlC -qdfp test.cpp Execute the final executale a.out and observe the output. The executable incorrectly issues the output as "2.101740e-6158" instead of expected (correct) output "0.000000e+00": ./a.out <output> 2.101740e-6158
Local fix
Use no optimization and -qinline, or turn on optimization at compile time
Problem summary
Invalid output when using 128-bit DFP variables.
Problem conclusion
We need to identify a certain opcode as a float point and extended floating point value.
Temporary fix
Comments
APAR Information
APAR number
IV37692
Reported component name
XL C/C++ AIX
Reported component ID
5724X1300
Reported release
B10
Status
CLOSED PER
PE
NoPE
HIPER
NoHIPER
Special Attention
NoSpecatt
Submitted date
2013-03-07
Closed date
2013-04-19
Last modified date
2013-04-23
APAR is sysrouted FROM one or more of the following:
APAR is sysrouted TO one or more of the following:
Fix information
Fixed component name
XL C FOR AIX
Fixed component ID
5724X1200
Applicable component levels
Document Information
Modified date:
03 October 2021