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
The compiler generates an incorrect virtual template error message for the test case mentioned below: $cat test.cpp namespace sc{ template <class T> class Ref {}; } namespace sc { struct DistArray4Dimensions { public: static const DistArray4Dimensions& default_dim() { return default_dim_; } private: static DistArray4Dimensions default_dim_; }; class DistArray4 { public: virtual Ref<DistArray4> clone(const DistArray4Dimensions& dim = DistArray4Dimensions::default_dim()) =0; }; } namespace sc { class DistArray4_MPIIOFile: public DistArray4 { protected: template <typename Derived> Ref<DistArray4> clone(const DistArray4Dimensions& dim = DistArray4Dimensions::default_dim()); }; } $ ===== ACTUAL OUTPUT: $bgxlC -qarch=450d -qtune=450 -c test.cpp "test.cpp", line 34.49: 1540-1158 (S) The function template "sc::DistArray4_MPIIOFile::clone" must not be declared as virtual. $ ===== EXPECTED OUTPUT: Should compile clean.
Local fix
n/a
Problem summary
USERS AFFECTED: Users with member function templates which have the same name and parameter list as a base class virtual function are affected by this issue. PROBLEM DESCRIPTION: A template function which otherwise has the same name and parameter list as a base class virtual function may be incorrectly rejected with a message indicating that the template function may not be declared virtual. struct A { virtual void foo(); }; struct B : A { template <typename T> void foo(); // error message produced for this line }; The function is actually not declared virtual; however, it was mistakenly considered to override the base class virtual function. Specializations of member template functions should never be considered to override members of a base class.
Problem conclusion
A check was implemented to recognize that member function templates never override virtual functions.
Temporary fix
Comments
APAR Information
APAR number
LI77073
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