Kuck & Associates, Inc. KAI C++ Compiler (KCC) Version 3.4f -- November 3, 1999 System requirements for Linux version: OS: Linux (RedHat 6.0 or 6.1 or equivalent) Software: egcs-1.1.2, glibc-2.1, binutils, /bin/sh, /bin/csh Disk: 15 Mb installed General Description: KAI C++ is an optimizing compiler for production C++ applications. It focuses on optimizations that allow you to use object-oriented design throughout your application. You get both the performance of C and the productivity of objects. See http://www.kai.com/C_plus_plus/index.html for a more complete product description. Compilation process: The top level KAI C++ driver, KCC, is intended to be used as a compiler. Under the top level driver there are three distinct compilation phases. First, the front- end parses the source file, performs high-level optimiza- tions, and generates an intermediate file in standard C. Next, a C compiler reads in the intermediate C file and generates an object file. Last of all, a link process combines the object modules and libraries, and takes care of template instantiation and static object initialization. Compatibility: KAI C++ is not link-compatible with objects compiled by other C++ compilers. Attempting to link code compiled by KAI C++ and another C++ compiler will probably result in link-time failures or run-time faults. This means that you must compile all of your C++ code and C++ libraries with KAI C++. KAI C++ 3.4 includes a very close to standard C++ library, including I/O and STL. The C++ standard differs from existing practice in some ways. We strongly recommend reading the migra- tion document http://www.kai.com/C_plus_plus/migrate/index.html for a summary of differences that affect existing codes. The KAI C++ Debugger (kdb) is also available for download from KAI as a separate package. See our web page http://www.kai.com for the latest news on this and other Kuck & Associates products. Changes in version 3.4f: - Fix for bug ID [98I13]. Fix to layout::quick_copy used by string. Was previously copying all but null terminating character. - Fix for bug ID [97I30]. In Linux math.h, no longer define macro CONST. - Fix for bug ID [97I15]. Optimization problem relating to unsigned array index. - Fix for bug ID [94H26],[97H24]. Typo in macro guard for . - Fix for bug ID [97H11]. Problem in intializing structure containing bitfield of length 0. - Fix for bug ID [96H25]. Problem related to exception caught in the wrong catch clause. - Fix for bug ID [94I28]. C code generation bug at >= +K1. - Fix for bug ID [94I22]. C code generation bug relating to for-inits with multiple initializations. - Fix for bug ID [93I29]. Bad code generated in certain circumstances where a multilevel pointer is thrown. - Fix for bug ID [93I14]. Optimization related problem affecting comparisons with NaN. - Fix for bug ID [93I09]. Optimization related problem affecting comparisons with NaN. - Fix for bug ID [92I23]. Assertion failure at kfront/waveguide/ExprReconstructor.C, line 2632. - Fix for bug ID [92G20]. Eliminate conflict between -E and --output_dependencies. - Fix for bug ID [91H15]. Optimization problem relating to -- and ++ operators on bitfields. - Fix for bug ID [911H18]. Asm-related problem on Sparc/Solaris. - Fix for bug ID [93J19]. now uses operator == instead of operator != in places where T need only be EqualityComparable. - Fix for bug ID [98J22]. C code compiled with --c -c and +K1 or higher caused kfront component to fail with a segmentation fault. - Fix for bug ID [93J25]. Undeclared identifiers reported in intermediate C code. - Fix for bug ID [94I20]. Value of temporary used in if test incorrect at > +K0. - Fix for bug ID [92J21]. Optimization problem where, after optimization, an outer test-at-bottom loop contains an inner loop with multiple exits, and neither exit is representable as a test-at-top or test-at-bottom. The result was an infinite loop. - Fix for bug ID [93J18]. Assertion failure in kfront/waveguide/LifetimeAdjustor.C, line 139 of kfront component. - Fix for bug ID [91I17]. Typo at line 199 of . _len!=new_len should be v._len!=new_len . Changes in version 3.4d: - Fix for bug IDs [91G25],[92G30]. Kfront component terminated with signal 11 at optimization levels >= K1 on certain input source. - [97H03] libKCC*.so for Sparc/Solaris now contains position independent code. - Fix for bug IDs [94G28],[91G14]. Unresolved symbols reported for kfront component on TRU64 Unix 4.0f. KCC 3.4d was tested on TRU64 Unix 4.0f in addition to TRU64 Unix 4.0d. - Fix for bug ID [910H06]. Undefined symbols reported in intermediate C code generated at +K0 and higher. - Fix for bug ID [97G19]. Duplicate symbols in intermediate C code. - Fix for bug ID [91H02]. Assertion failure in kfront with input file containing only the single line `1e380'. Problem occurred on SGI/IRix only. - Fix for bug ID [92G21]. Undefined symbols reported in intermediate C code with --inline_auto_space_time=1000. - Fix for bug ID [91H09]. Compiled code terminated improperly after throw. - Fix for bug ID [91H10]. Removed erroneous using declaration for std::iter_swap from algobase.h. - Fix for bug ID [96H10]. Kfront component terminated with bus error at +K1 and higher for certain input code involving exceptions. Changes in version 3.4c: - Fix for bug ID [94G15]. Error falsely reported when defining function template which was a member of a class template outside of the class. Function template had paramter of type pointer to member. - Fix for bug IDs [94G19], [910F30]. Front-end run-time failure at +K1, but not at +K0. - Fixes for bug ID [95G06]. Front-end run-time failure at +K1, but not at +K0. Front-end run-time failure at +K3, but not at +K1. Internal error: dump_expr at +K1 (related to unprototyped parameter lists when default promotions are required). Assertion failure at kfront/waveguide/BasicDeconstructor.C, line 542 at +K3. - Fix for alignment problem in collate::do_hash. - Fix for #line problem in preprocessed output. - Fix for bug ID [93G08]. Problem with operator<<(long long) on Sparc/Solaris. Changes in version 3.4b: - Fix for bug ID [92F16]; this involved a problem with static initialization in --thread_safe mode. - Fix for bug ID [95F08]; problem was an assertion failure in copy_default_arg_expr (il.c, line 7592). - Fix for bug ID [99F15] dynamic_cast problem, where dynamic_cast returned null pointer when it should not have. - Fix for bug ID [96F22]; typo in guard against multiple inclusion of . - Fix for bug ID [910F22]; std::set::find now returns iterator rather than const_iterator. - Fix for bug ID [93F15]; problem was an assertion failure in define_scope_class_typeinfo_vars (kfront/edg-orig/lower_eh.c, line 1040). - Fix for bug ID [91F26]; problem was an assertion failure at front/waveguide/portable-EH.C, line 1315. Changes in Version 3.4a: - The front-end and libraries included with KAI C++ 3.4 are more standard conformant than those shipped with KAI C++ 3.3. - See http://www.kai.com/C_plus_plus/v3.4/doc/migrate/index.html#old-KCC for information on migrating codes from KCC 3.3 to KCC 3.4. - This release uses the Flex License Manager from Globetrotter exclusively on Digital Unix, IBM AIX, SGI IRIX, Sun Sparc/Solaris, and HP-UX. KAI C++ for Linux is also available under FlexLM licensing, but continues to be available under a Personal Use License (which uses the KCC_LICENSE environment variable). KAI C++ for other platforms continues to use the same license manager as in KAI C++ 3.3. - Because it is a major release and due to changes in license managers, KAI C++ 3.4 will require new license codekeys on all platforms. KAI C++ 3.3 license codekeys will not allow you to operate KAI C++ 3.4. To purchase KAI C++ 3.4 license codekeys or receive KAI C++ 3.4 license codekeys under an active support contract, contact KAI at c++support@kai.com. Be sure to include any previous license codekey(s) along with the name of the person to whom the codekey was issued and/or the name of the company to which the codekey was issued. Changes in Version 3.3g: - KCC on Intel/Linux now uses __sigsetjmp instead of __setjmp from the C library as part of its exception handling mechanism. __setjmp is no longer provided in the most recent GNU C library. If using an older version of glibc which provides both __sigsetjmp and __setjmp, code compiled with previous KCC 3.3 releases should continue to work. If using a newer version of glibc which no longer defines __setjmp, you will either need to recompile code compiled with previous versions of KCC 3.3, or you can link in KCC_BASE/lib/__setjmp.o which provides a definition of __setjmp which simply calls __sigsetjmp; contact KAI for further details. Changes in Version 3.3f: - Work-around for gcc not handling #line in certain legitimate situations [85J19]. - Change relating to string::npos to regain compatibility with prior 3.3 releases [86J19]. - Fix for problem regarding signedness of plain chars when --[un]signed_chars used [87J07]. Changes in Version 3.3e: - Fix for overload resolution problem involving partial specializations [811H07]. - Fix for array initialization problem [88H20], [810H20], [811H20]. - Fix for [82G16]. - Fix for problem with argument to --link_command_prefix. The user's path is now searched for the specified command. - Fix for [86H27]. - Added default argument for second template parameter in ostream_iterator and istream_iterator. - Fix for [82G07]. - Fix for optimization problem reported in [811I10] and [82I14]. - Fix for layout problem on Linux. - Miscellaneous other bug fixes. - 3.3d changes (except for thread-safe libraries) (since no version 3.3d was released for Linux). Changes in Version 3.3d: - Beta release thread-safe libraries for use with this release can be downloaded separately from the KAI C++ web site. Be sure to browse through the new tutorial on multi-threaded C++ (included in the KAI C++ User Guide). - Changes to include files for support of thread-safety. - Reduction in size of libKCC.a due to file reorganization. - Small number of minor bug fixes. Changes in Version 3.3c: - Fixed inlining problem which could lead to code bloat. - Fixed problems with compiling two tests in the Blitz++ testsuite. - Fixed problem with compiling example code in guiding declarations section of User Guide. - Fixed problem with parameters of the form "typename ABC::template DEF" in class template member functions. - Fixed problem with virtual inline function in a base class [G19S]. - Fixed problem with basic_stringbuf<>::str(). - Fixed problem which lead to "internal error: lower_type: bad kind". - Fixed problem which occured at higher optimization level(s) and generated assertion failure at "kfront/def-use/NBitLatticeBase.C, line 62". - Fixed problem in which required that certain operators be defined for qc in order to declare a queue. Fixed similar problem in certain other container classes. Changes in Version 3.3b: - Fix for vector::erase() when erasing empty vector. Similar fix for a few other containers. - Link-compatibility error no longer issued when mixing .o's compiled in C mode with those compiled in C++ mode with exception handling. - Fix to prelinker so it doesn't loop when presented with a non-existent library name. - ti_files directory only created when needed. Changes in Version 3.3a: - This version was built and tested under RedHat Linux release 5.0. It's executables require libm.so.6 and libc.so.6 (glibc) in order to run properly. - Object files and libraries produced by KCC version 3.3 are not link-compatible with those produced by KCC 3.2 or earlier. Every component of an application must be recompiled. - Exceptions are now enabled by default. - Implicit inclusion is now turned off by default. - Keyword template is now required when referring to member template typenames. - Function getline in no longer counts characters. - Template class valarray no longer has implicit conversions to T* and const T*. - The option --split (used on 3.2 when building archive libraries) is replaced by the option --one_instantiation_per_object used to build .o files. - Adding or replacing files in an archive library is now deimplemented. ``KCC -o libX.a x1.o'' now removes libX.a and builds a new one containing only x1.o. - KCC 3.3's runtime library is now supplied as both a shared object library and as a traditional archive library. Most linkers default to choosing the shared object version, which can require extra care so that it travels with the application when it is shipped to another host. - Please see the KAI C++ User Guide for additional information on these changes. Customer Support ---------------- Phone: 1-217-356-2288 Fax: 1-217-356-5199 e-mail: c++support@kai.com mail: Kuck & Associates, Inc. 1906 Fox Drive Champaign, IL, 61820