Fixes are available
July 2012 PTF for XL C/C++ for AIX, V11.1
October 2012 PTF for XL C/C++ for AIX, V11.1
October 2012 PTF for XL C for AIX, V11.1
February 2013 PTF for XL C for AIX, V11.1
February 2013 PTF for XL C/C++ for AIX, V11.1
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
July 2012 PTF for XL C for AIX, V11.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
When compiling the test case below at -O, the resulting binary produces incorrect output at runtime. ===== COMPILE COMMAND: xlc -O -q64 -o di6 test.c ===== TESTCASE: $cat test.c #include <stdio.h> static void quorem(unsigned int *ax, unsigned int *bx) { unsigned int *bxe; unsigned long long borrow, carry, ys, y; borrow = 0; carry = 0; bxe = bx + 2; while (bx < bxe) { ys = *bx++ * 2ULL + carry; carry = ys >> 32; y = *ax - (ys & 0xFFFFFFFFU) - borrow; borrow = (y >> 32) & 1; *ax++ = y; } } int main() { unsigned int a[] = { 0x75600000U, 0x146D9833U }; unsigned int b[] = { 0xF0400000U, 0x08E1BC9BU }; quorem(a, b); printf("%08X\n", a[1]); /* should print 02AA1EFB */ return 0; } $ ===== ACTUAL OUTPUT: $xlc -O -q64 -o di6 test.c && ./di6 02AA1EFC $ ===== EXPECTED OUTPUT: $xlc -O -q64 -o di6 test.c && ./di6 02AA1EFB $
Local fix
n/a
Problem summary
USERS AFFECTED: Users that compile with optimization in 64-bit mode and that have the problem pattern may by affected by this issue. PROBLEM DESCRIPTION: The issue is that the compiler incorrectly removes the truncation to 32-bit before 64-bit rotate.
Problem conclusion
This issue has been fixed.
Temporary fix
Comments
APAR Information
APAR number
IV20936
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
2012-05-11
Closed date
2012-07-05
Last modified date
2012-07-05
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:
05 July 2012