Release Notes: PathScale Compiler Suite - Release 2.5 ===================================================== Copyright 2006 QLogic Corporation, All Rights Reserved. Thank you for purchasing the PathScale EKOPath Compiler Suite. This file describes new features, bugs fixed, and known issues with the PathScale EKOPath Compiler Suite. Where possible, we provide workarounds for known problems. Support & contact information ----------------------------- To report bugs, or for more information, send an email message to support@pathscale.com. Please report problems the first time you encounter them, even if they are listed here as known issues. Knowing who has encountered a bug helps us prioritize the bugs we know about. New Features in 2.5 ------------------- * Support for Fortran Enhanced data type facilities (ISO/IEC TR 15581:2001) + This enables support for an open source implementation of Fortran ISO/IEC 1539-2:2000 Varying length character strings * Improvements in performance on various customer applications * This release has been tested on the following Linux distributions: Fedora Core 2 Fedora Core 3 RedHat Enterprise Linux 3 RedHat Enterprise Linux 4 SUSE Linux Enterprise Server 8 SUSE Linux Enterprise Server 9 SUSE Professional 9.2 SUSE Professional 9.3 SUSE Linux Enterprise Server 10 The C & Fortran compilers have been tested on the following operating systems: Fedora Core 4 Fedora Core 5 SUSE Linux 10 There are known issues with system header files and ABI when attempting to use the current C++ (pathCC) on Linux distributions that ship with GCC 4.x based compilers. Support for GCC 4.x C/C++ Front-End ----------------------------------- At this time the PathScale C & C++ compilers are based on the GCC 3.3 front end. With a few exceptions we have not enhanced the front ends to support features present in the newer GCC 3.4 and 4.0 compilers. (The exceptions include some builtins and macros to allow us to support more recent Linux releases.) Within the next few months we will be starting an extended beta program of the PathScale Compiler Suite based on more recent GCC C & C++ front ends. This will enable us to officially support Linux distributions that ship with GCC 4.x based compilers. If you are interested in participating in this beta, please send an e-mail to support@pathscale.com requesting to be added to the beta list. Workaround for distributions already using the GNU 4.x compilers and environment ------------------------------- Since the PathScale 2.5 compilers are not supported on systems that use the GNU 4.x compilers and compiler environment, a workaround is required for Fedora Core 4, Fedora Core 5, SUSE 10, or SLES 10. The best workaround is to compile on a supported and compatible distribution, then run the executable on nodes like Fedora Core 5 or SLES 10 that use the GNU 4.x compilers and environment. To run on FC4 or FC5, install FC3 or RHEL4/CentOS on your build machine. Compile your application on this machine. To run on SUSE 10 or SLES 10, install SUSE 9.3 on your build machine. Compile your application on this machine. Next, on the machines in your cluster on which the job will run, install compatibility libraries. These libraries include C++ and fortran compatibility shared libraries and libgcc. For an FC4 or FC5 system, you would need: pathscale-compilers-libs (for FC3) compat-gcc-32 compat-gcc-32-g77 compat-libstdc++-33 (C, fortran, and C++, respectively). On a SuSE 10 or SLES 10 Beta system, you would need: pathscale-compilers-libs (for SuSE 9.3) compat-libstdc++5 (for SUSE 10 and SLES 10) Depending upon the application, you may need to use the -W1,-Bstatic option to use the static versions of some libraries. Note that this workaround allows code on the older distros to be deployed on the newer distros. It does not support the new GCC4 C++ features. That is what pathCC release 3 will do. Fortran programs and stack size ------------------------------- The compiler normally allocates data for Fortran programs on the stack for best performance. Some Linux distributions limit the default stack size to a value low enough that many Fortran programs will crash immediately after they begin to run. The Fortran runtime will automatically attempt to work around these limits if it detects them. However, for some 32-bit apps it appears that very large stack sizes ignored and can result in stack overflow messages. In these cases, setting the stack size to a smaller value (eg. 8192) may allow the program to run. (This is being investigated internally and has the bug number 7641.) Fortran Preprocessor default changed ------------------------------------ Starting with the 2.1 release, the default preprocessor used by Fortran for files that us .F, .F90, or .F95 extensions has now been changed to the C preprocessor, cpp, from the Fortran preprocessor, ftpp. The Fortran preprocessor can be invoked by using the option '-ftpp' when compiling the code. Use of system headers and libraries ----------------------------------- Early releases of the PathScale EKOPath Compiler Suite have provided a set of system libraries and headers. Doing this has caused some users to experience problems. Starting with this release, the compiler relies on the system's headers and libraries. As a result, users will no longer be able to build 64-bit applications on systems that only have 32-bit development environments installed. Known issues and workarounds ============================= OpenMP ------ Functionality - - - - - - - The C++ OpenMP support is limited and does not support OpenMP directives in C++ source that use exceptions, classes or templates. (We have found some codes with very simplistic use of classes may work.) Thread Stack Size - - - - - - - - - Typically the per-thread stack size limit is 2MB for 2.4.* kernels using linuxthreads and 64MB for 2.6.* kernels using NPTL, but these maximums may vary according to your Linux distribution. Please contact your O/S vendor for specific details. Installation ------------ The PathScale EKOPath Compiler Suite is a 32-bit program, and requires a 32-bit execution environment to run. We have found that some users do not have the 32-bit environment installed on their system resulting in the inability of the compiler to run. This tends to be a problem only on systems where the non-root tar installation is used or where "--force" is used to install the RPMs. RPM Installation on SUSE 9.2, 9.3, SLES 8, and SLES 9 - - - - - - - - - - - - - - - - - - - - - - - - - - - On the SUSE Linux distributions, RPM may report that no package provides ld-linux-x86-64.so.2 when that is not the case. (This library is provided by the glibc RPM.) This is a bug in the version of RPM distributed with the specified SUSE environments. Installing multiple versions on the same system: ------------------------------------------------ Systems with multiple versions of the PathScale compiler, using the RPMs may receive the following message when they try to execute their application built with the 2.3 release of the PathScale EKO Compiler Suite: ./a.out: relocation error: ./a.out: symbol memset.pathscale.opteron, version LIBPSCRT_1.0 not defined in file libpscrt.so.1 with link time reference The problem is the 2.3 release is expecting new symbols to be resolved by one of the runtime libraries are not in older versions of that library. When installation is done using the RPMs the system /etc/ld.so.conf is appended with: /lib/2.4/32 /lib/2.4 If multiple installations exist on this system, the ld.so.conf will contain entries for each of the releases in the order that they were installed: /export/pathscale_alt/lib/2.3/32 /export/pathscale_alt/lib/2.3 /export/pathscale_alt_2/lib/2.5/32 /export/pathscale_alt_2/lib/2.5 When the application is executed, it will find the shared library in the older directory ( in the above case) which does not have the necessary symbols in it and that will result in some form of the above error message. Workarounds: - - - - - - 1. Update /etc/ld.so.conf removing all entries pointing to older, installed versions of the compiler suite. The fix is to edit the file /etc/ld.so.conf (as root) and remove some lines. It'll look something like this: $ cat /etc/ld.so.conf /usr/X11R6/lib64 /usr/lib64/qt-3.1/lib /usr/X11R6/lib /usr/lib/qt-3.1/lib /opt/pathscale/lib/2.3/32 <=== remove this /opt/pathscale/lib/2.3 <=== remove this /opt/pathscale/lib/2.5/32 <=== keep this /opt/pathscale/lib/2.5 <=== keep this You then need to let the system know about this reconfiguration by running (as root): # /sbin/ldconfig 2. Uninstall the older versions of the compiler suite. (This way, older versions of the library will not be found and it will resolve to the most recent version. ) Some of the bugs fixed between 2.4 and 2.5: [Bug 2702] -IPA:ignore_lang (inlining across language boundaries) [Bug 4522] Fortran operator = performance improvement [Bug 5063] Support Fortran ISO/IEC 1539-2:2000 Varying length character strings [Bug 5088] Support ISO/IEC 1539-2:2000 Varying length character strings [Bug 5695] Improve loop vectorization in certain cases [Bug 5701] Need to vectorize this induction loop [Bug 5880] pathf90 - customer code 20% faster when compiled with - LNO:interchange=off [Bug 6123] implement fast_rsqrt [Bug 6166] tune prefetch instructions usage [Bug 6938] phase ordering prevents some SIMD lowering [Bug 7602] Load from global variable instead of from stack [Bug 7717] pathf90 - performance bug: competitor's compiler generates faster code [Bug 7847] -O3 fails at runtime [Bug 8550] code fail with feedback directed optimization (FDO) [Bug 8567] pathf95 - Segmentation fault in phase Lowering [Bug 8592] Use xor to clear registers [Bug 8713] defaults file can't handle embedded white space or "#" [Bug 8719] application segfaults with -O3 -OPT:rsqrt=on [Bug 8723] undefined reference when -static -m32 -ipa [Bug 8734] Assertion failure: REGISTER_SET_Union1: register value out of range [Bug 8776] segfault at -O3 -WOPT:retype_expr=on [Bug 8885] Slow AND/XOR with pathf90 [Bug 8958] code fails at -O2, passes at -O1 [Bug 9063] jmp to jmp in assembly not all eliminated [Bug 9071] Wrong format of floor.. instruction [Bug 9102] Compiler passes arbitrary -m options through to ld [Bug 9134] ICE at line 1351 of be/cg/cgemit.cxx: incorrect register class for operand 0 [Bug 9140] Vectorize Fortran 90 loops containing the SIGN intrinsic [Bug 9143] Vectorization of a simple triple-nested loop [Bug 9157] (=).field1 gets wrong type information [Bug 9166] C++ front-end crashes at runtime when built with -ipa [Bug 9181] seg faults in ipa_link with -Ofast [Bug 9188] application segfaults when compiled with EKO [Bug 9190] -O2 -m32 -fPIC compile fails on 32 bit machines [Bug 9191] unresolved symbols building application -static -ipa [Bug 9205] -m32 base build error [Bug 9429] -m32 -Ofast +FDO failure [Bug 9430] "pathcc -c bad-filename." with trailing period returns no input file [Bug 9453] Segmentation fault during application build [Bug 9466] register allocator seg fault while building application [Bug 9484] IPA cannot link with dynamic libraries [Bug 9489] Compiler Error in Assembly phase when -O3 [Bug 9496] test fails to increment the va_list pointer [Bug 9499] compile time error in Create CODEMAP Representation when -ipa [Bug 9520] Fortran program fails to call elemental fcn returning derived type [Bug 9526] result and first opnd use different register [Bug 9534] pathCC: Exception handling does not work when compiled with -static [Bug 9543] ftn io test abort [Bug 9550] Error writing WHIRL file phase [Bug 9582] incorrect runtime results with -Ofast - WOPT:vsym_unique=on [Bug 9588] seg. fault in Create CODEMAP Representation phase. [Bug 9589] Segmentation fault in LNO when -WOPT:vsym_unique=on [Bug 9597] Exp_Intrinsic_Op: unsupported intrinsic ((null)) [Bug 9625] Please add support for _mm_*fence sse2 instrinsics from xmmintrin.h [Bug 9633] intrinsics support: built-in function `__builtin_printf_unlocked' not currently supported [Bug 9635] intrinsic support: INTRN_PINSRW not yet supported [Bug 9637] diagnostics test causes pathCC internal error [Bug 9641] CG changes the schedule of "lfence" instruction [Bug 9651] compiler hang during VHO Processing phase when -OPT:Ofast [Bug 9652] Please add support for load/store/stream _mm_*_si128 sse2 instrinsics from emmintrin.h [Bug 9654] va_arg did not function correctly when passed 10 doubles. [Bug 9656] Alias analysis not accurate with array inside a struct [Bug 9662] Allow LNO:trip_count to be synonym for LNO:assume_unknown_trip_count [Bug 9675] -m32: Generate more efficient code sequence to get the instruction pointer [Bug 9679] code has wrong assumption about left shifts >64 [Bug 9680] -m32 application terribly slow on em64t [Bug 9682] creating shared library requires -fno-fast-stdlib in the link line to suppress -lpscrt [Bug 9686] Merge -LNO:trip_count_assumed_when_unknown and - LNO:num_iters [Bug 9687] different behavior from gcc for left shifts greater than 64 under -m32 [Bug 9688] pathCC "typedef int MyInt; MyInt segfaults at run-time [Bug 9690] assert failure in cg with simd [Bug 9694] application runs faster without -march=em64t [Bug 9695] -trapuv does not work with -m32 [Bug 9699] pathf90 -trapuv -msse2 compilation fault in be [Bug 9700] CG uses 32-bit comparison for 64-bit data [Bug 9701] CG seems to generate wrong code for LNOT [Bug 9714] Should we document LNO:minvariant ? [Bug 9720] -LNO flags are doublly treated as -L flags [Bug 9722] Assertion failure: ### field_id and descriptor type are inconsistent [Bug 9725] Assertion failure: Record_struct_access: illegal field ID [Bug 9729] C++ Error: can't resolve `.except_table' {.section} [Bug 9731] -apo cause Segmentation fault in Loop Nest Optimizer phase. [Bug 9734] test of zero handling in single/doubleprecision are wrong [Bug 9770] 3% regression in 164.gzip peak [Bug 9772] pathf95 -ipa -lfftw3.a seg faults in ipa link [Bug 9801] Compiler asserts building application at -O3 [Bug 9803] 3DNow prefetch instruction used under -march=em64t [Bug 9821] alias id 0 [Bug 9830] runtime seg. fault with -m32 -O2 -ipa [Bug 9844] -m32 base compile time assertion [Bug 9852] flag of -ffloat-store using sse2 [Bug 9853] unsigned long long fail at -O1 -m32 (passes -O2 -m32) [Bug 9857] -O3 -OPT:alias=typed -WOPT:vsym_unique=on causes Inconclusive test to fail [Bug 9858] pathf95 fails with -O3 works with -O2 [Bug 9868] test IO of derived types obtains syntax errors [Bug 9920] Extra branch after CIOR lowering and constant propagation [Bug 9923] Segmentation fault in phase IR->WHIRL Conversion [Bug 9925] Pathf95 IPA Inline processing phase: Unexpected references of formal parameter [Bug 9933] Fault address error when -Ofast [Bug 9960] test contains SSE intrinsics received compile time error with -O0 -apo [Bug 9981] Installer doesn't check if subscription file [Bug 10013] CG negative freq assertion failure [Bug 10016] pathcc spinlock asm code fails but works with gcc [Bug 10031] Incompatible options "-mp -static-data" should warning [Bug 10042] pathf90 -mp -mcmodel=medium program [Bug 10055] Segmentation fault in Loop Nest Optimizer phase [Bug 10061] incorrect runtime results [Bug 10080] %b0 unknown in inline asm [Bug 10122] file bfgs_module.F90 fails to compile [Bug 10148] Small performance regressions? [Bug 10158] pathcc INTERNAL ERROR when -O3 -m32 [Bug 10180] compiler seg fault in EBO [Bug 10196] application validation failed with -OPT:Ofast [Bug 10199] Fortran front-end error [Bug 10289] pathCC segfault in phase Assembly [Bug 10310] pathf95 -byteswapio iostat=4220 at run-time with large write [Bug 10345] Segmentation fault in writing WHIRL file phase [Bug 10421] Incorrect register class for operand 0 in ipa link [Bug 10445] pathcc LNO assertion failure: free invalid pointer. [Bug 10467] pathf90 fails to use static allocation on an initialized pointer [Bug 10472] pathcc Signal Segmentation fault in pahse Writing WHIRL file [Bug 10573] allow extra ',' at beginning of data transfer i/o list (gfortran) Some of the bugs fixed between 2.3 and 2.4: [Bug 572] F95: Cannot use derived types with pointers as constants (parameters) [Bug 7387] Certain structure-constructors corrupt memory during compilation [Bug 7856] pathf90 - Segmentation fault in IR->WHIRL Conversion phase [Bug 7967] pathf90 - 'save' in the scope of the module does not seem to work [Bug 8026] pathf90 excessive compile time [Bug 8261] pathf95 unexpected syntax error [Bug 8303] memory doesn't zero out when -apo [Bug 8309] print * with double-precision [Bug 8315] -ipa -shared on C++ gives assertion failure [Bug 8422] "integer i*2" not allow [Bug 8435] pathf95 - compilation error:DESY: spurious error about arg to "size" in a pure procedure [Bug 8459] pathf95 does not honour -isystem [Bug 8485] pathcc - compilation fails on shift intrinsics [Bug 8498] redundant movzbl, movl [Bug 8525] pathCC segfaults with -OPT:early_intrinsics=on [Bug 8528] Bootstrap: CG scheduling bug exposed by WOPT BDCE fix [Bug 8545] pathcc does not preserve %rbx at -O0 and -O1 for volatile asm cpuid code [Bug 8546] application slow due to branches [Bug 8547] ibits intrinsic handled incorrectly [Bug 8565] Segmentation fault in Lowering phase. [Bug 8576] Compile-time seg fault building with -fb_create [Bug 8587] Error: suffix or operands invalid for `mov' [Bug 8589] Eliminate unnecessary stack manipulation for (simple) C++ leaf functions [Bug 8594] Shift optimizations found [Bug 8601] Assembler error with -m32 -CG:opt=0 [Bug 8607] compiling test with -ipa takes forever [Bug 8620] Fortran IPA compilation and link requires a C language subscription [Bug 8628] -OPT:Ofast makes some codes 25% slower [Bug 8643] pathCC at -O3 compilation failure with "Could not find return-value from intrinsic" [Bug 8659] the flag -mno-sse should imply -mno-sse2 [Bug 8662] Segmentation fault in phase Extended Block Optimizer [Bug 8665] excess exception-handling generated [Bug 8676] assert failure in cg with simd [Bug 8685] pathf95 - OpenMP locks cause a stack overflow on customer code [Bug 8687] pathf95 - customer code segfaults [Bug 8690] single_private/single_nowait: failed at -O2 -ipa; passed at -O2 [Bug 8711] -show-defaults flag is misdocumented and useless [Bug 8712] compiler.defaults search path is hard-coded [Bug 8717] Fortran pointer assignment fails if target is a structure component [Bug 8732] GNU: support --print-multi-lib flag [Bug 8742] gcc compat: treat -O4 and higher as synonyms for highest opt level [Bug 8754] compiler doesn't understand -fshort-wchar [Bug 8755] gfecc infinite loop on nsDOMClassInfo.cpp, all opt levels [Bug 8756] pathcc slow compile time [Bug 8767] pathf90 can'r read -2147483648 as integer*4 [Bug 8772] strangeness with unsigned long long literal math [Bug 8840] Fortran ISHFT by BIT_SIZE does nothing [Bug 8843] seg. fault in LNO [Bug 8862] omp_atomic obtains syntax errors [Bug 8865] application coredumps at -O2 [Bug 8871] Duplicate label causes crash [Bug 8880] Segmentation fault in phase Loop Nest Optimizer [Bug 8916] seg. fault in LNO when -Ofast (both -m32 and -m64) [Bug 8921] Installer fails to copy subscription file on upgrade [Bug 8927] Segmentation fault in phase Loop Nest Optimizer [Bug 8933] Non-volatile coderep for volatile variable [Bug 8937] Mixed-language -Ofast gives IPA warning [Bug 8941] Replace indirect call through address of a function to a call [Bug 8943] OpenMP: ICE with undeclared variable in OpenMP pragma [Bug 8956] -m32 - Assembler error: bad register name `%rsp)' [Bug 8993] IPA hangs during peakcompile [Bug 8994] memory allocation/deallocation test hangs at runtime [Bug 9015] Fortran fgetc and fget do not report end of file [Bug 9019] -m32 A numeric input field contains an invalid character [Bug 9020] real comparison incorrect with -m32 (all opt levels) [Bug 9021] IPA: linker warning with inconsistent flags is confusing and unhelpful [Bug 9049] pathcc -print-file-name=include -m32 crashes in driver [Bug 9051] Very large alloca leads to internal compiler error [Bug 9066] disallow -static and -mcmodel=medium [Bug 9084] Copyprivate on threadprivate variable does not work [Bug 9088] seg. fault at IPA Summary when -m32 [Bug 9096] Don't print file names when compiling multiple files [Bug 9097] Compiler generates duplicate temporary names when input basenames are the same [Bug 9109] incorrect results with -ffloat-store -ipa [Bug 9110] Segmentation fault in phase IPA Summarym -O2 and above [Bug 9112] seg. fault in LNO when -OPT:Ofast [Bug 9114] pathf90 generates wrong code for at -O2 and -O3 leading to application seg fault [Bug 9123] Order of optimization options causes different code generation [Bug 9150] shifts yield wrong result after CG's EBO optimization [Bug 9151] Segmentation fault in Global Optimization [Bug 9177] backtrace does not work [Bug 9178] -funwind-tables not sufficient for GNU backtrace in Fortran [Bug 9201] Signal Segmentation fault in phase Global Optimization [Bug 9473] no debug info for parameter variable [Bug 9539] Fortran: signal intrinsic with i*8 or i*4 type procedure address crashes [Bug 9598] Error: bad register name `%sih' Known issues in 2.5: [Bug 595] Some AMD64 glibc distributions include broken obstack code [Bug 949] C, C++: complex integer data types not supported [Bug 1297] C: nested functions not supported [Bug 1316] F77: %loc extension not supported [Bug 1320] Fortran: some kinds of variable alignment are not supported [Bug 2312] IPA: linking may fail if filenames contain shell metacharacters [Bug 2395] The implementation of __builtin_return_address is not complete. [Bug 2446] IPA linker does not handle .a files containing IPA .o files correctly [Bug 2509] Control of floating-point trapping behavior [Bug 2809] C: compiler handles unspecified array sizes incorrectly [Bug 2896] Some fast math routines are only available in the static math library [Bug 3289] pathf90: writing to a constant passed as an argument causes program to abort [Bug 3697] GNU `used' attribute not supported [Bug 3830] C: Incomplete debug information in nested lexical scopes [Bug 4374] IPA: "make: warning: Clock skew detected. [Bug 4433] pathf90: Fortran programs without a "main" will appear to successfully link. [Bug 4716] Improper use of Fortran IOSTAT in data transfer list causes compiler error [Bug 4886] libstdc++ version support [Bug 5090] Fortran OpenMP: statically nested parallel constructs not supported. [Bug 5090] Fortran OpenMP: statically nested parallel constructs not supported. [Bug 5195] C OpenMP FIRSTPRIVATE and LASTPRIVATE on same variable for PARALLEL DO [Bug 5441] pathcc/pathCC: Do not support GCC thread local storage [Bug 5443] SLES 8 linker may emit errors about truncated relocations. [Bug 5571] pathCC: Inlining in the C++ front end. [Bug 5882] OpenMP: Serial version of a parallel region is not localizing "private" variables. [Bug 5885] pathCC: GCC 3.4 enhanced support of attributes. [Bug 5952] pathf90: On 32-bit the logic to automatically set stack size may not work [Bug 6236] pathf90: The Fortran compiler currently does not support IEEE intrinsics [Bug 6244] Using -zerouv causes the application to crash. [Bug 6259] pathf90: Restricted expressions use Fortran 90 rules. [Bug 7728] Inline assembly '=A' contraint not supported [Bug 8441] pathf95 -ipa -m32 fails with gcc: elf_i386: No such file or directory [Bug 8502] Cray Fortran 'buffer out' extension doesn't work [Bug 8627] pathf95 - the use of "save" and "equivalence" on a local array causes the size of the array to be miscalculated [Bug 8769] pathf90 - application segfaults when compiled at -O2 [Bug 9781] OpenMP pragmas cause error line numbers to be off by 1 [Bug 9960] C: Tests containing GNU SSE intrinsics may fail at -O0 -apo [Bug 10035] always_inline may yield incorrect results [Bug 10097] Compilers do not run on FC5 with SELinux enabled [Bug 10192] pathf90 cpp preprocessor does not handle ## concatenation [Bug 10229] pathCC: Ternary operators may cause the compiler to abort [Bug 10388] pathf95: Use of cpp with directives before or between continuations [Bug 10562] pathCC with -Wuninitialzed may print mangled names [Bug 2446] IPA linker does not handle .a files containing IPA .o files correctly The IPA linker attempts to correctly handle archive files containing .o files compiled with -ipa, but this support is not complete. While a regular linker will only use .o files that export needed symbols, the IPA linker uses all .o files inside the archive, which can often lead to undefined symbol errors. To work around this, extract the .o files you need from the .a file, and link explicitly against those files. [Bug 2809] C: compiler handles unspecified array sizes incorrectly If the compiler encounters C code that uses ISO C99 initializers to initialize an array of flexible size, it will generate assembly code that causes the assembler to issue an "attempt to move .org backwards" error. An example of this syntax usage is as follows: > struct K { > int i; > int f[]; > }; > struct K a = { > 9, > { 1, 4, 5 } > }; > struct K b = { > 9, > { 1, 4, 5, 12, 14,9,0,9 } > }; A workaround is to specify a size in the array declaration. [Bug 4886] libstdc++ version support The current EKOPath C++ compiler will work with libstdc++ 3.4 if and only if the corresponding GCC 3.4 is installed. That restriction exists because that version of the library relies on built-in numeric constants which are introduced in the preprocessor starting with GCC 3.4. The constants are: > __FLT_HAS_INFINITY__ > __FLT_HAS_QUIET_NAN__ > __DBL_HAS_INFINITY__ > __DBL_HAS_QUIET_NAN__ > __LDBL_HAS_INFINITY__ > __LDBL_HAS_QUIET_NAN__ The EKOPath C++ compiler uses the installed GCC preprocessor. Alternatively, install libstdc++ 3.3. [Bug 2509] Control of floating-point trapping behavior The EKOpath compilers support the following options for controlling floating-point traps: > -TENV:X=(0..4) > Specify the level of enabled exceptions that will be > assumed for purposes of performing speculative code > motion (default is level 1 at all optimization levels) > In general, an instruction will not be speculated (i.e. > moved above a branch by the optimizer) unless any > exceptions it might cause are disabled by this option. > > Level 0 - No speculative code motion may be performed. > > Level 1 - Safe speculative code motion may be performed, > with IEEE-754 underflow and inexact exceptions > disabled. > > Level 2 - All IEEE-754 exceptions are disabled except > divide by zero. > > Level 3 - All IEEE-754 exceptions are disabled including > divide by zero. > > Level 4 - Memory exceptions may be disabled or ignored. > > -TENV:simd_imask=(ON|OFF) > Default is ON. Turning it OFF unmasks SIMD floating-point > invalid-operation exception. > > -TENV:simd_dmask=(ON|OFF) > Default is ON. Turning it OFF unmasks SIMD floating-point > denormalized-operand exception. > > -TENV:simd_zmask=(ON|OFF) > Default is ON. Turning it OFF unmasks SIMD floating-point > zero-divide exception. > > -TENV:simd_omask=(ON|OFF) > Default is ON. Turning it OFF unmasks SIMD floating-point > overflow exception. > > -TENV:simd_umask=(ON|OFF) > Default is ON. Turning it OFF unmasks SIMD floating-point > underflow exception. > > -TENV:simd_pmask=(ON|OFF) > Default is ON. Turning it OFF unmasks SIMD floating-point > precision exception. [Bug 6236] pathf90: The Fortran compiler currently does not support IEEE intrinsics The current release of the Fortran compiler does not implement the IEEE floating point intrinsics: > clear_ieee_exception > disable_ieee_exception > enable_ieee_exception > get_ieee_exception > get_ieee_interrupts > get_ieee_rounding_mode > get_ieee_status > ieee_class > ieee_next_after > ieee_unordered > set_ieee_exception > set_ieee_exceptions > set_ieee_interrupts > set_ieee_rounding_mode > set_ieee_status > test_ieee_exception > test_ieee_interrupt [Bug 1297] C: nested functions not supported The gcc C language extension of nested functions (functions defined inside other functions) is not currently supported. [Bug 5885] pathCC: GCC 3.4 enhanced support of attributes. The most recent version of pathCC has been enhanced to support some attributes and built-ins that are not supported by GCC 3.3 compilers. However, there are some forms that are not yet supported. For example, GCC 3.4 allows the user to specify an attribute on an identifier before the identifier is declared: > template > struct my_type > { > void fn() > { > T foo __attribute__ ((__unused__)) (bar); > } > typename T::nested_T bar; > }; Workaround: None [Bug 2312] IPA: linking may fail if filenames contain shell metacharacters The IPA linker may produce strange error messages and fail to link if a file name passed to it contains a shell or "make" metacharacter. The list of characters to avoid is as follows: ;:$()[]{}<>% [Bug 2395] The implementation of __builtin_return_address is not complete. The current implementation of __builtin_return_address appears to only work correctly for an argument of 0. [Bug 2896] Some fast math routines are only available in the static math library Some high-performance standard math library routines (single- and double-precision versions of pow, fmin, fmax, finite, and copysign) are only available in the static version of the math library (libmpath) that we ship. In order to benefit from these faster routines, you should link explicitly against the static version of the math library. You can find out the location of this library using the following command: > pathcc -print-file-name=libmpath.a The static version of the math library is faster in general than the shared version. You should always use it if you want the highest floating point performance. [Bug 4374] IPA: "make: warning: Clock skew detected. You may receive a "make: warning: Clock skew detected. Your build may be incomplete." message when compiling with the '-ipa' option using a remote file system such as NFS for the build directory. The '-ipa' option currently uses the 'make' command which can be sensitive to the differences in system clock between the system where the compilation is taking place and the file server. Clock skew will not affect the success of your build, but you can avoid the warning by ensuring that the system times of the file server and the build server are synchronized. [Bug 5090] Fortran OpenMP: statically nested parallel constructs not supported. The compiler does not support statically nested parallel constructs. Such constructs may cause compilation or runtime failure. For example, the following is not supported: !$OMP PARALLEL $OMP PARALLEL $OMP END PARALLEL $OMP END PARALLEL [Bug 5195] C OpenMP FIRSTPRIVATE and LASTPRIVATE on same variable for PARALLEL DO The current implementation of OpenMP in the C compiler does not support FIRSTPRIVATE and LASTPRIVATE on same variable for PARALLEL DO. The compiler will issue the following error if this is encountered: > Error: FIRSTPRIVATE and LASTPRIVATE on same variable not > yet implemented for PARALLEL DO [Bug 5441] pathcc/pathCC: Do not support GCC thread local storage The current C and C++ compilers do not have support for Thread Local Storage extensions that GCC supports. Workaround: Rewrite code not to use thread local storage. [Bug 5571] pathCC: Inlining in the C++ front end. The g++ 3.3 front end implements extremely aggressive inlining. We have found that the increase in code size caused by this inlining may cause the compiler's back end to have excessively long run times. As a result, the default is to allow the compiler's back end to do the inlining by turning off inlining in the C++ front end. In most cases the back end inlining does as well if not better than the C++ front end. In some rare cases, allowing the C++ front end to do the inlining does result in a faster executable. (This is typically true in cases where g++ produces faster runtimes than pathCC.) To turn on front end inlining use the -finline option. (NOTE: This option may go away in a future release.) If that does result in better performance for your application, please report it to PathScale support so we can further refine the back end inlining. [Bug 5882] OpenMP: Serial version of a parallel region is not localizing "private" variables. The current OpenMP implementation may not create copies of private variables in parallel regions in the single threaded case as required by the OpenMP standard. Workaround: Define the following environment variables: > export PSC_OMP_SILENT=1 > export PSC_OMP_SERIAL_OUTLINE=1 [Bug 5952] pathf90: On 32-bit the logic to automatically set stack size may not work For 32-bit applications the logic described in section 3.10 of the User Guide may not work as documented. If the application aborts during execution try setting the stack size to a large value or unlimited and see if that resolves the issue. Workaround: Set the stack size to unlimited before running the application: > ulimit -s unlimited [Bug 6244] Using -zerouv causes the application to crash. We recommend running the application with -trapuv and -Wuninitialized to help identify and fix the uninitialized variables. The application may be using an uninitialized variable that just happens to be non-zero most of the time. The use of -zerouv is causing the uninitialized variable to be zero resulting in the application crashing. [Bug 6259] pathf90: Restricted expressions use Fortran 90 rules. The current Fortran compiler implements the rules for restricted expressions in accordance with the Fortran 90 standard. As a result, some valid Fortran 95 programs that rely on the broader definition of restricted expressions may generate errors when compiled with pathf90. [Bug 3830] C: Incomplete debug information in nested lexical scopes The compiler omits the necessary debugging output for enabling the debugger to differentiate between variables with identical names in nested lexical scopes. For example: > void foo() { > int i = 0 ; > { int i = 1 ; > { int i = 2 ; > } > } > } A debugger will not be able to tell the difference between the three variables called 'i'. [Bug 1316] F77: %loc extension not supported The F77 %loc directive, which returns the address of a variable, is implemented by some Fortran compilers such as g77, but not yet by the PathScale compiler. Recommend using the loc(). [Bug 1320] Fortran: some kinds of variable alignment are not supported Given a Fortran program fragment like this: > character c(11) > real r > equivalence (r,c(2)) The intention of the fragment is that the variable c should start on a 7-byte alignment, i.e. that c(2) should be aligned with r. This is not standard Fortran, but is an extension supported by some Fortran compilers, e.g. g77. The PathScale Fortran compiler does not currently support this kind of alignment requirement, and will issue a compilation error. [Bug 4433] pathf90: Fortran programs without a "main" will appear to successfully link. Fortran programs that do not provide a "main" entry point will appear to successfully link but will fail at runtime with the following message: > $ ./a.out > Someone linked a Fortran program with no MAIN__! Workaround: Provide a main program. [Bug 5443] SLES 8 linker may emit errors about truncated relocations. Some tests have been identified where the SLES 8 linker emits errors while linking 64-bit object files: myfile.o(.text+0x136): relocation truncated to fit: R_X86_64_32S myvariable This problem is not seen on SLES 9. Workaround: A possible workaround is -mcmodel=medium [Bug 7728] Inline assembly '=A' contraint not supported The =A constraint indicates that both eax and edx are used to hold a 64-bit value. This allows the 64-bit value to be propagated to ret without having to build it up from two 32-bit parts. The current EKOPath compilers do not implement this constraint correctly. [Bug 595] Some AMD64 glibc distributions include broken obstack code Some glibc distributions for AMD64 include broken obstack code, which incorrectly mixes 32-bit and 64-bit references to stack data. This can cause code that uses obstacks (such as gcc) to crash under some circumstances, and may occur when using either pathcc or other compilers to build code that uses obstacks. There are two possible workarounds: For packages such as gcc, use their internal obstack implementations if available. For example, you can build gcc with -D_LIBC to do this. You can also fix the obstack alignment mask manually before you use any obstacks: > obstack_alignment_mask (obstack_ptr) = 3; [Bug 949] C, C++: complex integer data types not supported Although the PathScale Compiler Suite fully supports floating point complex numbers, it does not support complex integer data types, such as "_Complex int". Complex integers are a gcc "we did it because we could" extension to ISO C99, and we have never seen any uses of them outside of the gcc test suite. [Bug 1066] C, C++: __builtin_strpbrk not implemented correctly The gcc builtin function __builtin_strpbrk (gcc's implementation of the standard strpbrk library function) is not implemented correctly, and causes code to crash at runtime. [Bug 3289] pathf90: writing to a constant passed as an argument causes program to abort Fortran programs that pass constants to subprograms that then try to write to that argument will abort. The Fortran compiler places constants in read-only memory. Workaround: Use the option "-LANG:rw_const=on". Note: The use of this workaround may result in a degradation in performance. [Bug 3697] GNU `used' attribute not supported The GNU 'used' attribute is not currently supported which will result in functions that the compiler perceives as dead code being eliminated. Workaround: Use the '-INLINE:dfe=0' option when compiling the code. [Bug 4716] Improper use of Fortran IOSTAT in data transfer list causes compiler error If an iostat variable is improperly used the compiler may abort with a compiler error similar to: > $ pathf90 foo.f90 -O0 > ### Compiler Error in file foo.f90 > during Lowering phase: > ### copyout_temp_to_var: unexpected type (M) in I/O processing > pathf90 INTERNAL ERROR: /opt/pathscale/lib/2.0/be returned non-zero status 1 An example of the offending statement is: read(cval,fmt='(i4)',iostat=stat) i1 [Bug 5090] Fortran OpenMP: statically nested parallel constructs not supported. The compiler does not support statically nested parallel constructs. Such constructs may cause compilation or runtime failure. For example, the following is not supported: !$OMP PARALLEL $OMP PARALLEL $OMP END PARALLEL $OMP END PARALLEL [Bug 8502] Cray Fortran 'buffer out' extension is not currently supported. The Cray Fortran extension 'buffer out' is not currently supported. [Bug 8627] pathf95 - the use of "save" and "equivalence" on a local array causes the size of the array to be miscalculated The use of "save" and "equivalence" on a local array causes the size of the array to be miscalculated: > INTEGER IBAR(10), IFOO > SAVE IBAR > EQUIVALENCE IBAR(3), IFOO Workaround: Remove the equivalence or place the local array in a common block. [Bug 8769] pathf90 - application segfaults when compiled at -O2 We have found some very rare cases of an MPI program crashing when compiled at -O2 with a segfault. Workaround: In the case we have the following options are a workaround: -O2 -CG:gcm=0:ebo=0 [Bug 9781] OpenMP pragmas cause error line numbers to be off by 1 There is a bug in the pragma processing that causes line numbers to be off by 1 for pragmas in the source code. [Bug 10035] always_inline may yield incorrect results Due to a bug in the GCC 3.3 front-end the always_inline attribute on a function may generate incorrect results at optimization levels greater than -O0. This bug will be fixed when we update to the new GCC front-end. [Bug 10192] pathf95's -cpp may not handle the ## operator correctly The command "pathf95 -cpp" invokes cpp with the -traditional option so that tabs are handled properly. Without -traditional, cpp will convert tabs to single spaces which may corrupt a fixed format file. [Bug 10229] pathCC: Ternary operators may cause the compiler to abort Due to a bug in the GCC 3.3 front end ternary operators may cause the compiler to abort with: > ### Assertion failure at line 5968 of ../../kg++fe/wfe_expr.cxx: > ### Compiler Error during Writing WHIRL file phase: > ### WFE_Expand_Expr: NULL WHIRL tree for cond_expr > pathCC INTERNAL ERROR: /opt/pathscale/lib/2.4/gfecc returned non-zero status 1 Workaround: Convert the ternary operator to an if/else statement. [Bug 9960] C: Source containing GNU SSE intrinsics may fail at -O0 -apo Some GNU SSE intrinsics may not compile with -O0 -apo. Workaround: Use a higher level of optimization or remove autoparallelization for the -O0 compile. [Bug 10097] Compilers do not run on FC5 with SELinux enabled The PathScale compiler suite contains dynamic libraries that may be flagged as security violations when SELinux is enabled. This can occur when running the compiler itself and when running code generated by the compiler. If SELinux is in conforming mode these security violations will prevent the program from running and cause diagnostics such as these: /opt/pathscale/lib/2.4.99/gfec: error while loading shared libraries: /opt/pathscale/lib/2.4.99/32/libmv.so.1: cannot restore segment prot after reloc: Permission denied pathcc INTERNAL ERROR: /opt/pathscale/lib/2.4.99/gfec returned non-zero status 127 Please report this problem to . There are several possible workarounds to this behavior. In order of most secure to least secure they are: 1. Set the security policy on the affected .so files to allow text relocations. This can be achieved with the following shell command by the root user: chcon -t texrel_shlib_t `find /opt/pathscale -type f -name "*.so*" -print` You can check that the setting has been applied correctly using this command: ls --lcontext `find /opt/pathscale -type f -name "*.so*" -print` If you install the PathScale run-time libraries on other machines you will need to reapply the chcon command on those machines. The instructions above assume that you have installed the compiler in the default /opt/pathscale directory, and that all dynamic libraries should be modified. Please adjust the command according to your local environment if different. 2. This example setting is for FC5. Check your distribution for similar settings. Go to Administration->Security Level and Firewall. There, in the SELinux Tab, go to Compatibility and enable the checkbox for "Allow the use of shared libraries with Text Relocation". Then click ok. 3. Set SELinux to permissive mode. It will then print warnings for security violations and allow the program to run. This can typically be achieved by editing the file /etc/selinux/config and changing the definition of SELINUX to permissive, and rebooting. 4. Disable SELinux. This can typically be achieved by editing the file /etc/selinux/config and changing the definition of SELINUX to disabled, and rebooting. [Bug 10388] pathf95: Use of cpp with directives before or between continuations The use of cpp as the preprocessor will cause # lines to be generated. These lines before a continuation statement will cause the compile to fail with an "unexpected syntax" message. [Bug 10562] pathCC with -Wuninitialzed may print mangled names Under some circumstances the C++ compiler when used with -Wuninitialzed may print a mangled name: $ pathCC -O -Wuninitialized -c mangle.cxx Warning: variable _ZZ5mysubvE7mylocal in _Z5mysubv might be used uninitialized g++ does not exhibit this problem: $ g++ -O -Wuninitialized -c mangle.cxx mangle.cxx: In function `int mysub()': mangle.cxx:2: warning: 'mylocal' might be used uninitialized in this function