C and C++


LANG.EXT.GNU : GNU Extension

Summary

A use of one of the following GNU extensions.

Properties

Class Name GNU Extension
Significance style
Mnemonic LANG.EXT.GNU
Categories
MisraC2023 MisraC2023:1.2 Language extensions should not be used
Misra2012 Misra2012:1.2 Language extensions should not be used
Misra2004 Misra2004:1.1 All code shall conform to ISO/IEC 9899:1990 "Programming languages C", amended and corrected by ISO/IEC 9899/COR1:1995, ISO/IEC 9899/AMD1:1995, and ISO/IEC 9899/COR2:1996
  Misra2004:2.2 Source code shall only use /* ... */ style comments
JPL JPL:1 Do not stray outside the language definition.
Availability Available for C and C++.
Enabling Checks for this warning class are disabled by default, and require the unnormalized C ASTs for the project. To enable them, add the following WARNING_FILTER rule and RETAIN_UNNORMALIZED_C_AST specification to the project configuration file.
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="GNU Extension"
Note that retaining the unnormalized ASTs will increase the disk space used to store the project representation, and may make the analysis take longer.

Example

#include <stddef.h>

typedef int myvector __attribute__ ((vector_size (16))); /* 'GNU Extension' warning issued here
                                                          * (vector type) */ 

struct S { int a; int b; };

double EXT_GNU(int a, int b, _Complex double comp){
    int i=3;
    int j,k;
    double d;
    _Complex double c;
    void * l;  

    switch (a){                            
      case 0 ... 3: break;                         /* 'GNU Extension' warning issued here
                                                    * (switch case range) */ 
          /* ... */};

    d = __real comp;                               /* 'GNU Extension' warning issued here
                                                    * (and also for __real__, __imag, __imag__, and ~) */ 
 
    __extension__ i++;                             /* 'GNU Extension' warning issued here
                                                    * (__extension__ keyword) */ 

    i = ({j=i; while (j<100) j+=(int)d; j; });     /* 'GNU Extension' warning issued here
                                                    * (statement expression) */ 

    l = &&label1;                                  /* 'GNU Extension' warning issued here
                                                    * (taking label address) */ 

    goto *l;                                       /* 'GNU Extension' warning issued here
                                                    * (computed goto) */ 
  label1 : i += a;
  label2 : i += b;
                   
    i += __builtin_offsetof(struct S, b);          /* 'GNU Extension' warning issued here
                                                    * (__builtin_offsetof()) */ 

    __builtin_types_compatible_p(int, short);      /* 'GNU Extension' warning issued here
                                                    * (__builtin_types_compatible_p()) */ 

    asm ("mov %1, %0" : "=r" (i) : "r" (j));       /* 'GNU Extension' warning issued here
                                                    * (extended asm) */
    return i;
}

Relevant Configuration File Parameters

The following configuration file parameters affect checks for this warning class.