Patch Name: PHSS_17507 Patch Description: s700_800 10.X ANSI C compiler cumulative patch Creation Date: 99/02/02 Post Date: 99/03/02 Hardware Platforms - OS Releases: s700: 10.01 10.10 10.20 s800: 10.01 10.10 10.20 Products: C-ANSI-C B.10.03 B.10.03.10 C-Dev-Tools B.10.01 B.10.03.10 Auxiliary-Opt B.10.01 B.10.03.10 Filesets: C-ANSI-C.C,B.10.03,B.10.03.10 C-Dev-Tools.C-AUX,B.10.03,B.10.03.10 Auxiliary-Opt.LANG-AUX,B.10.01,B.10.03.10 Auxiliary-Opt.LANG-SMP,B.10.01,B.10.03.10 Automatic Reboot?: No Status: General Superseded Critical: No Path Name: /hp-ux_patches/s700_800/10.X/PHSS_17507 Symptoms: PHSS_17507: Performance improvements and bug fixes. PHSS_15444: Optimizer fix: +u optimizer problem. Cpp fix:k&r First #line directive WITH directory not replaced by next one. PHSS_14326: Optimizer fix:Program core dumps when compiled with only the options +O2 -z PHSS_13421: Optimizer fix:Memory leak problem and an abort at +O2 or higher in compiler optimizer Incorrect run time result when compiled "cc +u1 +O1/02" No lowlevel warning message when return not seen in conditional statements. PHSS_12676: Several Optimization bug fixes. Optimizer fix:Incorrect results for programs with while when compiled at +O3 or higher. High Level optimizer fix:Erroneously deleting store of constant into temporary variable. Compiler fails with the error number 6859 for optimized compiles. Wrong branch of if statementt taken in optimized code (+O2) Incorrect debug info at +O2 -g. PHSS_11518: Runtime optimizer fix. PHSS_10897: Compile time performace fix. PHSS_10261: Optimizer bug fixes: - Core dump when compiling with +I. - At +O2 or greater, looping code could produce incorrect results. - Other fixes with +Ooptions. - c89 was not delivered as part of C compiler patch. PHSS_9927: Optimizer bug fixes: - Optimizer problem when unsigned comparison instructions are generated for range checking. - Bad code for loop unrolle. - Long compile time for many loops with +Olimit. PHSS_9765: Optimizer bug fixes: - Incorrect results for programs with nested loops and compiled with +O2 or higher. - Run time memory fault when programs built with +DA2.0 +Odataprefetch at +O2 or higher. PHSS_9447: Several Optimization bug fixes. - DOC, +O2, PBO and loop optimization problems. PHSS_9138: Several bug fixes including: - Profile Based Optimization(PBO) bug fixes related to correctness problems - loop unrolling bug fix. PHSS_8870: Performance improvements and bug fixes. PHSS_8385: Performance improvements and several bug fixes. PHSS_7311: Problem with pragma HP_ALIGN NOPADDING with arrays Bad code for bit fields in static struct, address % 4 is 2 Problem with #pragma HP_ALIGN +O1 build of module gets into infinite loop in value numbering PHSS_6369: cpp.ansi out of dynamic memory PHSS_5743: SPEC95 performance enhancement. Defect Description: PHSS_17507: 1) cpp incorrectly removes spaces from string literals when using #. 2) Error 6987 when using incompatible arguments -g and +I/+P. 3) Incorrect initialization of long integer types with an address. 4) +m doesn't print out types for unsigned long long fields. 5) Incorrect initialization of an automatic array of char pointers, without using braces {}. 6) Debug information is incorrect for some pointer types. 7) lint: erroneous warning 830 on conditional operator. 8) Quietly accepted arrays with a size larger than the architecture limits. 9) Optimizer problem when using ~ and ?: . 10) No error in cpp if TMPDIR is full. 11) lint: Incorrect "comparison of unsigned with negative constant" warning. 12) lint: Incorrect "defined but not used" warning. 13) Can't declare multiple pointers to functions with same typedef. 14) Mixing ANSI prototypes with K&R definitions gives an error. 15) Error using K&R function declaration with short. 16) Incorrect result for static initialization done through conditional expr. 17) Abort with error 6851 when compiled at +O1. 18) Incorrect code generated at +O2 or higher for 64-bit multiplies. 19) Complier hangs when source containing erroneous loop is compiled at +O1. 20) Compiler produced bad code at +O2 or above to evaluate "a = b || c || d;". 21) Incorrect result when compiled at +O2 +DA2.0 for loop. 22) Compiler core dumps with +Odataprefetch on. 23) Incorrect assembly code is generated with +ESplabel +DA1.1. 24) 64-bit integer division produces different results at +O2 or above. 25) Right shift (>>) produces incorrect results for PA2.0 at +O2 or above. 26) Incorrect code generated at +O2 for passing parameters. 27) Incorrect code generated for a call site at +O2 or above if all following four conditions are met: - The function being called used _HP_PLT_CALL pragma, - Caller is compiled with PIC (+Z or +z), - Caller uses alloca(), - The program is PA32 (i.e. compiled without +DA2.0W). 28) Compiler incorrectly move an instruction that modifies r19 across ADDIL or LDW instruction that uses r19 for OGL code sequence. 29) Compiler goes into infinite loop for certain GOTO statements that jump to the middle of loop when compiled at +O2 or above. 30) Program with excessive unreached code generates incorrect results when compiled at +O2 or above. 31) Program with repeated references to specific array elements produced incorrect results when compiled at +O2 or above. 32) Incorrect code generated for certain loop with BREAK statements in it when compiled at +O2 or above. 33) The compiler is creating a common symbol that collects all plabels in the source. Separate symbols, one for each Comdat is needed. 34) Enabled ordered comparsions(>,<,>=,<=) for function pointers. 35) Generating bad code for "register unsigned long long" variable. PHSS_15444: 1) Optimizer fix: +u optimizer problem. 2) Cpp fix:k&r First #line directive WITH directory not replaced by next one. PHSS_14326: 1) Program core dumps when compiled with only the options +O2 -z PHSS_13421: 1) Memory leak problem in compiler optimizer 2) compiled at +O2 or above, compiler aborts with internal panic 6904 3) cc +u1 +O1/02 possible optimizer problem 4) No low-level warning when a return is missing in conditional path. 5) ccom aborts after "error 1532: Reference through a non-pointer." PHSS_12676: 1) Incorrect results for programs with while when compiled at +O3 or higher. 2) Erroneously deleting store of constant into temporary variable. 3) Compiler fails with the error number 6859. 4) Wrong branch of if statementt taken in optimized code (+O2) 5) Incorrect code generation at +O2 and above for programs that make procedure calls with floating point arguments. 6) Incorrect debug info at +O2 -g. 7) incorrect results in procedures which have long calls. (long calls enable reaching from one place to another place in an extremely large file) 8) incorrect result when compiled at O2 9) incorrect PIC code generation for literals in code space. 10) wrong results when compiled with +O2 or igher for program passing floating point value to the library arguments. 11) Incorrect results for programs with while statements when compiled at +O3 or higher. 12) debug info is wrong for locals in nested procedures 13) compile time failures with bad fixup when compiled with +O4 14) Error 5172 on 6 byte aligned copy with +DA2.0 +O2 15) Error 6933 +DA2.0 -O on long double = unsigned long long PHSS_11518: 1) +ESlit doesn't put const pointers into $LIT$ subspace 2) Out of memory message (even if +Onolimit is not used) 3) At +O2 or higher, the backend optimizer may perform illegal optimization. 4) Files compiled at +O0 or +O1 (or files compiled with +Olimit which drop to +O1 due to resource constraints) may cause the compiler to abort with error 6859, particularly if they include a mixture of single- and double- precision floating point operations. 5) Compiler aborts at +O1 or above 6) The optimization takes too much time 7) Can't use +I (PBO) with multiple unnamed common block subprogram 8) +Olibcalls breaks a routine from SDRC Ideas. PHSS_10897: 1) C compiler for 10.20 much slower than previously PHSS_10261: 1) Core dump when compiling with +I 2) Error 6933: when compiling at +O2 or higher and not using +Onolimit 3) Casting a constant machine primitive (e.g. word, halfword) to a structure may result in incorrect copying at optimization levels +O1 or higher. 4) At +O2 or greater, looping code could produce incorrect results. 5) With +Odataprefetch & +O2 or higher, the optimizer could engender a floating point divide by 0. 6) When compiling a regular c file which calls a function with a large number of arguments (> 2000) the compiler fails. 7) Bad code when optimizing if address of static pointer taken 8) Patch installation scripts don't hard link c89 to cc PHSS_9927: 1) Problem with optimizer at level 2.when unsigned comparion instructions are generated for range checking. If the last value added to the minimum list is equal to the upper bound of the current item, this range checking can't be performed. 2) When while loops were being unrolled sometimes the trip counts would be negative. 3) Program's with many loops can take a long time to compile, even under +Olimit. PHSS_9765: 1) A runtime memory fault could occur for programs built with +DA2.0 +Odataprefetch at +O2 or higher. 2) Incorrect results could be produced for programs built with +O2 or higher, if they contain nested loops. 3) Assertion propagation was deleting a needed test as dead code. 4) The register allocator (ncolor) was losing the fact that the address register in a BLE/BLVE was live, even if it were a callee-save that one form of spill around a call might want to use. 5) Linker gets unsat for "__tp" 6) lint comment directive ARGSUSED doesn't work when used after function declaration. PHSS_9447: Compiler problems. 1) DOC problems in code with unrolled loops. 2) DOC problems in code with "assume size character strings" 3) DOC problem with hidden logicals incorrect code when the same procdure is called multiple times with slightly different parameter profiles 4) A runtime problem could occur at +O2 or greater, which is associated with a bad loop transformation. 5) Getting different results with +DA1.1 and +DA1.1c 6) error saying that STBYS is invalid inline assembly 7) An instruction was being incorrectly deleted during common subsxpression elimination causing incorrect results. 8) Problem is that large complex functions hold up +I builds pointlessly, as the extra instrumentation code slows down the optimization, while +Onolimit won't let the previous mplementation drop to +O1. 9) Bad code generated for floating-point arguments to similar calls. 10) incorrect code in programs that do extracts and deposits inside loops 12) incorrect code generation when ldil instructions are used with code symbols. 13) incorrect results and the following linker message: /usr/ccs/bin/ld: (Warning) Quadrant change in relocatable expression in subspace. PHSS_9138: Compiler problems. 1) Incorrect results in programs using programs with integer multipy inside loops. 2) Incorrect results when a program containing switch statements is compiled with PBO and PIC. 3) At +O2 or higher, unrolled loops may sometimes be miscompiled so that they contain a SUBT,TR instruction which causes a floating point exception at runtime. PHSS_8870: Compiler problems. 1) The compiler does not accept STWS as an inline assembly instruction. 2) At optimization level +O2 or higher,an extract of low order bits feeding an integer multiply by a constant value may be erroneously eliminated. 3) Loops which contain the closed form expression for a summation of a loop induction variable [e.g. i*(i-1)/2] may not compile correctly at +O2 or higher if the closed form expression is not executed in each iteration of the loop. 4) The compiler may abort at +O2 or higher. 5) Can't build large debuggable libraries using C compiler PHSS_8385: Compiler problems. 1) Problem with pragma HP_ALIGN NOPADDING with arrays 2) Compiler gets signal 11 3) Bad error 1647 with ? &x : NULL 4) Problem with #pragma HP_ALIGN 5) Error for "Tentative definition" using previously-undefined structure tag 6) Can't increment/decrement by large long long constant a += big 7) Nested switch doesn't find default case in 10.0 8) Error 1514 Illegal type for string initializer on string cast 9) typedef of struct tag confuses another struct and label PHSS_7311: Compiler problems. 1) Problems with pragma HP_ALIGN NOPADDING with arrays 2) Bad code for bit fields in static struct, address % 4 is 2 3) +O1 build of module gets into infinite loop in value numbering PHSS_6369: Compiler problems. 1) cpp.ansi requires much more heap space in preprocessing macros with lots of parameters than the original cpp.ansi. This results in running out of dynamic memory on systems with smaller amount of heap storage. PHSS_5743: Compiler and optimization problems cc patch for: 1) String initializer isn't put in $LIT$ space with +ESlit and +z 2) Invalid loader fixup with array of strings and +z 3) Problem with +O2 and arrays of structs with float 4) optimizer problem with array of struct 5) Program aborting at runtime with invalid fixup 6) cxref is generating incorrect info for initializer list 7) Ucode gets assert 199 while compiling nasa7 8) MLP: Backend Assert ** Symbol table entry of wrong class. (5172) 9) Bus error: Word load attempted on a static halfword variable 10) (PCXU) Ucode abort after COR 11) Load before store with +Oparallel FORTRAN pointer 12) ISTR floats above initialization of stored-through pointer (same as CLLbs02413) 13) Ucode leaks memory when invoked by ucomp 14) Backend assert SR: 5003446864 1653282335 5003438002 1653266130 5003422857 5003415190 5003380691 5003367524 1653285452 4701414581 4701384636 1653237693 1653255018 1653248260 1653282004 4701401976 4701401745 1653176347 4701396747 4701396184 1653258285 5003409938 1653261404 1653238782 1653234013 4701368027 4701361436 4701366047 1653217802 4701358515 1653213033 4701356378 1653209916 4701352880 5003366302 5003363457 4701351288 5003346023 1653201673 5003327767 1653195735 5003291187 1653158535 1653143180 1653158154 5003305276 5003309930 5003285056 1653155895 1653147090 5003291187 1653159202 1653158154 5003268797 5003269993 5003269027 5003268797 4701363556 Patch Files: /opt/ansic/bin/cc /opt/ansic/bin/c89 /opt/ansic/lbin/ccom /opt/ansic/lib/nls/msg/C/cc.cat /opt/langtools/lbin/cpp.ansi /opt/langtools/lbin/cpp /opt/langtools/lib/nls/msg/C/cpp.cat /opt/langtools/lib/nls/msg/C/ucomp.cat.tmp /opt/langtools/lbin/ucomp.tmp /opt/langtools/lib/libmp.a.tmp /opt/langtools/lib/libp/libmp.a.tmp what(1) Output: /opt/ansic/bin/cc: LINT A.10.32.22 CXREF A.10.32.22 HP92453-01 A.10.32.22 HP C Compiler /usr/lib/libc: $Revision: 76.3 $ /opt/ansic/bin/c89: LINT A.10.32.22 CXREF A.10.32.22 HP92453-01 A.10.32.22 HP C Compiler /usr/lib/libc: $Revision: 76.3 $ /opt/ansic/lbin/ccom: LINT A.10.32.22 CXREF A.10.32.22 HP92453-01 A.10.32.22 HP C Compiler HP-UX SLLIC/OPTIMIZER UX.10.20.563 (DAVIS): 01/28/99 Ucode Code Generator - UX10.20.67 (PACG_UX10) REV: HP SESD Code High Level Optimizer - UX.10.21.980511 (UX10.MULTI) [-DHLO_RELEASE +O3] - 05-Feb-99.05:21 /usr/lib/libc: $Revision: 76.3 $ /opt/ansic/lib/nls/msg/C/cc.cat: HP92453-01 A.10.32.22 HP C Compiler Copyright 1986, Hewlett-Packard Co. /opt/langtools/lbin/cpp.ansi: HP92453-01 A.10.32.22 (WM) HP C Preprocessor (ANSI) /usr/lib/libc: $Revision: 76.3 $ /opt/langtools/lbin/cpp: HP92453-01 A.10.32.22 (WM) HP C Preprocessor /usr/lib/libc: $Revision: 76.3 $ /opt/langtools/lib/nls/msg/C/cpp.cat: HP92453-01 A.10.32.22 HP C Preprocessor Copyright 19 85, Hewlett-Packard Co. /opt/langtools/lib/nls/msg/C/ucomp.cat.tmp: None. /opt/langtools/lbin/ucomp.tmp: HP-UX UCOMP UX.10.20.319 (DAVIS): 01/28/99 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] - 05-Feb-99.05:21 /usr/lib/libc: $Revision: 76.3 $ /opt/langtools/lib/libmp.a.tmp: Parallel Runtime Library - UX.10.20.970710 (UX10.MUL TI) [+O4] - 04-Dec-97.17:44 /opt/langtools/lib/libp/libmp.a.tmp: Parallel Runtime Library - UX.10.20.970710 (UX10.MUL TI) [+O4] - 04-Dec-97.17:44 cksum(1) Output: 735008664 253952 /opt/ansic/bin/cc 735008664 253952 /opt/ansic/bin/c89 1897833227 7458816 /opt/ansic/lbin/ccom 1919825083 86950 /opt/ansic/lib/nls/msg/C/cc.cat 2023299069 262144 /opt/langtools/lbin/cpp.ansi 2950952481 258048 /opt/langtools/lbin/cpp 2510589203 9851 /opt/langtools/lib/nls/msg/C/cpp.cat 1959835431 38649 /opt/langtools/lib/nls/msg/C/ucomp.cat.tmp 3256560940 5611520 /opt/langtools/lbin/ucomp.tmp 3076413582 80172 /opt/langtools/lib/libmp.a.tmp 418309933 88892 /opt/langtools/lib/libp/libmp.a.tmp Patch Conflicts: None Patch Dependencies: s700: 10.01: PHSS_8555 PHSS_7505 s700: 10.10: PHSS_8555 PHSS_7505 s700: 10.20: PHSS_8555 s800: 10.01: PHSS_8555 PHSS_7505 s800: 10.10: PHSS_8555 PHSS_7505 s800: 10.20: PHSS_8555 Hardware Dependencies: None Other Dependencies: None Supersedes: PHSS_5743 PHSS_6369 PHSS_7311 PHSS_8385 PHSS_8870 PHSS_9138 PHSS_9447 PHSS_9765 PHSS_9927 PHSS_10261 PHSS_10897 PHSS_11518 PHSS_12676 PHSS_13421 PHSS_14326 PHSS_15444 Equivalent Patches: None Patch Package Size: 13950 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_17507 5a. For a standalone system, run swinstall to install the patch: swinstall -x autoreboot=true -x match_target=true \ -s /tmp/PHSS_17507.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_17507.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_17507. 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_17507.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_17507.depot of=/dev/rmt/0m bs=2k Special Installation Instructions: None