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
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, the compiler issues an incorrect error message. The diagnostic refers to this line: typedef char staticassert_type[sizeof(Type) == 2 ? 2 : 0]; // But this is NOT !! indicating that sizeof(Type) is not 2. The line just above it /// char staticassert_var[sizeof(Type) == 2 ? 2 : 0]; is accepted, when uncommented. If you uncommend line 4, and comment line 5 instead, the program compiles and links. When you run it, the value it returns is 2 (sizeof(Resolver<int>::Type)). ===== COMPILE COMMAND: xlC test.cpp ===== TESTCASE: $ cat test.cpp template <typename T> struct Resolver { typedef struct { char a[2]; } Type; // char staticassert_var[sizeof(Type) == 2 ? 2 : 0]; // This is accepted typedef char staticassert_type[sizeof(Type) == 2 ? 2 : 0]; // But this is NOT !!! }; int main() { return sizeof(Resolver<int>::Type); } $ ===== ACTUAL OUTPUT: $ xlC test.cpp "test.cpp", line 5.54: 1540-0135 (S) The array bound cannot be zero. $ ===== EXPECTED OUTPUT: Clean compile
Local fix
n/a
Problem summary
USERS AFFECTED: The problem can be seen when a sizeof expression is used to compute an array bound inside a template definition. PROBLEM DESCRIPTION: The compiler was incorrectly evaluating a sizeof expression inside a template definition and reporting an error.
Problem conclusion
The compiler has been fixed to resolve the above issue.
Temporary fix
Comments
APAR Information
APAR number
LI77191
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
2013-02-21
Closed date
2013-02-21
Last modified date
2013-02-21
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