Fixes are available
September 2012 Update for XL C/C++ for Linux, V12.1
April 2013 Update for XL C/C++ for Linux, V12.1
XL C/C++ for Linux Fix Pack 8 (October 2015 Update) for 12.1
December 2012 Update for XL C/C++ for Linux, V12.1
XL C/C++ for Linux Fix Pack 4 (October 2013 Update) for 12.1
XL C/C++ for Linux Fix Pack 5 (December 2013 Update) for 12.1
XL C/C++ for Linux Fix Pack 6 (February 2014 Update) for 12.1
XL C/C++ for Linux Fix Pack 7 (May 2014 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
LI76945
Reported component name
XL C/C++ FOR LI
Reported component ID
5725C7300
Reported release
C10
Status
CLOSED PER
PE
NoPE
HIPER
NoHIPER
Special Attention
NoSpecatt
Submitted date
2012-08-28
Closed date
2012-08-28
Last modified date
2012-08-28
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 LI
Fixed component ID
5725C7300
Applicable component levels
RC10 PSN IV20936
UP06/09/13
[{"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSXVZZ","label":"XL C\/C++ for Linux"},"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"12.1","Line of Business":{"code":"LOB57","label":"Power"}}]
Document Information
Modified date:
16 October 2021