Chapter 1
ptx/C++ V5.2.2 Release Notes

ptx/C++ V5.2.2 is a DYNIX/ptx® port of the EPC C++ V5.2.2 compiler from Edinburgh Portable Compilers. This product also includes Rogue Wave® Tools.h++® V7 and V8 Class Library and C++ Standard Libraries. ptx/C++ V5.2.2 runs on DYNIX/ptx V4.4.x. Read these release notes before you install or run this release of ptx/C++.


What's New in ptx/C++ V5.2.2

For a detailed list of changes, refer to "Major Changes for Release V5.2" in Chapter 6 of the ptx/C++ User's Guide.


Software Compatibility

This release of ptx/C++ V5.2.2 runs on DYNIX/ptx V4.4.x or later, starting with V4.4.2.


Differences Between EPC C++ V5.2 and ptx/C++ V5.2

The following list describes the differences between EPC C++ V5.2 from Edinburgh Portable Compiler, and ptx/C++ V5.2:


Differences Between ptx/C++ V5.2.x and ptx/C++ V2.1.3

This section contains information about the differences between ptx/C++ V5.2.x and ptx/C++ V2.1.3. Additional information is provided in the section "Migrating to ANSI/ISO C++" in the ptx/C++ User's Guide.


Compatibility Across Versions of ptx/C++ and DYNIX/ptx

The following list describes compatibility information and issues when running different versions of ptx/C++ across different versions of DYNIX/ptx:

  1. ANSI and cfront modes are not compatible.

  2. ANSI mode for ptx/C++ V5.2 is not compatible with ANSI mode for ptx/C++ V5.0.

  3. Compiling object files with one version of ptx/C++ and linking those object files with an earlier version of ptx/C++ is not supported. For example, compiling with ptx/C++ V5.2 and linking with ptx/C++ V5.0 is not supported.

  4. Compiling object files on one version of DYNIX/ptx and linking those object files when running on an earlier version of DYNIX/ptx is not supported. For example, compiling on DYNIX/ptx V4.6 and linking when running on DYNIX/ptx V4.5 is not supported.

  5. Compiling object files on DYNIX/ptx V4.4 for use with ANSI libraries and linking those object files when running on a version of DYNIX/ptx that supports threads (DYNIX/ptx V4.5 and V4.6) is not supported.


Install ptx/C++

To install ptx/C++ V5.2.2 on DYNIX/ptx V4.4, refer to the appropriate version of the DYNIX/ptx and Layered Products Software Installation Release Notes.


ATTENTION

The ptx/C++ shared libraries are in a separately installed product called ptx/C++ Runtime V5.2.2. For this reason, development environments require both ptx/C++ and ptx/C++ Runtime. A license is not required to install ptx/C++ Runtime.

Also, the edb debugger is now installed as part of the DYNIX/ptx operating system. Release note information for edb is included in the applicable versions of the DYNIX/ptx V4.4.x Release Notes, starting with DYNIX/ptx V4.4.8.



Floating Point Precision Affects C++ long long Calculations

The System V Application Binary Interface (ABI), Intel386 Architecture Processor Supplement, states that 64-bit floating point precision is the default state required for conformance to the ANSI C standard and to the IEEE 754 Floating-point standard. Furthermore, many floating-point routines may produce undefined behavior if the precision control is set to less than 53 bits. For these reasons, the c++ compiler in ptx/C++ assumes that floating-point precision is 64 bits.

If an application changes the floating point precision to 53 bits, this can cause C++ long long calculations to get the wrong results, since some of these calculations are done using floating point registers. In this scenario, the application must change the floating point precision back to 64 bits before doing long long arithmetic.


Product Documentation

The following documentation is available on the Software Documentation CD in HTML format:

ptx/C++ User's Guide
edb Reference Manual

ATTENTION

The ptx/C++ User's Guide and edb Reference Manual contain information about thread support, which is only available in DYNIX/ptx V4.5.x and V4.6.x.



Library Documentation

The Rogue Wave class library Tools.h++ is incorporated as an integral part of the ptx/C++ language implementation by permission of Rogue Wave Software Inc. The Tools.h++ Version 8 documentation is included in the /opt/ptxC++/doc directory as two online manuals in HTML format:

Tools.h++ Version 8 is available for use with ANSI compilation. Tools.h++ Version 7 is available for use with cfront compilation. The documentation for Version 7 is available in hard copy format.


ATTENTION

There is no shared library version of RogueWave Tools.h++ Version 8.


The Standard C++ Library is also part of ptx/C++ and is implemented by Rogue Wave Software Inc. Documentation for this library is included in the /opt/ptxC++/doc directory in HTML format:


Fixed Problems in ptx/C++ V5.2.2

The following list contains the problem reports fixed in ptx/C++ V5.2.2. The first number shown in bold font is the SPTS problem report number. The second number shown in brackets is the EPC problem report number.

238153 [2819]
wchar_t values should promote to int, not long.
238240 [2844]
Can't catch throw string with catch (const T), where T is typedef.
238241 [2845]
Can't catch "throw & foo" with "catch (const T)", where T is a typedef to the struct's base class.
238246 [2848]
std::bad_exception is not substituted for a violation of an exception specification.
238248 [2850]
Error throwing a struct whose constructor itself throws an exception.
238322 [2849]
Compiler doesn't flag &*p as an error.
238372 [2865]
Cast of pointer to member of virtual base class not reported as error.
238380, 238384 [2864]
Applying & operator to template instance.
238385 [2867]
Template function with no arguments gets compilation error about the arguments.
238386 [2868]
Template function with no arguments gets error about using const.
238473 [2875]
c++ -O3 exception thrown from switch statement not caught.
238510 [2883]
Exception thrown from constructor for temporary, destructors don't match constructors.
238578 [2897]
Enum operator ++ rejected.
238606 [2908]
Static object within an inline function not unique.
238627 [2917]
Temporary objects not destroyed when exception thrown.
238629 [2919]
Use of placement array new results in undefined externals.
238635 [2921]
Type ids used within constructors and destructors not computed correctly.
238636 [2922]
Overloading of functions that differ only in reference parameters.
238639 [2924]
Overload resolution can fail on unary operations, using built-in operations.
238653 [2930]
Throwing during evaluation of throw expression doesn't terminate program.
238657 [2932]
Overload resolution chooses the wrong constructor.
238660 [2931]
Overloading chooses constructor instead of conversion function.
238662 [2933]
Overload resolution, binding references to non-consts.
238668 [2938]
Non-type parameter name can be omitted from template declarations.
238675 [2941]
Friend function can be a template function.
238681 [2946]
Bogus error: template parameters and function arguments with default values.
238685 [2945]
Test for dependent types rejected with message type name not allowed.
238695 [2950]
Type name can be specified as argument to template instantiation.
238697 [2955]
Error compiling template specialization test.
238698 [2953]
Template specialization test rejected with bad guide decl error.
238702 [2954]
Bad error message: functions not really overloaded in this side case.
238788 [2967]
Wrong overloaded function called.
238989 [2986]
C++ runtime libraries should be shipped free of charge and use versioning.
239072 [2993]
Driver doesn't allow making shared object with version in name.
239142 [3013]
c++ says "error" for warnings.
239842 [3065]
Warning issued as an error.
240356 [3131]
Nullstone test case fails at -O3.
240616 [3156]
c++ compiler warns about correct use of sequent_assert pragmas.
240838 [3186]
RTTI type information call returns incorrect values, sometimes segment faults.
240839 [3187]
dynamic_cast() returns incorrect result, or causes segmentation fault.
240841 [3195]
Destructor not called in temporary objects when exception thrown.
240849 [3190]
Virtual function tables are incorrect for multiple virtual interitance situations.
241055 [3252]
strstreambuf::overflow() can fail to return a value.
241514 [3254]
Undefined symbols for X::operator new[](size_t, int).
241515 [3255]
Throw from constructor via set_terminate() with -O1 aborts in ex_alloc().
241521 [3256]
Wrong virtual function called.
241530 [3257]
Call to virtual function via pointer to base class fails.
241848 [3274]
struct/union/enum tags not recorded in debug information.
241849 [3275]
enum constants not recorded in debug information.
241850 [3276]
Bit fields not recorded in debug information.
241853 [3278]
edb says file-level variables not in scope within function.
243254 [3391]
#pragma define_template isn't documented but gets warning.
243446 [3424]
throw.o in libC.a has global symbols that pollute the namespace.
243452 [3425]
c++ driver is unnecessarily verbose.
244647 [3557]
Compiler fails with "**tliError**: undefined label:..."
245911 [3716]
Compatible solution for changing of RWCRegexp::maxpat_.
246018 [3721]
Pop of FPU stack is optimized away, causing overflow.
248148 [4043]
c++ -03 -KPIC bug assigning and passing short int.
249828 [4276]
C++ programs return intermittent rtld error message "invalid relocation type 3".
250109 [4314]
Debug information has recursive reference for array of function pointers.
250494 [4394]
Some C++ programs compile on DYNIX/ptx V4.4.6 but do not run on DYNIX/ptx V4.5.

Open Problem Reports

The following list contains the open problem reports in ptx/C++ V5.2.2. The first number shown in parentheses is the SPTS problem report number. The second number shown in brackets is the EPC problem report number.

edb Does Not Recognize ABI long doubles (244904) [3581]

The ptx/C++ compiler supports two forms of long double. The default is 8 bytes, the same as double, and matches the long double data type supported by the ptx/C compiler and by libc functions. An alternate form is 12 bytes, as required by the System V ABI for Intel processors, and is specified by the c++ option -abilngdbl. edb cannot tell the difference between the two and supports only the 8-byte form. Printing a long double value will show only 8 bytes, and using the exec command to assign a new value will store only 8 bytes. We do not expect edb to ever support 12-byte long doubles.

Workaround: None.