General GCC Support Notes

  • See GNU GCC for the list of supported GCC-based compilers.
  • You can use a custom GCC compiler build that is based on one of the the supported GCC compilers. However, heavily modified GCC-based compilers or non-standard compiler extensions may not be supported.
  • To use a  GCC-based compiler, ensure that the directory that contains the GCC executable is included in the $PATH environment variable.

Unsupported Compiler Extensions for GCC Compilers

The following sections specifies the GCC compiler extensions that are not supported by C/C++test. The limitations apply to the supported GCC-based compilers, as well as custom GCC compiler builds. See http://gcc.gnu.org/onlinedocs for more information about GNU compiler extensions.

GCC 5.x

Unsupported Features

  • Arrays of Variable Length as Arguments to Functions

    void tester (int len, char data[len][len])
    {
    }
  • Complex Numbers
  • Nested Functions
  • Virtual Function With Overridden Return Type

    class A
    {
    	public:
    		virtual void* a();
    };
    class B:
    	public A
    {
    	public:
    		virtual B* a(); // Return type changed from void* to (compatible) B*.
    			// It is ok in GCC but EDG will complain
    };
  • Java Extensions (like extern "Java", java attributes)
  • Offsetof extension
  • Restricting Pointer Aliasing for Member functions

    class T
    {
    	public:
    		void fn();
    };
    void T::fn () __restrict__ // EDG won't compile this
    {
    }

Incompatibilities

  • Function Attributes

    void fatal () __attribute__ ((noreturn));
    void fatal () { }
    typedef void voidfn ();
    volatile voidfn fatal; // EDG: declaration is incompatible with
    // "void fatal()"
  • Friend Declarations

    class A;
    namespace N {
    	class B {
    		friend class A; // In GCC it refers to N::A (which has not been
    			// declared yet), but EDG refers to ::A
    		int _private;
    };
    	class A {
    		void foo()
    		{
    			B b;
    			b._private = 0; // EDG inaccessible field.
    		}
    	};
    }

GCC 6.x

Same as for GCC 5.x.

GCC 7.x

Same as for GCC 5.x.

GCC 8.x

Same as for GCC 5.x.

Some C++20 features are not supported.

GCC 9.x

Same as for GCC 5.x.

Some C++20 features are not supported.

GCC 10.x

Same as for GCC 5.x.

Some C++20 features are not supported.

GCC 11.x

Same as for GCC 5.x.

Some C++20 features are not supported.

C++23 features are not supported.

GCC 12.x

Same as for GCC 5.x.

Some C++20 features are not supported.

C++23 features are not supported.

  • No labels