Optional update for gcc6

SUSE Optional Update: Optional update for gcc6
Announcement ID: SUSE-OU-2016:2319-2
Rating: low
References: #983206
Affected Products:
  • SUSE Linux Enterprise Module for Toolchain 12

  • An update that has one optional fix can now be installed.


    This update ships the GNU Compiler Collection (GCC) in version 6.2.

    This update is shipped in two parts:

    - SUSE Linux Enterprise Server 12 and Desktop:

    The runtime libraries libgcc_s1, libstdc++6, libatomic1, libgomp1,
    libitm1 and some others can now be used by GCC 6 built binaries.

    - SUSE Linux Enterprise 12 Toolchain Module:

    The Toolchain module received the GCC 6 compiler suite with this update.


    - The default mode for C++ is now -std=gnu++14 instead of -std=gnu++98.

    Generic Optimization improvements:

    - UndefinedBehaviorSanitizer gained a new sanitization option,
    -fsanitize=bounds-strict, which enables strict checking of array bounds.
    In particular, it enables -fsanitize=bounds as well as instrumentation
    of flexible array member-like arrays.
    - Type-based alias analysis now disambiguates accesses to different
    pointers. This improves precision of the alias oracle by about 20-30%
    on higher-level C++ programs. Programs doing invalid type punning of
    pointer types may now need -fno-strict-aliasing to work correctly.
    - Alias analysis now correctly supports weakref and alias attributes. This
    makes it possible to access both a variable and its alias in one
    translation unit which is common with link-time optimization.
    - Value range propagation now assumes that the this pointer of C++ member
    functions is non-null. This eliminates common null pointer checks but
    also breaks some non-conforming code-bases (such as Qt-5, Chromium,
    KDevelop). As a temporary work-around -fno-delete-null-pointer-checks
    can be used. Wrong code can be identified by using -fsanitize=undefined.
    - Various Link-time optimization improvements.
    - Inter-procedural optimization improvements:
    - Basic jump threading is now performed before profile construction
    and inline analysis, resulting in more realistic size and time
    estimates that drive the heuristics of the of inliner and function
    cloning passes.
    - Function cloning now more aggressively eliminates unused function
    - Compared to GCC 5, the GCC 6 release series includes a much improved
    implementation of the OpenACC 2.0a specification.

    C language specific improvements:

    - Version 4.5 of the OpenMP specification is now supported in the C and
    C++ compilers.
    - Source locations for the C and C++ compilers are now tracked as ranges,
    rather than just points, making it easier to identify the subexpression
    of interest within a complicated expression. In addition, there is now
    initial support for precise diagnostic locations within strings,
    - Diagnostics can now contain "fix-it hints", which are displayed in
    context underneath the relevant source code.
    - The C and C++ compilers now offer suggestions for misspelled field names.
    - New command-line options have been added for the C and C++ compilers:
    - -Wshift-negative-value warns about left shifting a negative value.
    - -Wshift-overflow warns about left shift overflows. This warning is
    enabled by default. -Wshift-overflow=2 also warns about
    left-shifting 1 into the sign bit.
    - -Wtautological-compare warns if a self-comparison always evaluates
    to true or false. This warning is enabled by -Wall.
    - -Wnull-dereference warns if the compiler detects paths that trigger
    erroneous or undefined behavior due to dereferencing a null pointer.
    This option is only active when -fdelete-null-pointer-checks is
    active, which is enabled by optimizations in most targets. The
    precision of the warnings depends on the optimization options used.
    - -Wduplicated-cond warns about duplicated conditions in an if-else-if
    - -Wmisleading-indentation warns about places where the indentation
    of the code gives a misleading idea of the block structure of the
    code to a human reader. This warning is enabled by -Wall.
    - The C and C++ compilers now emit saner error messages if merge-conflict
    markers are present in a source file.

    C improvements:

    - It is possible to disable warnings when an initialized field
    of a structure or a union with side effects is being overridden when
    using designated initializers via a new warning option
    - A new type attribute scalar_storage_order applying to structures and
    unions has been introduced. It specifies the storage order (aka
    endianness) in memory of scalar fields in structures or unions.

    C++ improvements:

    - The default mode has been changed to -std=gnu++14.
    - C++ Concepts are now supported when compiling with -fconcepts.
    - -flifetime-dse is more aggressive in dead-store elimination in
    situations where a memory store to a location precedes a constructor to
    that memory location.
    - G++ now supports C++17 fold expressions, u8 character literals, extended
    static_assert, and nested namespace definitions.
    - G++ now allows constant evaluation for all non-type template arguments.
    - G++ now supports C++ Transactional Memory when compiling with -fgnu-tm.

    libstdc++ improvements:

    - Extensions to the C++ Library to support mathematical special functions
    (ISO/IEC 29124:2010), thanks to Edward Smith-Rowland.
    - Experimental support for C++17.
    - An experimental implementation of the File System TS.
    - Experimental support for most features of the second version of the
    Library Fundamentals TS. This includes polymorphic memory resources and
    array support in shared_ptr, thanks to Fan You.
    - Some assertions checked by Debug Mode can now also be enabled by
    _GLIBCXX_ASSERTIONS. The subset of checks enabled by the new macro have
    less run-time overhead than the full _GLIBCXX_DEBUG checks and don't
    affect the library ABI, so can be enabled per-translation unit.

    Fortran improvements:

    - Fortran 2008 SUBMODULE support.
    - Fortran 2015 EVENT_TYPE, EVENT_POST, EVENT_WAIT, and EVENT_QUERY support.
    - Improved support for Fortran 2003 deferred-length character variables.
    - Improved support for OpenMP and OpenACC.
    - The MATMUL intrinsic is now inlined for straightforward cases if
    front-end optimization is active. The maximum size for inlining can be
    set to n with the -finline-matmul-limit=n option and turned off with
    - The -Wconversion-extra option will warn about REAL constants which have
    excess precision for their kind.
    - The -Winteger-division option has been added, which warns about
    divisions of integer constants which are truncated. This option is
    included in -Wall by default.

    Architecture improvements:

    - AArch64 received a lot of improvements.

    IA-32/x86-64 improvements:

    - GCC now supports the Intel CPU named Skylake with AVX-512 extensions
    through -march=skylake-avx512. The switch enables the following ISA
    extensions: AVX-512F, AVX512VL, AVX-512CD, AVX-512BW, AVX-512DQ.
    - Support for new AMD instructions monitorx and mwaitx has been added.
    This includes new intrinsic and built-in support. It is enabled through
    option -mmwaitx. The instructions monitorx and mwaitx implement the same
    functionality as the old monitor and mwait instructions. In addition
    mwaitx adds a configurable timer. The timer value is received as third
    argument and stored in register %ebx.
    - x86-64 targets now allow stack realignment from a word-aligned stack
    pointer using the command-line option -mstackrealign or __attribute__
    ((force_align_arg_pointer)). This allows functions compiled with a
    vector-aligned stack to be invoked from objects that keep only
    - Support for address spaces __seg_fs, __seg_gs, and __seg_tls. These can
    be used to access data via the %fs and %gs segments without having to
    resort to inline assembly.
    - Support for AMD Zen (family 17h) processors is now available through the
    -march=znver1 and -mtune=znver1 options.

    PowerPC / PowerPC64 / RS6000 improvements:

    - PowerPC64 now supports IEEE 128-bit floating-point using the __float128
    data type. In GCC 6, this is not enabled by default, but you can enable
    it with -mfloat128. The IEEE 128-bit floating-point support requires the
    use of the VSX instruction set. IEEE 128-bit floating-point values are
    passed and returned as a single vector value. The software emulator for
    IEEE 128-bit floating-point support is only built on PowerPC GNU/Linux
    systems where the default CPU is at least power7. On future ISA 3.0
    systems (POWER 9 and later), you will be able to use the
    -mfloat128-hardware option to use the ISA 3.0 instructions that support
    IEEE 128-bit floating-point. An additional type (__ibm128) has been
    added to refer to the IBM extended double type that normally implements
    long double. This will allow for a future transition to implementing
    long double with IEEE 128-bit floating-point.
    - Basic support has been added for POWER9 hardware that will use the
    recently published OpenPOWER ISA 3.0 instructions. The following new
    switches are available:
    - -mcpu=power9: Implement all of the ISA 3.0 instructions supported
    by the compiler.
    - -mtune=power9: In the future, apply tuning for POWER9 systems.
    Currently, POWER8 tunings are used.
    - -mmodulo: Generate code using the ISA 3.0 integer instructions
    (modulus, count trailing zeros, array index support, integer multiply/add).
    - -mpower9-fusion: Generate code to suitably fuse instruction
    sequences for a POWER9 system.
    - -mpower9-dform: Generate code to use the new D-form
    (register+offset) memory instructions for the vector registers.
    - -mpower9-vector: Generate code using the new ISA 3.0 vector (VSX or
    Altivec) instructions.
    - -mpower9-minmax: Reserved for future development.
    - -mtoc-fusion: Keep TOC entries together to provide more fusion
    - New constraints have been added to support IEEE 128-bit floating-point
    and ISA 3.0 instructions.
    - Support has been added for __builtin_cpu_is() and
    __builtin_cpu_supports(), allowing for very fast access to AT_PLATFORM,
    AT_HWCAP, and AT_HWCAP2 values. This requires use of glibc 2.23 or later.
    - All hardware transactional memory builtins now correctly behave as
    memory barriers. Programmers can use #ifdef __TM_FENCE__ to determine
    whether their "old" compiler treats the builtins as barriers.
    - Split-stack support has been added for gccgo on PowerPC64 for both big-
    and little-endian (but not for 32-bit). The gold linker from at least
    binutils 2.25.1 must be available in the PATH when configuring and
    building gccgo to enable split stack. (The requirement for binutils
    2.25.1 applies to PowerPC64 only.) The split-stack feature allows a
    small initial stack size to be allocated for each goroutine, which
    increases as needed.
    - GCC on PowerPC now supports the standard lround function.
    - The "q", "S", "T", and "t" asm-constraints have been removed.
    - The "b", "B", "m", "M", and "W" format modifiers have been removed.

    S/390, System z, IBM z Systems improvements:

    - Support for the IBM z13 processor has been added. When using the
    -march=z13 option, the compiler will generate code making use of the new
    instructions and registers introduced with the vector extension
    facility. The -mtune=z13 option enables z13 specific instruction
    scheduling without making use of new instructions.
    - Compiling code with -march=z13 reduces the default alignment of vector
    types bigger than 8 bytes to 8. This is an ABI change and care must be
    taken when linking modules compiled with different arch levels which
    interchange variables containing vector type values. For newly compiled
    code the GNU linker will emit a warning.
    - The -mzvector option enables a C/C++ language extension. This extension
    provides a new keyword vector which can be used to define vector type
    variables. (Note: This is not available when enforcing strict standard
    compliance e.g. with -std=c99. Either enable GNU extensions with e.g.
    -std=gnu99 or use __vector instead of vector.)
    - Additionally a set of overloaded builtins is provided which is partially
    compatible to the PowerPC Altivec builtins. In order to make use of
    these builtins the vecintrin.h header file needs to be included.
    - The new command line options -march=native, and -mtune=native are now
    available on native IBM z Systems. Specifying these options will cause
    GCC to auto-detect the host CPU and rewrite these options to the optimal
    setting for that system. If GCC is unable to detect the host CPU these
    options have no effect.
    - The IBM z Systems port now supports target attributes and pragmas.
    Please refer to the documentation for details of available attributes
    and pragmas as well as usage instructions.
    - -fsplit-stack is now supported as part of the IBM z Systems port. This
    feature requires a recent gold linker to be used.
    - Support for the g5 and g6 -march=/-mtune= CPU level switches has been
    deprecated and will be removed in a future GCC release. -m31 from now
    on defaults to -march=z900 if not specified otherwise. -march=native on
    a g5/g6 machine will default to -march=z900.

    An even more detailed list of features can be found at:

    Patch Instructions:

    To install this SUSE Optional Update use YaST online_update.
    Alternatively you can run the command listed for your product:

    • SUSE Linux Enterprise Module for Toolchain 12:
      zypper in -t patch SUSE-SLE-Module-Toolchain-12-2016-1358=1

    To bring your system up-to-date, use "zypper patch".

    Package List:

    • SUSE Linux Enterprise Module for Toolchain 12 (aarch64):
      • cpp6-6.2.1+r239768-2.4
      • cpp6-debuginfo-6.2.1+r239768-2.4
      • gcc6-6.2.1+r239768-2.4
      • gcc6-c++-6.2.1+r239768-2.4
      • gcc6-c++-debuginfo-6.2.1+r239768-2.4
      • gcc6-debuginfo-6.2.1+r239768-2.4
      • gcc6-debugsource-6.2.1+r239768-2.4
      • gcc6-fortran-6.2.1+r239768-2.4
      • gcc6-fortran-debuginfo-6.2.1+r239768-2.4
      • gcc6-locale-6.2.1+r239768-2.4
      • libstdc++6-devel-gcc6-6.2.1+r239768-2.4
    • SUSE Linux Enterprise Module for Toolchain 12 (noarch):
      • gcc6-info-6.2.1+r239768-2.4