Patch Name: PHSS_18020 Patch Description: s700_800 10.X HP C++ (CC A.10.45) to fix numerous defects Creation Date: 99/04/26 Post Date: 99/05/17 Hardware Platforms - OS Releases: s700: 10.01 10.10 10.20 s800: 10.01 10.10 10.20 Products: HP CPLUSPLUS A.10.40 HP CPLUSPLUS A.10.44 Filesets: C-Plus-Plus.HPCXX C-Plus-Plus.HPCXX-MAN Automatic Reboot?: No Status: General Release Critical: No Path Name: /hp-ux_patches/s700_800/10.X/PHSS_18020 Symptoms: PHSS_18020: 1. OGL calls fail if indirect or virtual call in parm list 2. Bad boolean evaluation for && 3. Error 4200 get_ucode_datatype: unexpected base: 141 PHSS_16606: 1. Compiler fails with an internal error: Backend Assert (5172) when a pointer to an array is new'd through its typedef. 2. The definition of class template static members in the template definition file causes duplicate symbols. 3. Program compiled with +eh gets error 1029: variable declared as both static and extern. 4. When compiling some static inline calls Compiler gets error 4201: internal error: (function: set_graphic(void)) Unimplemented node in routine ucode_store_expression (base null) 5. Error 4200 unexpected left operand for '->' 6. Error 1042 deleting a reference to a const pointer function. 7. Error 4201 Unimplemented node in routine ucode_store_expression 8. A program that contains ?: with pointer to member function in second/third operand fails with a memory fault. 9. Incorrect initialization of array with const static data member. 10. File scope const long long is truncated to 32 bits 11. Signal 11 when compiling cfront Defect Description: PHSS_18020: 1. Various aborts or other errors will occur if using indirect or virtual function calls in the parameter list of an OGL call. Resolution: A change was made for OGL indirect calls. Unfortunately if there are indirect calls in the parm list, the wrong function gets marked. 2. Boolean expressions (&& & ||) are incorrectly evaluated when the left operand of a boolean expression results in an inline function which resolves into another boolean expression. Resolution: Caused due to an incomplete fix to a prior DTS; CLLbs14037. The counter in_expr_with_andor to keep track of the andor expression nesting was not being decremented in certain cases. This caused incorrect generation of temporaries that keep track of object construction, hence the problem. 3. Complex expressions involving overloaded && & || operators can cause the compiler to fail. Resolution: A global variable in_expr_with_andor introduced for the fixing DTS CLLbs14037 goes out of balance when some of the boolean operators are overloaded. This imbalance causes incorrect ucode to be generated, hence the failure. PHSS_16606: 1. A compiler failure may occur if pointer to an array is newd through its typedef. Resolution: The type of the temporary that is created to hold the return from vec_new was not correct, and hence the failure. This temporary is created only when the +eh switch is turned on. The fix is to traverse the typedef nodes until the real type is obtained. 2. Duplicate static definitions are being output during automatic template instantiation, thus causing link failures 3. The inconsistent declaration of an eh variable was caused because distinct class definitions are generated for the same template 4. Static inline call nodes are incorrectly processed when compiling with +eh. 5. The following internal error may occur when using an inline function with ?: : CC: internal error: (function: foo()) (code generation) uinit_REF: unexpected left operand for '->' (4200) 6. Deleting a function that returns a const reference to a pointer to a class that has a virtual destructor may get the following error: CC: error: uninitialized const __K0006 (1042) class foo { public: virtual ~foo(); }; foo::~foo() {} typedef foo *p; const p& dick(); void bar() { delete dick(); // error 1042 here } 7. Compiling a constructor with a default value gets error 4201: Unimplemented node in routine ucode_store_expression. 8. A program that contains ?: with pointer to member function in second/third operand fails with a memory fault. 9. Incorrect initialization of array with const static data member. 10. Const long long variables are not folded correctly, causing incorrect run time behavior. 11. Compiling a program with templates may get signal 11. SR: 1653279117 1653274829 1653274159 1653264291 5003427997 5003313841 5003417246 1653234757 5003422238 1653266452 4701414813 Patch Files: /opt/CC/bin/CC /opt/CC/lbin/cfront /opt/CC/contrib/Tools/get_dups /opt/CC/contrib/Tools/show_remaining_imports /opt/CC/lib/eh/libC.ansi.a /opt/CC/lib/eh/libC.a /opt/CC/share/man/man1.Z/CC.1 what(1) Output: /opt/CC/bin/CC: HP C++ HPCPLUSPLUS A.10.45 (990416) /opt/CC/lbin/cfront: HP C++ HPCPLUSPLUS A.10.45 (990416) HP-UX SLLIC/OPTIMIZER UX.10.20.563 (DAVIS): 01/28/99 Ucode Code Generator - UX10.20.67 (PACG_UX10) High Level Optimizer - UX.10.21.980511 (UX10.MULTI) [-DHLO_RELEASE +O3] - 22-Feb-99.20:10 /opt/CC/contrib/Tools/get_dups: None /opt/CC/contrib/Tools/show_remaining_imports: None /opt/CC/lib/eh/libC.ansi.a: HP C++ HPCPLUSPLUS A.10.45 (990416) /opt/CC/lib/eh/libC.a: HP C++ HPCPLUSPLUS A.10.45 (990416) /opt/CC/share/man/man1.Z/CC.1: None cksum(1) Output: 74652829 98304 /opt/CC/bin/CC 4051370758 8474624 /opt/CC/lbin/cfront 181844194 4119 /opt/CC/contrib/Tools/get_dups 795641462 11872 /opt/CC/contrib/Tools/show_remaining_imports 1808586111 271288 /opt/CC/lib/eh/libC.ansi.a 1968721140 271212 /opt/CC/lib/eh/libC.a 3615230947 19090 /opt/CC/share/man/man1.Z/CC.1 Patch Conflicts: None Patch Dependencies: s700: 10.01: PHSS_18298 PHSS_17544 PHSS_17545 PHSS_15389 s700: 10.10: PHSS_18298 PHSS_17544 PHSS_17545 PHSS_15389 s700: 10.20: PHSS_18298 PHSS_17544 PHSS_17545 s800: 10.01: PHSS_18298 PHSS_17544 PHSS_17545 PHSS_15389 s800: 10.10: PHSS_18298 PHSS_17544 PHSS_17545 PHSS_15389 s800: 10.20: PHSS_18298 PHSS_17544 PHSS_17545 Hardware Dependencies: None Other Dependencies: None Supersedes: PHSS_16606 Equivalent Patches: None Patch Package Size: 9000 KBytes Installation Instructions: Please review all instructions and the Hewlett-Packard SupportLine User Guide or your Hewlett-Packard support terms and conditions for precautions, scope of license, restrictions, and, limitation of liability and warranties, before installing this patch. ------------------------------------------------------------ 1. Back up your system before installing a patch. 2. Login as root. 3. Copy the patch to the /tmp directory. 4. Move to the /tmp directory and unshar the patch: cd /tmp sh PHSS_18020 5a. For a standalone system, run swinstall to install the patch: swinstall -x autoreboot=true -x match_target=true \ -s /tmp/PHSS_18020.depot 5b. For a homogeneous NFS Diskless cluster run swcluster on the server to install the patch on the server and the clients: swcluster -i -b This will invoke swcluster in the interactive mode and force all clients to be shut down. WARNING: All cluster clients must be shut down prior to the patch installation. Installing the patch while the clients are booted is unsupported and can lead to serious problems. The swcluster command will invoke an swinstall session in which you must specify: alternate root path - default is /export/shared_root/OS_700 source depot path - /tmp/PHSS_18020.depot To complete the installation, select the patch by choosing "Actions -> Match What Target Has" and then "Actions -> Install" from the Menubar. 5c. For a heterogeneous NFS Diskless cluster: - run swinstall on the server as in step 5a to install the patch on the cluster server. - run swcluster on the server as in step 5b to install the patch on the cluster clients. By default swinstall will archive the original software in /var/adm/sw/patch/PHSS_18020. If you do not wish to retain a copy of the original software, you can create an empty file named /var/adm/sw/patch/PATCH_NOSAVE. Warning: If this file exists when a patch is installed, the patch cannot be deinstalled. Please be careful when using this feature. It is recommended that you move the PHSS_18020.text file to /var/adm/sw/patch for future reference. To put this patch on a magnetic tape and install from the tape drive, use the command: dd if=/tmp/PHSS_18020.depot of=/dev/rmt/0m bs=2k Special Installation Instructions: None