1*53ee8cc1Swenshuai.xi 2*53ee8cc1Swenshuai.xi// co-gnu3.lnt 3*53ee8cc1Swenshuai.xi// Compiler Options for GCC versions 2.95.3 and later 4*53ee8cc1Swenshuai.xi 5*53ee8cc1Swenshuai.xi// This file contains options to allow FlexeLint to process source 6*53ee8cc1Swenshuai.xi// files for the Gnu compiler (GCC). 7*53ee8cc1Swenshuai.xi// 8*53ee8cc1Swenshuai.xi// flint co-gnu3.lnt source-file(s) 9*53ee8cc1Swenshuai.xi// 10*53ee8cc1Swenshuai.xi// If you are using GCC on some other system you will need to change 11*53ee8cc1Swenshuai.xi// the following options: 12*53ee8cc1Swenshuai.xi 13*53ee8cc1Swenshuai.xi-cgnu // Notifies FlexeLint that gcc is being used. 14*53ee8cc1Swenshuai.xi// +fus // activate this option if your compiler supports an assumed 15*53ee8cc1Swenshuai.xi // using namespace std at the beginning of processing 16*53ee8cc1Swenshuai.xi 17*53ee8cc1Swenshuai.xi// Begin: System Dependent Options 18*53ee8cc1Swenshuai.xi// ------------------------------- 19*53ee8cc1Swenshuai.xi 20*53ee8cc1Swenshuai.xi-d__i386__ // a define of this type is machine-dependent 21*53ee8cc1Swenshuai.xi // modify if you are running on non-intel hardware. 22*53ee8cc1Swenshuai.xi-d__linux__ // Linux define! 23*53ee8cc1Swenshuai.xi//-d__mc68000__ //a machine dependent define 24*53ee8cc1Swenshuai.xi 25*53ee8cc1Swenshuai.xi-di386=1 // needed for some Unix's 26*53ee8cc1Swenshuai.xi-a#machine(i386) // #assert's machine(i386) (SVR4 facility). 27*53ee8cc1Swenshuai.xi 28*53ee8cc1Swenshuai.xi// To let FlexeLint know where to find header files you need one 29*53ee8cc1Swenshuai.xi// or more -i options where each -i option is followed immediately 30*53ee8cc1Swenshuai.xi// by a single directory. 31*53ee8cc1Swenshuai.xi// For example: -i/usr/include 32*53ee8cc1Swenshuai.xi// Use 'cpp -v emptyfile.cpp' to get a list of C++ search directories. 33*53ee8cc1Swenshuai.xi// Use 'cpp -v emptyfile.c' to get a list of C search directories. 34*53ee8cc1Swenshuai.xi 35*53ee8cc1Swenshuai.xi// You may use the following option to include standard C headers. 36*53ee8cc1Swenshuai.xi// This would normally come before other -i options. 37*53ee8cc1Swenshuai.xi 38*53ee8cc1Swenshuai.xi-i/FlexeLint/supp/ansi // This is offered as a collection of ... 39*53ee8cc1Swenshuai.xi // ANSI (i.e ISO) header files. Replace the word "FlexeLint" 40*53ee8cc1Swenshuai.xi // with the name of the directory in which FlexeLint has 41*53ee8cc1Swenshuai.xi // been installed. Note, you might want to replace "ansi" 42*53ee8cc1Swenshuai.xi // with "posix". 43*53ee8cc1Swenshuai.xi 44*53ee8cc1Swenshuai.xi-si4 // int's are typically 4 bytes 45*53ee8cc1Swenshuai.xi-sp4 // ptr's are typically 4 bytes 46*53ee8cc1Swenshuai.xi 47*53ee8cc1Swenshuai.xi// ----------------------------- 48*53ee8cc1Swenshuai.xi// End: System Dependent Options 49*53ee8cc1Swenshuai.xi 50*53ee8cc1Swenshuai.xi+cpp(.cc,.C) // extensions for C++ that are commonly used in addition 51*53ee8cc1Swenshuai.xi // to the default extensions of .cpp and .cxx 52*53ee8cc1Swenshuai.xi+fld // support gcc's label designators 53*53ee8cc1Swenshuai.xi 54*53ee8cc1Swenshuai.xi // while processing library headers 55*53ee8cc1Swenshuai.xi-wlib(1) // sets the warning level within library headers to 1 56*53ee8cc1Swenshuai.xi // (no warnings, just syntax errors). Comment out if you 57*53ee8cc1Swenshuai.xi // are actually linting library headers. This 58*53ee8cc1Swenshuai.xi // option makes obsolete options of the form -elib(axxx) where 59*53ee8cc1Swenshuai.xi // xxx >= 400 which may be retained for historical reasons. 60*53ee8cc1Swenshuai.xi-elib(15) // redeclaration of symbol 61*53ee8cc1Swenshuai.xi-elib(516) // lots of redeclarations in Linux stdlib.h 62*53ee8cc1Swenshuai.xi-elib(652) // suppress message about #define of earlier declared symbols 63*53ee8cc1Swenshuai.xi-elib(762) // suppress message about multiple identical declarations and 64*53ee8cc1Swenshuai.xi-elib(760) // suppress message about multiple identical macro defs 65*53ee8cc1Swenshuai.xi-elib(553) // undefined preprocessor variables are taken as 0 66*53ee8cc1Swenshuai.xi-elib(410) // unusual size_t 67*53ee8cc1Swenshuai.xi-elib(767) // differently defined macro 68*53ee8cc1Swenshuai.xi-elib(624) // typedef symbol redeclared 69*53ee8cc1Swenshuai.xi-elib(607) // parameter substitution within string 70*53ee8cc1Swenshuai.xi-elib(602) // in dial.h there are comments within comments ? 71*53ee8cc1Swenshuai.xi-elib(537) // repeated include files 72*53ee8cc1Swenshuai.xi-elib(2) // unclosed quotes in nserve.h 73*53ee8cc1Swenshuai.xi-elib(123) // size is both a variable and a macro with args 74*53ee8cc1Swenshuai.xi-elib(1014) // class member definition within extern "C++" 75*53ee8cc1Swenshuai.xi 76*53ee8cc1Swenshuai.xi-emacro(734,putc) // don't complain about items being too large. 77*53ee8cc1Swenshuai.xi-emacro((???),va_arg) // the va_arg() macro can yield 415, 416, 661, 662 78*53ee8cc1Swenshuai.xi // 796 and 797 (out-of-bounds errors). 79*53ee8cc1Swenshuai.xi-emacro(413,offsetof) // use of NULL pointer creates a stir 80*53ee8cc1Swenshuai.xi-emacro(545,offsetof) // addressing an array member is OK 81*53ee8cc1Swenshuai.xi 82*53ee8cc1Swenshuai.xi-elib(793) // Linux has minor ANSI violation in stddef.h 83*53ee8cc1Swenshuai.xi-elib(569) // Linux truncates some data in huge_val.h 84*53ee8cc1Swenshuai.xi-esym(528,__huge_val,__nan,__qnan,__qnanf,__snan,__snanf) 85*53ee8cc1Swenshuai.xi // We don't care if we don't reference some GNU funcs 86*53ee8cc1Swenshuai.xi-esym(528,__gnu_malloc,__gnu_calloc) 87*53ee8cc1Swenshuai.xi 88*53ee8cc1Swenshuai.xi 89*53ee8cc1Swenshuai.xi// The following options were found necessary when processing 90*53ee8cc1Swenshuai.xi// the Unix headers within /usr/include 91*53ee8cc1Swenshuai.xi 92*53ee8cc1Swenshuai.xi+fdi // Use the directory of the including file 93*53ee8cc1Swenshuai.xi 94*53ee8cc1Swenshuai.xi+ppw(ident) // Tolerate #ident 95*53ee8cc1Swenshuai.xi+rw(__inline) // enable the (non-standard) __inline keyword 96*53ee8cc1Swenshuai.xi+rw(__inline__) // enable the (non-standard) __inline__ keyword 97*53ee8cc1Swenshuai.xi 98*53ee8cc1Swenshuai.xi// The following functions exhibit variable return modes. 99*53ee8cc1Swenshuai.xi// That is, they may equally-usefully be called for a value 100*53ee8cc1Swenshuai.xi// as called just for their effects. Accordingly we inhibit 101*53ee8cc1Swenshuai.xi// Warning 534 for these functions. 102*53ee8cc1Swenshuai.xi// Feel free to add to or subtract from this list. 103*53ee8cc1Swenshuai.xi 104*53ee8cc1Swenshuai.xi-esym(534,close,creat,fclose,fprintf,fputc) 105*53ee8cc1Swenshuai.xi-esym(534,fputs,fscanf,fseek,fwrite,lseek,memcpy,memmove,memset) 106*53ee8cc1Swenshuai.xi-esym(534,printf,puts,scanf,sprintf,sscanf,strcat,strcpy) 107*53ee8cc1Swenshuai.xi-esym(534,strncat,strncpy,unlink,write) 108*53ee8cc1Swenshuai.xi 109*53ee8cc1Swenshuai.xi// For non-ANSI compilers we suppress messages 515 and 516 110*53ee8cc1Swenshuai.xi// for functions known to have variable argument lists. 111*53ee8cc1Swenshuai.xi// For ANSI compilers, header files should take care of this. 112*53ee8cc1Swenshuai.xi 113*53ee8cc1Swenshuai.xi-esym(515,fprintf,printf,sprintf,fscanf,scanf,sscanf) 114*53ee8cc1Swenshuai.xi-esym(516,fprintf,printf,sprintf,fscanf,scanf,sscanf) 115*53ee8cc1Swenshuai.xi 116*53ee8cc1Swenshuai.xi// The following options are required by most compilers to 117*53ee8cc1Swenshuai.xi// noiselessly process iostream.h 118*53ee8cc1Swenshuai.xi 119*53ee8cc1Swenshuai.xi-elib(1717) //empty prototypes 120*53ee8cc1Swenshuai.xi-elib(522) //function return value ignored 121*53ee8cc1Swenshuai.xi-elib(1053) //prototypes cannot be distinguished 122*53ee8cc1Swenshuai.xi-elib(1721) //unusual operator =() declaration 123*53ee8cc1Swenshuai.xi-elib(1720) //assignment op has non-const parameter 124*53ee8cc1Swenshuai.xi-elib(655) // bitwise operator combining compatible enum's 125*53ee8cc1Swenshuai.xi-elib(641) // converting enum's to int 126*53ee8cc1Swenshuai.xi-elib(537) // repeated include file (ios.h) 127*53ee8cc1Swenshuai.xi-elib(1511) // member (rdbuf) hides nonvirtual member 128*53ee8cc1Swenshuai.xi-elib(1712) // default constructor not defined for class 129*53ee8cc1Swenshuai.xi-esym(1702,operator<<,operator>>) 130*53ee8cc1Swenshuai.xi 131*53ee8cc1Swenshuai.xi// These functions return things that are frequently ignored. 132*53ee8cc1Swenshuai.xi 133*53ee8cc1Swenshuai.xi-esym(534,ostream::operator<<,istream::operator>>) 134*53ee8cc1Swenshuai.xi 135*53ee8cc1Swenshuai.xi-elib(747) //significant prototype coercion 136*53ee8cc1Swenshuai.xi-elib(740) //unusual pointer casts 137*53ee8cc1Swenshuai.xi-elib(1029) //default argument repeated -- can't dist. char, signed char 138*53ee8cc1Swenshuai.xi-elib(1055) //call to rdbuf() questioned? 139*53ee8cc1Swenshuai.xi-elib(1708,1709) // minor C/C++ declaration conflict 140*53ee8cc1Swenshuai.xi 141*53ee8cc1Swenshuai.xi-elib(763) // redundant declaration 142*53ee8cc1Swenshuai.xi-elib(1510) // base class has no destructor 143*53ee8cc1Swenshuai.xi-elib(1516) // data member hiding inherited member 144*53ee8cc1Swenshuai.xi-elib(1730) // class/struct inconsistancy 145*53ee8cc1Swenshuai.xi-elib(569) // loss of information 8-bits - 7bits 146*53ee8cc1Swenshuai.xi 147*53ee8cc1Swenshuai.xi// What follows here is a collection of options we have found 148*53ee8cc1Swenshuai.xi// to be needed to support Version 3 of GCC. The need for these 149*53ee8cc1Swenshuai.xi// options actually predate Version 3 and are of the 2.9... time frame 150*53ee8cc1Swenshuai.xi 151*53ee8cc1Swenshuai.xi-e93 // allow newlines within quoted string arguments to macros 152*53ee8cc1Swenshuai.xi-dasm()= // support inline assembly code by ignoring asm(...) 153*53ee8cc1Swenshuai.xi-d__attribute__()= // ignore this keyword and following parenthetical 154*53ee8cc1Swenshuai.xi-d__extension__= // ignore this keyword 155*53ee8cc1Swenshuai.xi-d__builtin_va_list=void* // used by stdarg.h 156*53ee8cc1Swenshuai.xi-d__builtin_stdarg_start()=_to_semi // ditto 157*53ee8cc1Swenshuai.xi-d__builtin_va_end()=_to_semi // ditto 158*53ee8cc1Swenshuai.xi-d__builtin_fabsf=(float) 159*53ee8cc1Swenshuai.xi-d"__builtin_fabsl=(long double)" 160*53ee8cc1Swenshuai.xi-d__builtin_cosf=(float) 161*53ee8cc1Swenshuai.xi-d"__builtin_cosl=(long double)" 162*53ee8cc1Swenshuai.xi-d__builtin_sinf=(float) 163*53ee8cc1Swenshuai.xi-d"__builtin_sinl=(long double)" 164*53ee8cc1Swenshuai.xi-d__builtin_sqrtf=(float) 165*53ee8cc1Swenshuai.xi-d"__builtin_sqrtl=(long double)" 166*53ee8cc1Swenshuai.xi-d"__builtin_fabs=(double)" 167*53ee8cc1Swenshuai.xi+rw(_to_semi) // needed for the two macros above. 168*53ee8cc1Swenshuai.xi-d__const=const // gconv.h uses __const rather than const 169*53ee8cc1Swenshuai.xi-d__STDC_VERSION__=199901L // required by C99 170*53ee8cc1Swenshuai.xi-d__FUNCTION__="somefunction" 171*53ee8cc1Swenshuai.xi-d__PRETTY_FUNCTION__="somefunction" 172*53ee8cc1Swenshuai.xi+fwc // wchar_t is builtin 173*53ee8cc1Swenshuai.xi-d_WCHAR_T // tell the header files as much 174*53ee8cc1Swenshuai.xi-elib(148) // Some of the libraries are redefining member 175*53ee8cc1Swenshuai.xi // functions 176*53ee8cc1Swenshuai.xi-elib(1073) // reverse_iterator<> is being invoked with 177*53ee8cc1Swenshuai.xi // an insufficient number of parameters. 178*53ee8cc1Swenshuai.xi+rw(__typeof__) // activate __typeof__ keyword 179*53ee8cc1Swenshuai.xi-d__typeof=__typeof__ // an alternative to using __typeof__ 180*53ee8cc1Swenshuai.xi+rw( __volatile__ ) // unusual reserved word ignored. 181*53ee8cc1Swenshuai.xi+rw( _to_brackets ) // a pair of options to ignore an elaborated 182*53ee8cc1Swenshuai.xi+d__asm__=_to_brackets // assembly language escape. 183*53ee8cc1Swenshuai.xi-rw(__except) // This MS reserved word is used as an identifier 184*53ee8cc1Swenshuai.xi+rw( __complex__, __real__, __imag__ ) // reserved words that can be ignored. 185*53ee8cc1Swenshuai.xi+d__builtin_strchr=(char*) // permits the inline definition ... 186*53ee8cc1Swenshuai.xi+d__builtin_strpbrk=(char*) // of these functions to be linted ... 187*53ee8cc1Swenshuai.xi+d__builtin_strrchr=(char*) // without drawing a complaint 188*53ee8cc1Swenshuai.xi+d__builtin_strstr=(char*) // about the use of a non-standard name 189*53ee8cc1Swenshuai.xi-esym( 718, __builtin_* ) // The compiler does not need these ... 190*53ee8cc1Swenshuai.xi-esym( 746, __builtin_* ) // declared and it knows their prototypes. 191*53ee8cc1Swenshuai.xi-d__EXCEPTIONS // make sure try and catch are not redefined out 192*53ee8cc1Swenshuai.xi // from under you as execeptions_defines.h could do 193*53ee8cc1Swenshuai.xi--uconst // keep const from being defined away 194*53ee8cc1Swenshuai.xi 195*53ee8cc1Swenshuai.xi+rw(__restrict) // ignore this keyword. 196*53ee8cc1Swenshuai.xi 197*53ee8cc1Swenshuai.xi// The following was produced by `gcc -v`, and may not be necessary. 198*53ee8cc1Swenshuai.xi// Naturally if you include these options, you should make sure they 199*53ee8cc1Swenshuai.xi// match your version of GCC: 200*53ee8cc1Swenshuai.xi// -d__GNUC__=3 201*53ee8cc1Swenshuai.xi// -d__GNUC_MINOR__=3 202*53ee8cc1Swenshuai.xi// -d__GNUC_PATCHLEVEL__=2 203*53ee8cc1Swenshuai.xi-d_GNU_SOURCE 204*53ee8cc1Swenshuai.xi 205*53ee8cc1Swenshuai.xi// Built-in identifiers follow. These constants are compiled into gcc and are not 206*53ee8cc1Swenshuai.xi// defined in any GCC headers. They might vary from platform to platform. To 207*53ee8cc1Swenshuai.xi// see what they are on yours, put the following into a source file and run it 208*53ee8cc1Swenshuai.xi// through gcc with the -E option; copy the result into your local copy of 209*53ee8cc1Swenshuai.xi// co-gnu3.lnt if your output differs from the constants used for the -d Lint options below: 210*53ee8cc1Swenshuai.xi // //---begin builtin.c--- 211*53ee8cc1Swenshuai.xi // __CHAR_BIT__ 212*53ee8cc1Swenshuai.xi // __FLT_MANT_DIG__ 213*53ee8cc1Swenshuai.xi // __FLT_DIG__ 214*53ee8cc1Swenshuai.xi // __FLT_RADIX__ 215*53ee8cc1Swenshuai.xi // __FLT_MIN_EXP__ 216*53ee8cc1Swenshuai.xi // __FLT_MIN_10_EXP__ 217*53ee8cc1Swenshuai.xi // __FLT_MAX_EXP__ 218*53ee8cc1Swenshuai.xi // __FLT_MAX_10_EXP__ 219*53ee8cc1Swenshuai.xi // __FLT_DENORM_MIN__ 220*53ee8cc1Swenshuai.xi // __DBL_MANT_DIG__ 221*53ee8cc1Swenshuai.xi // __DBL_DIG__ 222*53ee8cc1Swenshuai.xi // __FLT_RADIX__ 223*53ee8cc1Swenshuai.xi // __DBL_MIN_EXP__ 224*53ee8cc1Swenshuai.xi // __DBL_MIN_10_EXP__ 225*53ee8cc1Swenshuai.xi // __DBL_MAX_EXP__ 226*53ee8cc1Swenshuai.xi // __DBL_MAX_10_EXP__ 227*53ee8cc1Swenshuai.xi // __DBL_DENORM_MIN__ 228*53ee8cc1Swenshuai.xi // __LDBL_MANT_DIG__ 229*53ee8cc1Swenshuai.xi // __LDBL_DIG__ 230*53ee8cc1Swenshuai.xi // __LDBL_MIN_EXP__ 231*53ee8cc1Swenshuai.xi // __LDBL_MIN_10_EXP__ 232*53ee8cc1Swenshuai.xi // __LDBL_MAX_EXP__ 233*53ee8cc1Swenshuai.xi // __LDBL_MAX_10_EXP__ 234*53ee8cc1Swenshuai.xi // __LDBL_DENORM_MIN__ 235*53ee8cc1Swenshuai.xi // //--end builtin.c--- 236*53ee8cc1Swenshuai.xi-d__CHAR_BIT__=8 237*53ee8cc1Swenshuai.xi-d__FLT_MANT_DIG__=24 238*53ee8cc1Swenshuai.xi-d__FLT_DIG__=6 239*53ee8cc1Swenshuai.xi-d__FLT_RADIX__=2 240*53ee8cc1Swenshuai.xi-d__FLT_MIN_EXP__=(-125) 241*53ee8cc1Swenshuai.xi-d__FLT_MIN_10_EXP__=(-37) 242*53ee8cc1Swenshuai.xi-d__FLT_MAX_EXP__=128 243*53ee8cc1Swenshuai.xi-d__FLT_MAX_10_EXP__=38 244*53ee8cc1Swenshuai.xi-d__FLT_DENORM_MIN__=1.40129846e-45F 245*53ee8cc1Swenshuai.xi-d__DBL_MANT_DIG__=53 246*53ee8cc1Swenshuai.xi-d__DBL_DIG__=15 247*53ee8cc1Swenshuai.xi-d__FLT_RADIX__=2 248*53ee8cc1Swenshuai.xi-d__DBL_MIN_EXP__=(-1021) 249*53ee8cc1Swenshuai.xi-d__DBL_MIN_10_EXP__=(-307) 250*53ee8cc1Swenshuai.xi-d__DBL_MAX_EXP__=1024 251*53ee8cc1Swenshuai.xi-d__DBL_MAX_10_EXP__=308 252*53ee8cc1Swenshuai.xi-d__DBL_DENORM_MIN__=4.9406564584124654e-324 253*53ee8cc1Swenshuai.xi-d__LDBL_MANT_DIG__=64 254*53ee8cc1Swenshuai.xi-d__LDBL_DIG__=18 255*53ee8cc1Swenshuai.xi-d__LDBL_MIN_EXP__=(-16381) 256*53ee8cc1Swenshuai.xi-d__LDBL_MIN_10_EXP__=(-4931) 257*53ee8cc1Swenshuai.xi-d__LDBL_MAX_EXP__=16384 258*53ee8cc1Swenshuai.xi-d__LDBL_MAX_10_EXP__=4932 259*53ee8cc1Swenshuai.xi-d__LDBL_DENORM_MIN__=3.64519953188247460253e-4951L 260*53ee8cc1Swenshuai.xi 261*53ee8cc1Swenshuai.xi//bypass too large line error 262*53ee8cc1Swenshuai.xi-e91 263*53ee8cc1Swenshuai.xi-e10 264*53ee8cc1Swenshuai.xi-ident($) 265*53ee8cc1Swenshuai.xi-e156