210 lines
8.7 KiB
Text
210 lines
8.7 KiB
Text
|
/* Date Stamp */ -d"_lint_co_gcc_lnt=co-gcc.lnt modified 12-Jun-2014"
|
||
|
/* To document usage use: -message( "Using " _lint_co_gcc_lnt ) */
|
||
|
// ---------------------------------------------------------------------
|
||
|
// This file is provided by Gimpel Software (www.gimpel.com) for use with
|
||
|
// its products PC-lint and FlexeLint.
|
||
|
//
|
||
|
// Redistribution and use of this file, with or without modification, is
|
||
|
// permitted provided that any such redistribution retains this notice.
|
||
|
// ---------------------------------------------------------------------
|
||
|
/* co-gcc.lnt: This is the seed file for configuring Lint for use with
|
||
|
GCC versions 2.95.3 and later.
|
||
|
|
||
|
Like all compiler options files this file is intended to be used
|
||
|
as follows:
|
||
|
|
||
|
lint co-gcc.lnt source-files-to-be-linted
|
||
|
|
||
|
Some of the information that co-gcc.lnt requires needs to be furnished
|
||
|
with the help of the gcc system itself. The easiest way to generate
|
||
|
this information is to use the makefile co-gcc.mak (supplied with the
|
||
|
Lint distribution) in an invocation of GNU Make; for details, see the
|
||
|
commentary at the top of co-gcc.mak.
|
||
|
*/
|
||
|
|
||
|
-cgnu // Notifies FlexeLint that gcc is being used.
|
||
|
|
||
|
// ===========================
|
||
|
// Preprocessor Configuration:
|
||
|
+fdi // GCC starts its #include search in the directory of the including
|
||
|
// file.
|
||
|
|
||
|
++fln // Allow:
|
||
|
// # digit-sequence " [s-char-sequence] " new-line
|
||
|
// as a synonym for:
|
||
|
// # line digit-sequence " [s-char-sequence] " new-line
|
||
|
// GCC additionally allows flag values to follow the
|
||
|
// s-char-sequence, but currently Lint ignores them.
|
||
|
|
||
|
-header(pclint/co-gcc.h) // Includes headers generated by GCC (bringing in
|
||
|
// predefined macros).
|
||
|
+libh(pclint/co-gcc.h) // Marks that header as library code.
|
||
|
|
||
|
pclint/gcc-include-path.lnt // This .lnt file should contain --i options
|
||
|
// and should be generated by invoking gcc with its '-v' option.
|
||
|
// (GCC's implicit #include search path is presented in the output.)
|
||
|
// This happens automatically when 'make -f co-gcc.mak' is invoked.
|
||
|
|
||
|
// Assertion directives (a feature of GCC's preprocessor) have been
|
||
|
// considered obsolete in GCC's documentation since version 3.0, so we do
|
||
|
// not use them here. If support for #assert is needed in the form of a
|
||
|
// lint option, one may use '-a#' like so:
|
||
|
// -a#machine(i386) // #assert's machine(i386) (SVR4 facility).
|
||
|
|
||
|
// File extensions:
|
||
|
// From the GCC man page:
|
||
|
//
|
||
|
// file.cc
|
||
|
// file.cp
|
||
|
// file.cxx
|
||
|
// file.cpp
|
||
|
// file.CPP
|
||
|
// file.c++
|
||
|
// file.C
|
||
|
// C++ source code that must be preprocessed. Note that in .cxx, the
|
||
|
// last two letters must both be literally x. Likewise, .C refers to
|
||
|
// a literal capital C.
|
||
|
//
|
||
|
// We emulate this with:
|
||
|
|
||
|
+cpp(.cc)
|
||
|
+cpp(.cp)
|
||
|
+cpp(.cxx)
|
||
|
+cpp(.cpp)
|
||
|
+cpp(.c++)
|
||
|
// Note the exceptions:
|
||
|
// +cpp(.CPP)
|
||
|
// +cpp(.C)
|
||
|
// These are commented out for the default config because they seem to
|
||
|
// cause trouble more often than not. For starters, it is problematic
|
||
|
// with filesystems that are case-insensitive (which has become common
|
||
|
// even on some POSIX systems).
|
||
|
|
||
|
// =============
|
||
|
// Size Options:
|
||
|
// +fwc // wchar_t might be builtin; if so, uncomment this option. (NOTE:
|
||
|
// // this option needs to be set before a size option is given for
|
||
|
// // wchar_t; see the documentation for -sw# in the Lint manual.)
|
||
|
|
||
|
pclint/size-options.lnt // This .lnt file should be generated (preferrably
|
||
|
// by a program created by invoking GCC with the compile options that
|
||
|
// are used in the compilation of the project to be linted). This
|
||
|
// happens automatically when 'make -f co-gcc.mak' is invoked.
|
||
|
|
||
|
|
||
|
// ===========================================
|
||
|
// +rw and -d options to cope with GNU syntax:
|
||
|
+ppw(ident) // Tolerate #ident
|
||
|
+ppw(warning)
|
||
|
|
||
|
// GCC provides alternative spellings of certain keywords:
|
||
|
+rw(__inline)
|
||
|
-rw_asgn(__inline__,__inline)
|
||
|
-rw_asgn(__header_always_inline,__inline)
|
||
|
-rw_asgn(__header_inline,__inline)
|
||
|
|
||
|
-rw_asgn(__signed__,signed)
|
||
|
-rw_asgn(__signed,signed)
|
||
|
-rw_asgn( __volatile__, volatile )
|
||
|
-rw_asgn( __volatile, volatile )
|
||
|
+rw(restrict)
|
||
|
-rw_asgn(__restrict,restrict)
|
||
|
-rw_asgn(__restrict__,restrict)
|
||
|
++d"__const=const" // gconv.h uses __const rather than const
|
||
|
++d"const=const" // ensure const expands to const.
|
||
|
|
||
|
-rw_asgn( asm, _up_to_brackets )
|
||
|
-rw_asgn( __asm, _up_to_brackets )
|
||
|
-rw_asgn( __asm__, _up_to_brackets )
|
||
|
// This re-definition of the various spellings of the asm keyword enables
|
||
|
// Lint to pass gracefully over expression-statements like:
|
||
|
// __asm __volatile ("fsqrt" : "=t" (__result) : "0" (__x));
|
||
|
// But it may be necessary to suppress certain error messages that are
|
||
|
// triggered by tokens that are part of an assembly declaration or
|
||
|
// statement. For example:
|
||
|
|
||
|
// -d"__asm__(p...)=/*lint -e{19}*/ __asm__(p)"
|
||
|
|
||
|
// ...causes Lint to be quiet about the semicolon that follows an
|
||
|
// __asm__() declaration. Note, the -e{N} form of suppression takes
|
||
|
// effect only for the forward-declaration, definition or
|
||
|
// [possibly-compound] statement that immediately follows. Because a
|
||
|
// semicolon is seen as a declaration-terminator, Error 19 will be
|
||
|
// re-enabled immediately after the semicolon in '__asm__(...);'.
|
||
|
// (The elipsis after the macro parameter p allows zero or more commas to
|
||
|
// appear in the operand.)
|
||
|
//
|
||
|
// If you encounter other diagnostics that appear to need suppression in
|
||
|
// or near assembly regions, please let us know!
|
||
|
//
|
||
|
-esym(123,__asm__)
|
||
|
|
||
|
-rw_asgn(__alignof__,__alignof)
|
||
|
|
||
|
// "__extension__" is GCC's way of allowing the use of non-standard
|
||
|
// constructs in a strict Standard-conforming mode. We don't currently
|
||
|
// have explicit support for it, but we can use local suppressions. For
|
||
|
// example, we can use -e(160) so that we will not see any Errors about
|
||
|
// GNU statement-expressions wrapped in __extension__().
|
||
|
++d"__extension__=/*lint -e(160) */"
|
||
|
|
||
|
++d"__null=0"
|
||
|
+rw(_to_semi) // needed for the two macros above.
|
||
|
+rw(__typeof__) // activate __typeof__ keyword
|
||
|
-d"__typeof=__typeof__" // an alternative to using __typeof__
|
||
|
|
||
|
-rw(__except) // This MS reserved word is used as an identifier
|
||
|
+rw( __complex__, __real__, __imag__ ) // reserved words that can be ignored.
|
||
|
++d"__builtin_strchr=(char*)" // permits the inline definition ...
|
||
|
++d"__builtin_strpbrk=(char*)" // of these functions to be linted ...
|
||
|
++d"__builtin_strrchr=(char*)" // without drawing a complaint
|
||
|
++d"__builtin_strstr=(char*)" // about the use of a non-standard name
|
||
|
++d"__PRETTY_FUNCTION__=___function___" // lint defines ___function___ internally
|
||
|
++d"__FUNCTION__=___function___" // lint defines ___function___ internally
|
||
|
++d"__func__=___function___" // Some C++ modes suport the implicit __func__
|
||
|
// identifier.
|
||
|
-ident($)
|
||
|
|
||
|
// =========================================================
|
||
|
// Other options supporting GNU C/C++ syntax:
|
||
|
+fld // enables the processing of _L_abel _D_esignators E.g.:
|
||
|
// union { double d; int i; } u = { d: 3.141 };
|
||
|
|
||
|
// =========================================================
|
||
|
// Generally useful suppressions:
|
||
|
-wlib(1) // sets the warning level within library headers to 1
|
||
|
// (no warnings, just syntax errors). Comment out if you
|
||
|
// are actually linting library headers.
|
||
|
-elib(123) // 123 is really a warning, but it's in the "Error" range.
|
||
|
-elib(93) // allow newlines within quoted string arguments to macros
|
||
|
-elib(46) // allow bit fields to have integral types other than
|
||
|
// '_Bool' and 'int'.
|
||
|
-elibsym(628) // Suppress 628 for __builtin symbols.
|
||
|
|
||
|
-esym(528,__huge_val,__nan,__qnan,__qnanf,__snan,__snanf)
|
||
|
// We don't care if we don't reference some GNU functions
|
||
|
-esym(528,__gnu_malloc,__gnu_calloc)
|
||
|
|
||
|
// The following functions exhibit variable return modes.
|
||
|
// That is, they may equally-usefully be called for a value
|
||
|
// as called just for their effects. Accordingly we inhibit
|
||
|
// Warning 534 for these functions.
|
||
|
// Feel free to add to or subtract from this list.
|
||
|
|
||
|
-esym(534,close,creat,fclose,fprintf,fputc)
|
||
|
-esym(534,fputs,fscanf,fseek,fwrite,lseek,memcpy,memmove,memset)
|
||
|
-esym(534,printf,puts,scanf,sprintf,sscanf,strcat,strcpy)
|
||
|
-esym(534,strncat,strncpy,unlink,write)
|
||
|
|
||
|
// For non-ANSI compilers we suppress messages 515 and 516
|
||
|
// for functions known to have variable argument lists.
|
||
|
// For ANSI compilers, header files should take care of this.
|
||
|
|
||
|
-esym(515,fprintf,printf,sprintf,fscanf,scanf,sscanf)
|
||
|
-esym(516,fprintf,printf,sprintf,fscanf,scanf,sscanf)
|
||
|
-esym(1702,*operator<<,*operator>>)
|
||
|
-esym(534,*operator<<,*operator>>)
|
||
|
-esym(1055,*__builtin*)
|
||
|
-esym(718,*__builtin*) // The compiler does not need these ...
|
||
|
-esym(746,*__builtin*) // declared and it knows their prototypes.
|