Fixes are available
XL C/C++ for Blue Gene/Q Fix Pack 12 (May 2015 Update) for 12.1
XL C/C++ for Blue Gene/Q Fix Pack 14 (May 2016 Update) for 12.1
XL C/C++ for Blue Gene/Q Fix Pack 15 (October 2017 Update) for 12.1
November 2012 Update for XL C/C++ for Blue Gene/Q, V12.1
February 2013 Update for XL C/C++ for Blue Gene/Q, V12.1
May 2013 Update for XL C/C++ for Blue Gene/Q, V12.1
XL C/C++ for Blue Gene/Q Fix Pack 5 (August 2013 Update) for 12.1
XL C/C++ for Blue Gene/Q Fix Pack 6 (November 2013 Update) for 12.1
XL C/C++ for Blue Gene/Q Fix Pack 7 (February 2014 Update) for 12.1
XL C/C++ for Blue Gene/Q Fix Pack 8 (May 2014 Update) for 12.1
XL C/C++ for Blue Gene/Q Fix Pack 9 (August 2014 Update) for 12.1
XL C/C++ for Blue Gene/Q Fix Pack 10 (November 2014 Update) for 12.1
XL C/C++ for Blue Gene/Q Fix Pack 11 (February 2015 Update) for 12.1
XL C/C++ for Blue Gene/Q Fix Pack 13 (August 2015 Update) for 12.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
LI77093
Reported component name
XL C/C++ FOR BG
Reported component ID
5799AG100
Reported release
C10
Status
CLOSED PER
PE
NoPE
HIPER
NoHIPER
Special Attention
NoSpecatt / Xsystem
Submitted date
2012-11-23
Closed date
2012-11-23
Last modified date
2012-11-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/C++ FOR BG
Fixed component ID
5799AG100
Applicable component levels
Document Information
Modified date:
05 September 2024