GCC

Software Screenshot:
GCC
Software Details:
Version: 8.2.0 updated
Upload Date: 16 Aug 18
Developer: The GCC Team
Distribution Type: Freeware
Downloads: 108

Rating: 3.0/5 (Total Votes: 3)

GCC (GNU Compiler Collection) is an open source command-line software designed to act as a compiler for GNU/Linux and BSD-based operating systems. It includes front-ends for numerous programming languages, including Objective-C, Go, C++, Java, C, Ada, and Fortran.

Features at a glance

With GCC you can configure, compile and install GNU/Linux applications in Linux or BSD operating systems using only the source archive of the respective program. However, users don’t need to interact with the compiler, as this is done automatically by the configure and make scripts.

The project also includes libraries for various programming languages, such as libstdc and libgcj, and like most GNU software, it has to be configured before it can be built and installed on your computer.

It can also display the full path to a specific library, folders in the compiler's search path, full path to a specific component, target libraries directory, sysroot suffix that is used to find headers, and target's normalized GNU triplet.

In addition, there are various other options for passing certain comma-separated options and arguments on to the assembler, preprocessor and linker, compile and assemble without linking, create a shared library, and many others.

Designed for the GNU operating system

Being originally written as the main compiler for the GNU operating system, GCC (GNU Compiler Collection) was developed to be 100% free software and it is installed by default on any Linux distribution.

The software is also used by Open Source developers to compile their programs. The command-line comes with several options, among which we can mention the ability to display the compiler’s target processor, as well as the relative path to OS libraries.

Bottom line

All in all, GCC is one of the most essential components of any GNU/Linux operating system. Not only that we can’t even imagine a world without it, but GCC is the main reason behind the entire Open Source ecosystem.

What is new in this release:

  • GCC 7.3 is a bug-fix release from the GCC 7 branch containing important fixes for regressions and serious bugs in GCC 7.2 with more than 99 bugs fixed since the previous release.
  • This release includes code generation options to mitigate Spectre Variant 2 (CVE 2017-5715) for the x86 and powerpc targets.

What is new in version 8.1.0:

  • GCC 7.3 is a bug-fix release from the GCC 7 branch containing important fixes for regressions and serious bugs in GCC 7.2 with more than 99 bugs fixed since the previous release.
  • This release includes code generation options to mitigate Spectre Variant 2 (CVE 2017-5715) for the x86 and powerpc targets.

What is new in version :

  • GCC 7.1 is a major release containing substantial new functionality not available in GCC 6.x or previous GCC releases. The C++ frontend now has experimental support for all of the current C++17 draft, with the -std=c++1z and -std=gnu++1z options, and the libstdc++ library has most of the C++17 draft library features implemented too. This releases features various improvements in the emitted diagnostics, including improved locations, location ranges, suggestions for misspelled identifiers, option names, fix-it hints and various new warnings have been added. The optimizers have been improved, with improvements appearing in all of intra- and inter-procedural optimizations, link time optimizations and various target backends, including, but not limited to, additions of store merging pass, code hoisting optimization, loop splitting, and shrink wrapping improvements. The Address Sanitizer can now report uses of variables after leaving their scope. GCC now can be configured for OpenMP 4.5 offloading to NVidia PTX GPGPUs.

What is new in version 6.3.0:

  • GCC 6.3 is a bug-fix release from the GCC 6 branch containing important fixes for regressions and serious bugs in GCC 6.2 with more than 79 bugs fixed since the previous release.

What is new in version 6.2.0:

  • This release is a bug-fix release, containing fixes for regressions in GCC 5.2 relative to previous releases of GCC.

What is new in version 6.1.0:

  • This release is a bug-fix release, containing fixes for regressions in GCC 5.2 relative to previous releases of GCC.

What is new in version 5.3.0:

  • This release is a bug-fix release, containing fixes for regressions in GCC 5.2 relative to previous releases of GCC.

What is new in version 5.2.0:

  • This release is a bug-fix release, containing fixes for regressions in GCC 5.1 relative to previous releases of GCC.

What is new in version 5.1.0:

  • The C++ front-end now has full C++14 language support and the Standard C++ Library has full C++11 support and experimental full C++14 support. The full C++11 support has been made possible by adopting Dual ABI, see https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html for more details.
  • The C front-end now defaults to C11 mode with GNU extensions, which affects semantics of the inline keyword and brings several other user visible changes, see https://gcc.gnu.org/gcc-5/porting_to.html for more details.
  • GCC 5.1 contains various interprocedural optimization improvements, e.g. a new IPA Identical Code Folding pass and various LTO improvements, e.g. ODR based merging of C++ types, see http://hubicka.blogspot.cz/2015/04/GCC5-IPA-LTO-news.html for more details.
  • The GCC 5.1 Local Register Allocator now contains a rematerialization subpass, on i?86/x86-64 is able to reuse the PIC hard register to improve performance of position independent code, there is a simple interprocedural RA pass and various other register allocation improvements were added.
  • GCC 5.1 adds partial support for the OpenACC standard, support for OpenMP 4.0 offloading to Intel's upcoming Xeon Phi accelerators and support for OpenACC offloading to PTX. The Undefined Behavior Sanitizer in GCC has been extended by adding various new runtime checks. An experimental GCC JIT library has been added in GCC 5.1.

What is new in version 4.8.4:

  • General Optimizer Improvements:
  • AddressSanitizer, a fast memory error detector, is now available on ARM.
  • UndefinedBehaviorSanitizer (ubsan), a fast undefined behavior detector, has been added and can be enabled via -fsanitize=undefined. Various computations will be instrumented to detect undefined behavior at runtime. UndefinedBehaviorSanitizer is currently available for the C and C++ languages.
  • Link-time optimization (LTO) improvements:
  • Type merging was rewritten. The new implementation is significantly faster and uses less memory.
  • Better partitioning algorithm resulting in less streaming during link time.
  • Early removal of virtual methods reduces the size of object files and improves link-time memory usage and compile time.
  • Function bodies are now loaded on-demand and released early improving overall memory usage at link time.
  • C++ hidden keyed methods can now be optimized out.
  • When using a linker plugin, compiling with the -flto option now generates slim object files (.o) which only contain intermediate language representation for LTO. Use -ffat-lto-objects to create files which contain additionally the object code. To generate static libraries suitable for LTO processing, use gcc-ar and gcc-ranlib; to list symbols from a slim object file use gcc-nm. (This requires that ar, ranlib and nm have been compiled with plugin support.)
  • Memory usage building Firefox with debug enabled was reduced from 15GB to 3.5GB; link time from 1700 seconds to 350 seconds.
  • Inter-procedural optimization improvements:
  • New type inheritance analysis module improving devirtualization. Devirtualization now takes into account anonymous name-spaces and the C++11 final keyword.
  • New speculative devirtualization pass (controlled by -fdevirtualize-speculatively.
  • Calls that were speculatively made direct are turned back to indirect where direct call is not cheaper.
  • Local aliases are introduced for symbols that are known to be semantically equivalent across shared libraries improving dynamic linking times.
  • Feedback directed optimization improvements:
  • Profiling of programs using C++ inline functions is now more reliable.
  • New time profiling determines typical order in which functions are executed.
  • A new function reordering pass (controlled by -freorder-functions) significantly reduces startup time of large applications. Until binutils support is completed, it is effective only with link-time optimization.
  • Feedback driven indirect call removal and devirtualization now handle cross-module calls when link-time optimization is enabled.
  • New Languages and Language specific improvements:
  • Version 4.0 of the OpenMP specification is now supported in the C and C++ compilers and starting with the 4.9.1 release also in the Fortran compiler. The new -fopenmp-simd option can be used to enable OpenMP's SIMD directives, while ignoring other OpenMP directives. The new -fsimd-cost-model= option permits to tune the vectorization cost model for loops annotated with OpenMP and Cilk Plus simd directives; -Wopenmp-simd warns when the current cost model overrides simd directives set by the user.
  • The -Wdate-time option has been added for the C, C++ and Fortran compilers, which warns when the __DATE__, __TIME__ or __TIMESTAMP__ macros are used. Those macros might prevent bit-wise-identical reproducible compilations.
  • Ada:
  • GNAT switched to Ada 2012 instead of Ada 2005 by default.
  • C family:
  • Support for colorizing diagnostics emitted by GCC has been added. The -fdiagnostics-color=auto will enable it when outputting to terminals, -fdiagnostics-color=always unconditionally. The GCC_COLORS environment variable can be used to customize the colors or disable coloring. If GCC_COLORS variable is present in the environment, the default is -fdiagnostics-color=auto, otherwise -fdiagnostics-color=never.
  • Sample diagnostics output:
  • $ g++ -fdiagnostics-color=always -S -Wall test.C
  • test.C: In function ‘int foo()':
  • test.C:1:14: warning: no return statement in function returning non-void [-Wreturn-type]
  • int foo () { }
  • test.C:2:46: error: template instantiation depth exceeds maximum of 900 (use -ftemplate-depth= to increase the maximum) instantiating ‘struct X'
  • template struct X { static const int value = X::value; }; template struct X;
  • test.C:2:46: recursively required from ‘const int X::value'
  • test.C:2:46: required from ‘const int X::value'
  • test.C:2:88: required from here
  • test.C:2:46: error: incomplete type ‘X' used in nested name specifier
  • With the new #pragma GCC ivdep, the user can assert that there are no loop-carried dependencies which would prevent concurrent execution of consecutive iterations using SIMD (single instruction multiple data) instructions.
  • Support for Cilk Plus has been added and can be enabled with the -fcilkplus option. Cilk Plus is an extension to the C and C++ languages to support data and task parallelism. The present implementation follows ABI version 1.2; all features but _Cilk_for have been implemented.
  • ISO C11 atomics (the _Atomic type specifier and qualifier and the header) are now supported.
  • ISO C11 generic selections (_Generic keyword) are now supported.
  • ISO C11 thread-local storage (_Thread_local, similar to GNU C __thread) is now supported.
  • ISO C11 support is now at a similar level of completeness to ISO C99 support: substantially complete modulo bugs, extended identifiers (supported except for corner cases when -fextended-identifiers is used), floating-point issues (mainly but not entirely relating to optional C99 features from Annexes F and G) and the optional Annexes K (Bounds-checking interfaces) and L (Analyzability).
  • A new C extension __auto_type provides a subset of the functionality of C++11 auto in GNU C.
  • C++:
  • The G++ implementation of C++1y return type deduction for normal functions has been updated to conform to N3638, the proposal accepted into the working paper. Most notably, it adds decltype(auto) for getting decltype semantics rather than the template argument deduction semantics of plain auto:
  • int& f();
  • auto i1 = f(); // int
  • decltype(auto) i2 = f(); // int&
  • G++ supports C++1y lambda capture initializers:
  • [x = 42]{ ... };
  • Actually, they have been accepted since GCC 4.5, but now the compiler doesn't warn about them with -std=c++1y, and supports parenthesized and brace-enclosed initializers as well.
  • G++ supports C++1y variable length arrays. G++ has supported GNU/C99-style VLAs for a long time, but now additionally supports initializers and lambda capture by reference. In C++1y mode G++ will complain about VLA uses that are not permitted by the draft standard, such as forming a pointer to VLA type or applying sizeof to a VLA variable. Note that it now appears that VLAs will not be part of C++14, but will be part of a separate document and then perhaps C++17.
  • void f(int n) {
  • int a[n] = { 1, 2, 3 }; // throws std::bad_array_length if n < 3
  • [&a]{ for (int i : a) { cout

What is new in version 4.9.1:

  • GCC 4.9.1 is a bug-fix release from the GCC 4.9 branch containing important fixes for regressions and serious bugs in GCC 4.9.0 with more than 88 bugs fixed since the previous release. In addition to that, GCC 4.9.1 release supports OpenMP 4.0 also in Fortran, rather than just in C and C++.

What is new in version 4.9.0:

  • General Optimizer Improvements:
  • AddressSanitizer, a fast memory error detector, is now available on ARM.
  • UndefinedBehaviorSanitizer (ubsan), a fast undefined behavior detector, has been added and can be enabled via -fsanitize=undefined. Various computations will be instrumented to detect undefined behavior at runtime. UndefinedBehaviorSanitizer is currently available for the C and C++ languages.
  • Link-time optimization (LTO) improvements:
  • Type merging was rewritten. The new implementation is significantly faster and uses less memory.
  • Better partitioning algorithm resulting in less streaming during link time.
  • Early removal of virtual methods reduces the size of object files and improves link-time memory usage and compile time.
  • Function bodies are now loaded on-demand and released early improving overall memory usage at link time.
  • C++ hidden keyed methods can now be optimized out.
  • When using a linker plugin, compiling with the -flto option now generates slim objects files (.o) which only contain intermediate language representation for LTO. Use -ffat-lto-objects to create files which contain additionally the object code. To generate static libraries suitable for LTO processing, use gcc-ar and gcc-ranlib; to list symbols from a slim object file use gcc-nm. (Requires that ar, ranlib and nm have been compiled with plugin support.)
  • Memory usage building Firefox with debug enabled was reduced from 15GB to 3.5GB; link time from 1700 seconds to 350 seconds.
  • Inter-procedural optimization improvements:
  • New type inheritance analysis module improving devirtualization. Devirtualization now takes into account anonymous name-spaces and the C++11 final keyword.
  • New speculative devirtualization pass (controlled by -fdevirtualize-speculatively.
  • Calls that were speculatively made direct are turned back to indirect where direct call is not cheaper.
  • Local aliases are introduced for symbols that are known to be semantically equivalent across shared libraries improving dynamic linking times.
  • Feedback directed optimization improvements:
  • Profiling of programs using C++ inline functions is now more reliable.
  • New time profiling determines typical order in which functions are executed.
  • A new function reordering pass (controlled by -freorder-functions) significantly reduces startup time of large applications. Until binutils support is completed, it is effective only with link-time optimization.
  • Feedback driven indirect call removal and devirtualization now handle cross-module calls when link-time optimization is enabled.
  • New Languages and Language specific improvements:
  • Version 4.0 of the OpenMP specification is now supported for the C and C++ compilers. The new -fopenmp-simd option can be used to enable OpenMP's SIMD directives, while ignoring other OpenMP directives. The new -fsimd-cost-model= option permits to tune the vectorization cost model for loops annotated with OpenMP and Cilk Plus simd directives; -Wopenmp-simd warns when the current costmodel overrides simd directives set by the user.
  • The -Wdate-time option has been added for the C, C++ and Fortran compilers, which warns when the __DATE__, __TIME__ or __TIMESTAMP__ macros are used. Those macros might prevent bit-wise-identical reproducible compilations.
  • Ada:
  • GNAT switched to Ada 2012 instead of Ada 2005 by default.
  • C family:
  • Support for colorizing diagnostics emitted by GCC has been added. The -fdiagnostics-color=auto will enable it when outputting to terminals, -fdiagnostics-color=always unconditionally. The GCC_COLORS environment variable can be used to customize the colors or disable coloring. If GCC_COLORS variable is present in the environment, the default is -fdiagnostics-color=auto, otherwise -fdiagnostics-color=never.
  • Sample diagnostics output:
  • $ g++ -fdiagnostics-color=always -S -Wall test.C
  • test.C: In function ‘int foo()':
  • test.C:1:14: warning: no return statement in function returning non-void [-Wreturn-type]
  • int foo () { }
  • test.C:2:46: error: template instantiation depth exceeds maximum of 900 (use -ftemplate-depth= to increase the maximum) instantiating ‘struct X'
  • template struct X { static const int value = X::value; }; template struct X;
  • test.C:2:46: recursively required from ‘const int X::value'
  • test.C:2:46: required from ‘const int X::value'
  • test.C:2:88: required from here
  • test.C:2:46: error: incomplete type ‘X' used in nested name specifier
  • With the new #pragma GCC ivdep, the user can assert that there are no loop-carried dependencies which would prevent concurrent execution of consecutive iterations using SIMD (single instruction multiple data) instructions.
  • Support for Cilk Plus has been added and can be enabled with the -fcilkplus option. Cilk Plus is an extension to the C and C++ languages to support data and task parallelism. The present implementation follows ABI version 1.2; all features but _Cilk_for have been implemented.
  • ISO C11 atomics (the _Atomic type specifier and qualifier and the header) are now supported.
  • ISO C11 generic selections (_Generic keyword) are now supported.
  • ISO C11 thread-local storage (_Thread_local, similar to GNU C __thread) is now supported.
  • ISO C11 support is now at a similar level of completeness to ISO C99 support: substantially complete modulo bugs, extended identifiers (supported except for corner cases when -fextended-identifiers is used), floating-point issues (mainly but not entirely relating to optional C99 features from Annexes F and G) and the optional Annexes K (Bounds-checking interfaces) and L (Analyzability).
  • A new C extension __auto_type provides a subset of the functionality of C++11 auto in GNU C.
  • C++:
  • The G++ implementation of C++1y return type deduction for normal functions has been updated to conform to N3638, the proposal accepted into the working paper. Most notably, it adds decltype(auto) for getting decltype semantics rather than the template argument deduction semantics of plain auto:
  • int& f();
  • auto i1 = f(); // int
  • decltype(auto) i2 = f(); // int&
  • G++ supports C++1y lambda capture initializers:
  • [x = 42]{ ... };
  • Actually, they have been accepted since GCC 4.5, but now the compiler doesn't warn about them with -std=c++1y, and supports parenthesized and brace-enclosed initializers as well.
  • G++ supports C++1y variable length arrays. G++ has supported GNU/C99-style VLAs for a long time, but now additionally supports initializers and lambda capture by reference. In C++1y mode G++ will complain about VLA uses that are not permitted by the draft standard, such as forming a pointer to VLA type or applying sizeof to a VLA variable. Note that it now appears that VLAs will not be part of C++14, but will be part of a separate document and then perhaps C++17.
  • void f(int n) {
  • int a[n] = { 1, 2, 3 }; // throws std::bad_array_length if n < 3
  • [&a]{ for (int i : a) { cout

Similar Software

Jikes RVM
Jikes RVM

15 Apr 15

Shed Skin
Shed Skin

15 Apr 15

Perl
Perl

17 Aug 18

Comments to GCC

1 Comments
  • http://www.eduwizzonlinetrainings.com 29 Dec 17
    EduwizzOnlineTraining is one of the Best Online Training Institute in Hyderabad, Bangalore. Eduwizz provide courses like Hybris Development, WebSphere Commerce Server,Blockchain Training,Hyperledger Fabric Development ,Ethereum Development ,Commvault Training, Devops , Netapps , Mulesoft ESB ,Machine Learning,Data Science , Internet of Things , Hybris ,Angular JS , Node JS , Express JS , Business Analyst, Selenium testing with webdriver, Guidewire ,Adobe, RPA ,TSM, EMC...etc
Add Comment
Turn on images!