Fixes are available
March 2013 PTF for XL C/C++ for AIX, V12.1
XL C/C++ for AIX Fix Pack 4 (June 2013 PTF) for 12.1
XL C/C++ for AIX Fix Pack 5 (September 2013 PTF) for 12.1
XL C/C++ for AIX Fix Pack 7 (January 2014 PTF) for 12.1
XL C/C++ for AIX Fix Pack 8 (March 2014 PTF) for 12.1
XL C/C++ for AIX Fix Pack 11 (February 2015 PTF) for 12.1
XL C/C++ for AIX Fix Pack 12 (May 2015 PTF) for 12.1
XL C/C++ for AIX Fix Pack 13 (August 2015 Update) for 12.1
XL C/C++ for AIX Fix Pack 14 (December 2015 Update) for 12.1
XL C/C++ for AIX Fix Pack 15 (April 2016 Update) for 12.1
XL C/C++ for AIX Fix Pack 16 (July 2016 Update) for 12.1
XL C/C++ for AIX Fix Pack 17 (November 2016 Update) for 12.1
XL C/C++ for AIX Fix Pack 18 (February 2017 Update) for 12.1
XL C/C++ for AIX Fix Pack 19 (August 2017 Update) for 12.1
XL C/C++ for AIX Fix Pack 20 (March 2018 Update) for 12.1
XL C/C++ for AIX Fix Pack 6 (December 2013 PTF) for 12.1
XL C/C++ for AIX Fix Pack 9 (July 2014 PTF) for 12.1
XL C/C++ for AIX Fix Pack 10 (October 2014 PTF) for 12.1
XL C/C++ for AIX Fix Pack 21 (January 2019 Update) for 12.1
APAR status
Closed as program error.
Error description
Compiling with -O2 and inlining enabled, with a ?: conditional as a template function parameter, is causing valid code to be optimized away, resulting in invalid code behaviour. In the example below, invalid stack data is accessed, and output is incorrect: ==== TEST CASE ==== #include <iostream> struct MyStruct { template <typename T> static void print( T const & x ) { std::cout << x; } }; int main(int argc, char *argv[]) { MyStruct::print(argc == 1?"test1":"test2"); } $ xlC -q64 -O2 apar.cpp $ ./a.out | od -c 0000000 ᄃ レ 017 ナ ■ ￐ \r ᄃ レ 017 ナ ■ ￐ \r 0000020 $ $ ./a.out | od -x 0000000 badc 0ffe e0dd f00d badc 0ffe e0dd f00d 0000020 $
Local fix
- Disable inlining - Convert ?: conditional into an IF statement
Problem summary
PROBLEM DESCRIPTION: Processing of the ?: ternary operator is ignoring the memory location of the result, leading to incorrect code and behaviour. USERS AFFECTED: Users of the ?: ternary operator, the << operator, and optimization.
Problem conclusion
The issue has been corrected.
Temporary fix
Comments
APAR Information
APAR number
IV37949
Reported component name
XL C/C++ FOR AI
Reported component ID
5725C7200
Reported release
C10
Status
CLOSED PER
PE
NoPE
HIPER
NoHIPER
Special Attention
NoSpecatt
Submitted date
2013-03-12
Closed date
2013-03-12
Last modified date
2013-03-13
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/C++ FOR AI
Fixed component ID
5725C7200
Applicable component levels
Document Information
Modified date:
03 October 2021