msg.txt
上传用户:filter2008
上传日期:2010-03-12
资源大小:2959k
文件大小:315k
源码类别:

编辑器/阅读器

开发平台:

C/C++

  1. 627   (arg. no. Integer) indirect object inconsistent with
  2.       format  -- The type of an argument to scanf (or fscanf or
  3.       sscanf) was inappropriate to the format.  However, the
  4.       argument was a pointer and it pointed to a quantity of the
  5.       expected size.
  6. 628   no argument information provided for function 'Symbol'
  7.       (Location)  -- The named function was called but there was
  8.       no argument information supplied.  Argument information
  9.       can come from a prototype or from a function definition.
  10.       This usually happens when an old-style function decla
  11.       ration indicates that the function is in a library but no
  12.       prototype is given for the function nor is any argument
  13.       information provided in a standard library file.  This
  14.       message is suppressed if you are producing a lint object
  15.       module because presumably the object module will be
  16.       compared with a library file at some later time.
  17. 629   static class for function 'Symbol' is non standard  -- A
  18.       static class was found for a function declaration within a
  19.       function.  The static class is only permitted for
  20.       functions in declarations that have file scope (i.e.,
  21.       outside any function).  Either move the declaration
  22.       outside the function or change static to extern; if the
  23.       second choice is made, make sure that a static declaration
  24.       at file scope also exists before the extern declaration.
  25.       Though technically the construct is not portable, many
  26.       compilers do tolerate it.  If you suppress the message,
  27.       PC-lint/FlexeLint will treat it as a proper function
  28.       declaration.
  29. 630   ambiguous reference to symbol 'Name'  -- If the +fab flag
  30.       is set, then if two structures containing the same member
  31.       name (not necessarily different kinds of structures) are
  32.       embedded in the same structure and a reference to this
  33.       member name omits one of the intervening (disambiguating)
  34.       names, this warning is emitted.
  35. 631   tag 'Symbol' defined differently at Location  -- The
  36.       struct, union or enum tag Symbol was defined differently
  37.       in different scopes.  This is not necessarily an error
  38.       since C permits the redefinition, but it can be a source
  39.       of subtle error.  It is not generally a programming
  40.       practice to be recommended.
  41. 632   Assignment to strong type 'Name' in context: Context  --
  42.       An assignment (or implied assignment, Context indicates
  43.       which) violates a Strong type check as requested by a
  44.       -strong(A... option.  See Chapter 8.
  45. 633   Assignment from a strong type 'Name' in context: Context
  46.       -- An assignment (or implied assignment, Context indicates
  47.       which) violates a Strong type check as requested by a
  48.       -strong(X... option.  See Chapter 8.
  49. 634   Strong type mismatch (type 'Symbol') in equality or
  50.       conditional  -- An equality operation (== or !=) or a
  51.       conditional operation (? :) violates a Strong type check
  52.       as requested by a -strong(J... option.  This message would
  53.       have been suppressed using flags "Je".  See Chapter 8.
  54. 635   resetting strong parent of type 'Symbol', old parent ==
  55.       type 'Symbol'  -- The strong parent of the given Symbol is
  56.       being reset.  This is being done with a -parent option or
  57.       by a typedef.  Note that this may not necessarily be an
  58.       error; you are being alerted to the fact that the old link
  59.       is being erased.  See Chapter 8.
  60. 636   ptr to strong type 'Name' versus another type  -- Pointers
  61.       are being compared and there is a strong type clash below
  62.       the first level.  For example,
  63. /*lint -strong(J,INT) */
  64. typedef int INT;
  65. INT *p;  int *q;
  66. if( p == q )    /* Warning 636 */
  67.       will elicit this warning.  This message would have been
  68.       suppressed using flags "Je" or "Jr" or both.
  69. 637   Expected index type 'Symbol' for strong type 'Symbol'  --
  70.       This is the message you receive when an inconsistency with
  71.       the -index option is recognized.  A subscript is not the
  72.       stipulated type (the first type mentioned in the message)
  73.       nor equivalent to it within the hierarchy of types.  See
  74.       Chapter 8. STRONG TYPES and also +fhx.
  75. 638   Strong type mismatch for type 'Name' in relational  -- A
  76.       relational operation ( >=  <=  >  < ) violates a Strong
  77.       type check as requested by a -strong(J... option.  This
  78.       message would have been suppressed using flags "Jr".  See
  79.       Chapter 8.
  80. 639   Strong type mismatch for type 'Name' in binary operation
  81.       -- A binary operation other than an equality or a
  82.       relational operation violates a Strong type check as
  83.       requested by a -strong(J... option.  This message would
  84.       have been suppressed using flags "Jo".  See Chapter 8.
  85. 640   Expected strong type 'Name' in Boolean context  -- A
  86.       Boolean context expected a type specified by a
  87.       -strong(B... option.  See Chapter 8.
  88. 641   Converting enum to int  -- An enumeration type was used in
  89.       a context that required a computation such as an argument
  90.       to an arithmetic operator or was compared with an integral
  91.       argument.  This warning will be suppressed if you use the
  92.       integer model of enumeration (+fie) but you will lose some
  93.       valuable type-checking in doing so.  An intermediate
  94.       policy is to simply turn off this warning.  Assignment of
  95.       int to enum will still be caught.
  96.       This warning is not issued for a tagless enum without
  97.       variables.  For example
  98. enum {false,true};
  99.       This cannot be used as a separate type.  PC-lint/FlexeLint
  100.       recognizes this and treats false and true as arithmetic
  101.       constants.
  102. 642   Format char 'Char' not supported by wsprintf  -- This
  103.       means that you are using an option of the form:
  104.       -printf(w...  and you are using a format character not
  105.       supported by the Microsoft Windows function wsprintf.  If
  106.       you are not really using wsprintf but are using the w flag
  107.       to get far pointers you should turn this message off.
  108. 643   Loss of precision in pointer cast  -- A far pointer was
  109.       cast to a near pointer.  Such casts have had disastrous
  110.       consequences for Windows programmers.  If you really need
  111.       to make such a cast, you can do it in stages.  If you cast
  112.       to a long first (i.e., some integral type that can hold
  113.       the pointer) and then into a shorter value, we don't
  114.       complain.
  115. 644   Variable 'Symbol' (Location) may not have been initialized
  116.       -- An auto variable was not necessarily assigned a value
  117.       before use.  See Section 9.
  118. 645   Symbol 'Symbol' (Location) may not have been initialized
  119.       -- An auto variable was conditionally assigned a value
  120.       before being passed to a function expecting a pointer to a
  121.       const object.  See Warning  603 for an explanation of the
  122.       dangers of such a construct.  See Section 9.
  123. 646   case/default within Kind loop; may have been misplaced  --
  124.       A case or default statement was found within a for, do, or
  125.       while loop.  Was this intentional?  At the very least,
  126.       this reflects poor programming style.
  127. 647   Suspicious truncation  -- This message is issued when it
  128.       appears that there may have been an unintended loss of
  129.       information during an operation involving int or unsigned
  130.       int the result of which is later converted to long.  It is
  131.       issued only for systems in which int is smaller than long.
  132.       For example:
  133. (long) (n << 8)
  134.       might elicit this message if n is unsigned int, whereas
  135. (long) n << 8
  136.       would not.  In the first case, the shift is done at int
  137.       precision and the high order 8 bits are lost even though
  138.       there is a subsequent conversion to a type that might hold
  139.       all the bits.  In the second case, the shifted bits are
  140.       retained.
  141.       The operations that are scrutinized and reported upon by
  142.       this message are:  shift left, multiplication, and
  143.       bit-wise complementation.  Addition and subtraction are
  144.       covered by Informational message  776.
  145.       The conversion to long may be done explicitly with a cast
  146.       as shown or implicitly via assignment, return, argument
  147.       passing or initialization.
  148.       The message can be suppressed by casting.  You may cast
  149.       one of the operands so that the operation is done in full
  150.       precision as is given by the second example above.
  151.       Alternatively, if you decide there is really no problem
  152.       here (for now or in the future), you may cast the result
  153.       of the operation to some form of int.  For example, you
  154.       might write:
  155. (long) (unsigned) (n << 8)
  156.       In this way PC-lint/FlexeLint will know you are aware of
  157.       and approve of the truncation.
  158. 648   Overflow in computing constant for operation: String  --
  159.       Arithmetic overflow was detected while computing a
  160.       constant expression.  For example, if int is 16 bits then
  161.       200 * 200 will result in an overflow. String gives the
  162.       operation that caused the overflow and may be one of:
  163.       addition, unsigned addition, multiplication, unsigned
  164.       multiplication, negation, shift left, unsigned shift left,
  165.       subtraction, or unsigned sub.
  166.       To suppress this message for particular constant
  167.       operations you may have to supply explicit truncation.
  168.       For example, if you want to obtain the low order 8 bits of
  169.       the integer 20000 into the high byte of a 16-bit int,
  170.       shifting left would cause this warning.  However,
  171.       truncating first and then shifting would be OK.  The
  172.       following code illustrates this where int is 16 bits.
  173.     20000u << 8;                  /* 648 */
  174.             (0xFF & 20000u) << 8;         /* OK  */
  175.       If you truncate with a cast you may make a signed
  176.       expression out of an unsigned.  For example, the following
  177.       receives a warning (for 16 bit int).
  178.   (unsigned char) OxFFFu << 8       /* 648 */
  179.       because the unsigned char is promoted to int before
  180.       shifting.  The resulting quantity is actually negative.
  181.       You would need to revive the unsigned nature of the
  182.       expression with
  183.   (unsigned) (unsigned char) OxFFF << 8     /* OK */
  184. 649   Sign fill during constant shift  -- During the evaluation
  185.       of a constant expression a negative integer was shifted
  186.       right causing sign fill of vacated positions.  If this is
  187.       what is intended, suppress this error, but be aware that
  188.       sign fill is implementation-dependent.
  189. 650   Constant out of range for operator String  -- In a
  190.       comparison operator or equality test (or implied equality
  191.       test as for a case statement), a constant operand is not  in
  192.       the range specified by the other operand.  For example,
  193.       if 300 is compared against a char variable, this warning
  194.       will be issued.  Moreover, if char is signed (and 8 bits)
  195.       you will get this message if you compare against an inte
  196.       ger greater than 127.  The problem can be fixed with a
  197.       cast.  For example:
  198.     if( ch == 0xFF ) ...
  199.             if( (unsigned char) ch == 0xFF ) ...
  200.       If char is signed (+fcu has not been set) the first  receives
  201.       a warning and can never succeed.  The second suppresses the
  202.       warning and corrects the bug.
  203.       PC-lint/FlexeLint will take into account the limited
  204.       precision of some operands such as bit-fields and
  205.       enumerated types.  Also, PC-lint/FlexeLint will take
  206.       advantage of some computations that limit the precision of
  207.       an operand.  For example,
  208.   if( (n & 0xFF) >> 4 == 16 ) ...
  209.       will receive this warning because the left-hand side is
  210.       limited to 4 bits of precision.
  211. 651   Potentially confusing initializer  -- An initializer for a
  212.       complex aggregate is being processed that contains some
  213.       subaggregates that are bracketed and some that are not.
  214.       ANSI recommends either "minimally bracketed" initializers
  215.       in which there are no interior braces or "fully bracketed"
  216.       initializers in which all interior aggregates are
  217.       bracketed.
  218. 652   #define of symbol 'Symbol' declared previously at Location
  219.       -- A macro is being defined for a symbol that had
  220.       previously been declared.  For example:
  221. int n;
  222. #define n N
  223.       will draw this complaint.  Prior symbols checked are local
  224.       and global variables, functions and typedef symbols, and
  225.       struct, union and enum tags.  Not checked are struct and
  226.       union member.
  227. 653   Possible loss of fraction  -- When two integers are
  228.       divided and assigned to a floating point variable the
  229.       fraction portion is lost.  For example, although
  230. double x = 5 / 2;
  231.       appears to assign 2.5 to x it actually assigns 2.0.  To
  232.       make sure you don't lose the fraction, cast at least one
  233.       of the operands to a floating point type.  If you really
  234.       wish to do the truncation, cast the resulting divide to an
  235.       integral (int or long) before assigning to the floating
  236.       point variable.
  237. 654   Option String obsolete; use -width(W,I)  -- The option -w
  238.       is now used to set the warning level and should no longer
  239.       be used to specify the width of error messages.  Instead
  240.       use -width with the same arguments as before to set the
  241.       width.  To set the warning level to 3, for example, use
  242.       the option -w3, not -w(3).
  243. 655   bit-wise operation uses (compatible) enum's  -- A bit-wise
  244.       operator (one of '|', '&' or '^') is used to combine two
  245.       compatible enumerations.  The type of the result is
  246.       considered to be the enumeration.  This is considered a
  247.       very minor deviation from the strict model and you may
  248.       elect to suppress this warning.
  249. 656   Arithmetic operation uses (compatible) enum's  -- An
  250.       arithmetic operator (one of '+', or '-') is used to
  251.       combine two compatible enumerations.  The type of the
  252.       result is considered to be the enumeration.  This is
  253.       considered a very minor deviation from the strict model
  254.       and you may elect to suppress this warning.
  255. 657   Unusual (nonportable) anonymous struct or union  -- A
  256.       struct or union declaration without a declarator was taken
  257.       to be anonymous.  However, the anonymous union supported
  258.       by C++ and other dialects of C require untagged union's.
  259.       Tagged unions and tagged or untagged structs are rarely
  260.       supported, as anonymous.
  261. 658   Anonymous union assumed (use flag +fan)  -- A union
  262.       without a declarator was found.  Was this an attempt to
  263.       define an anonymous union?  If so, anonymous unions should
  264.       be activated with the +fan flag.  This flag is activated
  265.       automatically for C++.
  266. 659   Nothing follows '}' on line within struct/union/enum
  267.       declaration  -- A struct/union/class/enum definition
  268.       occurred and the closing '}' was not followed on the same
  269.       line by another token.  It looks suspicious.  Missing
  270.       semi-colons after such definitions can be a source of
  271.       strange and mysterious messages.  If you intentionally
  272.       omitted the semi-colon then simply place the token, which
  273.       follows, on the same line as the '}'.  At the very least
  274.       follow the '}' with a comment.
  275. 660   Option String has no effect  -- The indicated option had
  276.       no effect.  Was this a mistake?  Not all options are
  277.       tested for effectiveness.  For example, in the sequence
  278.       -w2 -e720 the 2nd option has no effect but no report is
  279.       given since the nuisance value would be too high.  The
  280.       message is reserved for cases when the non-effectiveness
  281.       would produce truly mysterious results.
  282. 661   possible access of out-of-bounds pointer ('Integer' beyond
  283.       end of data) by operator 'String'  -- An out-of-bounds
  284.       pointer may have been accessed.  See message  415 for a
  285.       description of the parameters Integer and String.  For
  286.       example:
  287. int a[10];
  288. if( n <= 10 ) a[n] = 0;
  289.       Here the programmer presumably should have written n<10.
  290.       This message is similar to messages  415 and  796 but
  291.       differs from them by the degree of probability.  See
  292.       Section 9.
  293. 662   possible creation of out-of-bounds pointer ('Integer'
  294.       beyond end of data) by operator 'String'  -- An
  295.       out-of-bounds pointer may have been created.  See message
  296.       415 for a description of the parameters Integer and
  297.       String.  For example:
  298. int a[10];
  299. if( n <= 20 ) f( a + n );
  300.       Here, it appears as though an illicit pointer is being
  301.       created, but PC-lint/FlexeLint cannot be certain.  See
  302.       also messages  416 and  797.  See Section 9.
  303. 663   Suspicious array to pointer conversion  -- This warning  occurs
  304. in the following kind of situation:
  305. struct x { int a; } y[2];
  306. ...  y->a  ...
  307.       Here, the programmer forgot to index the array but the
  308.       error normally goes undetected because the array reference
  309.       is automatically and implicitly converted to a pointer to
  310.       the first element of the array.  If you really mean to
  311.       access the first element use y[0].a
  312. 664   Left side of logical OR (||) or logical AND (&&) does not
  313.       return  -- An exiting function was found on the left hand
  314.       side of an operator implying that the right hand side
  315.       would never be executed.  For example:
  316. if( (exit(0),n == 0) || n > 2 ) ...
  317.       Since the exit function does not return, control can never
  318.       flow to the right hand operator.
  319. 665   Unparenthesized parameter Integer in macro 'Symbol' is
  320.       passed an expression  -- An expression was passed to a
  321.       macro parameter that was not parenthesized.  For example:
  322. #define mult(a,b) (a*b)
  323. ...   mult( 100, 4 + 10 ) 
  324.       Here the programmer is beguiled into thinking that the
  325.       4+10 is taken as a quantity to be multiplied by 100 but
  326.       instead results in: 100*4+10, which is quite different.
  327.       The recommended remedy ( [22 section 20.4]) is to
  328.       parenthesize such parameters as in:
  329. #define mult(a,b) ((a)*(b))
  330.       The message is not arbitrarily given for any
  331.       unparenthesized parameter but only when the actual macro
  332.       argument sufficiently resembles an expression and the
  333.       expression involves binary operators.  The priority of the
  334.       operator is not considered except that it must have lower
  335.       priority than the unary operators.  The message is not
  336.       issued at the point of macro definition because it may not
  337.       be appropriate to parenthesize the parameter.  For
  338.       example, the following macro expects that an operator will
  339.       be passed as argument.  It would be an error to enclose op
  340.       in parentheses.
  341.       #define check(x,op,y) if( ((x) op (y)) == 0 ) print( ... )
  342. 666   Expression with side effects passed to repeated parameter
  343.       Integer of macro 'Symbol'  -- A repeated parameter within
  344.       a macro was passed an argument with side-effects.  For
  345.       example:
  346. #define ABS(x) ((x) < 0 ? -(x) : (x))
  347. ...
  348. ABS( n++ )
  349.       Although the ABS macro is correctly defined to specify the
  350.       absolute value of its argument, the repeated use of the
  351.       parameter x implies a repeated evaluation of the actual
  352.       argument n++.  This results in two increments to the
  353.       variable n.   [22 section 20.6]  Any expression containing
  354.       a function call is also considered to have side-effects.
  355. 667   Inconsistent use of qualifiers for symbol 'Symbol' (type
  356.       'Type' vs. 'Type') conflicts with Location  -- A
  357.       declaration for the identified Symbol is inconsistent with
  358.       a prior declaration for the same symbol.  There was a
  359.       nominal difference in the declaration but owing to the
  360.       memory model chosen there was no real difference.  For
  361.       example, in large model, one declaration declares external
  362.       symbol alpha to be a far pointer and another declaration
  363.       omits the memory model specification.
  364. 668   Possibly passing a null pointer to function 'Symbol',
  365.       Context Reference  -- A NULL pointer is possibly being
  366.       passed to a function identified by Symbol.  The argument
  367.       in question is given by Context.  The function is either a
  368.       library function designed not to receive a NULL pointer or
  369.       a user function dubbed so via the option -function.  See
  370.       Section 10.1 Function Mimicry (function) and Section 9.2
  371.       Value Tracking.
  372. 669   Possible data overrun for function 'Symbol', argument
  373.       Integer exceeds argument Integer Reference  -- This
  374.       message is for data transfer functions such as memcpy,
  375.       strcpy, fgets, etc. when the size indicated by the first
  376.       cited argument (or arguments) can possibly exceed the size
  377.       of the buffer area cited by the second.  The message may
  378.       also be issued for user functions via the -function
  379.       option.  See Section 10.1 Function Mimicry (function) and
  380.       Section 9.2 Value Tracking.
  381. 670   Possible access beyond array for function 'Symbol',
  382.       argument Integer exceeds Integer Reference  -- This
  383.       message is issued for several library functions (such as
  384.       fwrite, memcmp, etc) wherein there is a possible attempt
  385.       to access more data than exist.  For example, if the
  386.       length of data specified in the fwrite call exceeds the
  387.       size of the data specified.  The function is specified by
  388.       Symbol and the arguments are identified by argument
  389.       number.  See also Section 10.1 Function Mimicry (function)
  390.       and Section 9.2 Value Tracking.
  391. 671   Possibly passing to function 'Symbol' a negative value
  392.       (Integer), Context Reference  -- An integral value that
  393.       may possibly be negative is being passed to a function
  394.       that is expecting only positive values for a particular
  395.       argument.  The message contains the name of the function
  396.       (Symbol), the questionable value (Integer) and the
  397.       argument number (Context).  The function may be a standard
  398.       library function designed to accept only positive values
  399.       such as malloc or memcpy (third argument), or may have
  400.       been identified by the user as such through the -function
  401.       or -sem options.  See message  422 for an example and
  402.       further explanation.
  403. 672   Possible memory leak in assignment to pointer 'Symbol'  --
  404.       An assignment was made to a pointer variable (designated
  405.       by Symbol), which may already be holding the address of an
  406.       allocated object, which had not been freed.  The
  407.       allocation of memory, which is not freed, is considered a
  408.       'memory leak'.  The memory leak is considered 'possible'
  409.       because only some lines of flow will result in a leak.
  410. 673   Possibly inappropriate deallocation (Name1) for 'Name2'
  411.       data  -- This message indicates that a deallocation
  412.       (free(), delete, or delete[]) as specified by Name1 may be
  413.       inappropriate for the data being freed.  The kind of data
  414.       is one or more of: malloc, new, new[], static, auto,
  415.       member, modified or constant.  The word 'Possibly' is used
  416.       in the message to indicate that only some of the lines of
  417.       flow to the deallocation show data inconsistent with the
  418.       allocation.
  419. 674   Returning address of auto through variable 'Symbol'  --
  420.       The value held by a pointer variable contains the address
  421.       of an auto variable.  It is normally incorrect to return
  422.       the address of an item on the stack because the portion of
  423.       the stack allocated to the returning function is subject
  424.       to being obliterated after return.
  425. 675   No prior semantics associated with 'Name' in option
  426.       'String'  -- The -function option is used to transfer
  427.       semantics from its first argument to subsequent arguments.
  428.       However it was found that the first argument Name did not
  429.       have semantics.
  430. 676   Possibly negative subscript (Integer) in operator 'String'
  431.       -- An integer whose value was possibly negative was added
  432.       to an array or to a pointer to an allocated area
  433.       (allocated by malloc, operator new, etc.) This message is
  434.       not given for pointers whose origin is unknown since a
  435.       negative subscript is in general legal.
  436. 677   sizeof used within preprocessor statement  -- Whereas the
  437.       use of sizeof during preprocessing is supported by a
  438.       number of compilers it is not a part of the ANSI C or C++
  439.       standard.
  440. 678   Member 'Symbol' field length (Integer) too small for enum
  441.       precision (Integer)  -- A bit field was found to be too
  442.       small to support all the values of an enumeration (that
  443.       was used as the base of the bit field).  For example:
  444. enum color { red, green, yellow, blue };
  445. struct abc { enum color c:2; };
  446.       Here, the message is not given because the four
  447.       enumeration values of color will just fit within 2 bits.
  448.       However, if one additional color is inserted, Warning 678
  449.       will be issued informing the programmer of the undesirable
  450.       and dangerous condition.
  451. 679   Suspicious Truncation in arithmetic expression combining
  452.       with pointer  -- This message is issued when it appears
  453.       that there may have been an unintended loss of information
  454.       during an operation involving integrals before combining
  455.       with a pointer whose precision is greater than the
  456.       integral expression.  For example:
  457. //lint -sp8  pointers are 8 bytes
  458. //lint -si4  integers are 4 bytes
  459. char *f( char *p, int n, int m )
  460.    {
  461.    return p + (n + m);  // warning 679
  462.    }
  463.       By the rules of C/C++, the addition n+m is performed
  464.       independently of its context and is done at integer
  465.       precision.  Any overflow is ignored even though the larger
  466.       precision of the pointer could easily accommodate the
  467.       overflow.  If, on the other hand the expression were:
  468.       p+n+m, which parses as (p+n)+m, no warning would be
  469.       issued.
  470.       If the expression were p+n*m then, to suppress the
  471.       warning, a cast is needed.  If long were the same size as
  472.       pointers you could use the expression:
  473. return p + ((long) n * m);
  474. 680   Suspicious Truncation in arithmetic expression converted
  475.       to pointer  -- An arithmetic expression was cast to
  476.       pointer.  Moreover, the size of the pointer is greater
  477.       than the size of the expression.  In computing the
  478.       expression, any overflow would be lost even though the
  479.       pointer type would be able to accommodate the lost
  480.       information.  To suppress the message, cast one of the
  481.       operands to an integral type large enough to hold the
  482.       pointer.  Alternatively, if you are sure there is no prob
  483.       lem you may cast the expression to an integral type before
  484.       casting to pointer.  See messages  647,  776,  790 and
  485.       679.
  486. 681   Loop is not entered  -- The controlling expression for a
  487.       loop (either the expression within a while clause or the
  488.       second expression within a for clause) evaluates initially
  489.       to 0 and so it appears as though the loop is never
  490.       entered.
  491. 682   sizeof applied to a parameter 'Symbol' whose type is a
  492.       sized array  -- If a parameter is typed as an array it is
  493.       silently promoted to pointer.  Taking the size of such an
  494.       array will actually yield the size of a pointer.
  495.       Consider, for example:
  496. unsigned f( char a[100] ) { return sizeof(a); }
  497.       Here it looks as though function f() will return the value
  498.       100 but it will actually return the size of a pointer,
  499.       which is usually 4.
  500. 683   function 'Symbol' #define'd  -- This message is issued
  501.       whenever the name of a function with some semantic
  502.       association is defined as a macro.  For example:
  503.   #define strlen mystrlen
  504.       will raise this message.  The problem is that the
  505.       semantics defined for strlen will then be lost.  Consider
  506.       this message an alert to transfer semantics from strlen to
  507.       mystrlen, using -function(strlen, mystrlen) The message
  508.       will be issued for built-in functions (with built-in
  509.       semantics) or for user-defined semantics.  The message
  510.       will not be issued if the function is defined to be a
  511.       function with a similar name but with underscores either
  512.       appended or prepended or both.  For example:
  513.   #define strlen __strlen
  514.       will not produce this message.  It will produce Info  828
  515.       instead.
  516. 684   Passing address of auto variable 'Symbol' into caller
  517.       space  -- The address of an auto variable was passed via
  518.       assignment into a location specified by the caller to the
  519.       function.  For example:
  520. void f( int *a[] )
  521.    {
  522.    int n;
  523.    a[1] = &n;
  524.    }
  525.       Here the address of an auto variable (n) is being passed
  526.       into the second element of the array passed to the
  527.       function f.  This looks suspicious because upon return the
  528.       array will contain a pointer to a variable whose lifetime
  529.       is over.  It is possible that this is benign since it
  530.       could be that the caller to f() is merely passing in a
  531.       working space to be discarded upon return.  If this is the
  532.       case, you can suppress the message for function f() using
  533.       the option
  534. -efunc(684,f)
  535.       See also Warning  604.
  536. 685   Relational operator 'String,' always evaluates to 'String'
  537.       -- The first String is one of '>', '>=', '<' or '<=' and
  538.       identifies the relational operator.  The second string is
  539.       one of 'True' or 'False'.  The message is given when an
  540.       expression is compared to a constant and the precision of
  541. the expression indicates that the test will always succeed  or
  542. always fail.  For example,
  543. char ch;
  544. ...
  545. if( ch >= -128 ) ...
  546.       In this example, the precision of char ch is 8 bits signed
  547.       (assuming the fcu flag has been left in the OFF state) and
  548.       hence it has a range of values from -128 to 127 inclusive.
  549.       Hence the test is always True.
  550.       Note that, technically, ch is promoted to int before
  551.       comparing with the constant.  For the purpose of this
  552.       comparison we consider only the underlying precision.  As
  553.       another example, if u is an unsigned int then
  554. if( (u & 0xFF) > 0xFF ) ...
  555.       will also raise message 685 because the expression on the
  556.       left hand side has an effective precision of 16 bits.
  557. 17.5  C Informational Messages
  558. 701   Shift left of signed quantity (int)  -- Shifts are
  559.       normally accomplished on unsigned operands.
  560. 702   Shift right of signed quantity (int)  -- Shifts are
  561.       normally accomplished on unsigned operands.  Shifting an
  562.       int right is machine dependent (sign fill vs. zero fill).
  563. 703   Shift left of signed quantity (long)  -- Shifts are
  564.       normally accomplished on unsigned operands.
  565. 704   Shift right of signed quantity (long)  -- Shifts are
  566.       normally accomplished on unsigned operands.  Shifting a
  567.       long right is machine dependent (sign fill vs. zero fill).
  568. 708   union initialization  -- There was an attempt to
  569.       initialize the value of a union.  This may not be
  570.       permitted in some older C compilers. This is because of
  571.       the apparent ambiguity: which member should be
  572.       initialized. The standard interpretation is to apply the
  573.       initialization to the first subtype of the union.
  574. 712   Loss of precision (Context) (Type to Type)  -- An
  575.       assignment (or implied assignment, see Context) is being
  576.       made between two integral quantities in which the first
  577.       Type is larger than the second Type.  A cast will suppress
  578.       this message.
  579. 713   Loss of precision (Context) (Type to Type)  -- An
  580.       assignment (or implied assignment, see Context) is being
  581.       made from an unsigned quantity to a signed quantity, that
  582.       will result in the possible loss of one bit of integral
  583.       precision such as converting from unsigned int to int.  A
  584.       cast will suppress the message.
  585. 714   Symbol 'Symbol' (Location) not referenced  -- The named
  586.       external variable or external function was defined but not
  587.       referenced.  This message is suppressed for unit checkout
  588.       (-u option).
  589. 715   Symbol 'Symbol' (Location) not referenced  -- The named
  590.       formal parameter was not referenced.
  591. 716   while(1) ...  -- A construct of the form while(1) ... was
  592.       found. Whereas this represents a constant in a context
  593.       expecting a Boolean, it may reflect a programming policy
  594.       whereby infinite loops are prefixed with this construct.
  595.       Hence it is given a separate number and has been placed in
  596.       the informational category. The more conventional form of
  597.       infinite loop prefix is for(;;)
  598. 717   do ... while(0)  -- Whereas this represents a constant in
  599.       a context expecting a Boolean, this construct is probably
  600.       a deliberate attempt on the part of the programmer to
  601.       encapsulate a sequence of statements into a single
  602.       statement, and so it is given a separate error message.
  603.       [22 section 20.7]  For example:
  604. #define f(k) do {n=k; m=n+1;} while(0)
  605.       allows f(k) to be used in conditional statements as in
  606. if(n>0) f(3);
  607. else f(2);
  608.       Thus, if you are doing this deliberately use -e717
  609. 718   Symbol 'Symbol' undeclared, assumed to return int  -- A
  610.       function was referenced without (or before) it had been
  611.       declared or defined within the current module.  This is
  612.       not necessarily an error and you may want to suppress such
  613.       messages (See Chapter 14.).  Note that by adding a
  614.       declaration to another module, you will not suppress this
  615.       message.  It can only be suppressed by placing a
  616.       declaration within the module being processed.
  617. 719   Too many arguments for format (Integer too many)  -- The
  618.       number of arguments to a function in the printf/scanf
  619.       family was more than what is specified in the format.
  620.       This message is similar to Warning  558, which alerts
  621.       users to situations in which there were too few arguments
  622.       for the format.  It receives a lighter Informational
  623.       classification because the additional arguments are simply
  624.       ignored.
  625. 720   Boolean test of assignment  -- An assignment was found in
  626.       a context that requires a Boolean (such as in an if() or
  627.       while() clause or as an operand to && or ||).  This may be
  628.       legitimate or it could have resulted from a mistaken use
  629.       of = for ==.
  630. 721   Suspicious use of ;  -- A semi-colon was found immediately
  631.       to the right of a right parenthesis in a construct of the
  632.       form if(e);.  As such it may be overlooked or confused
  633.       with the use of semi-colons to terminate statements.  The
  634.       message will be inhibited if the ';' is separated by at
  635.       least one blank from the ')'. Better, place it on a
  636.       separate line. See also message  548.
  637. 722   Suspicious use of ;  -- A semi-colon was found immediately
  638.       to the right of a right parenthesis in a construct of the
  639.       form while(e); or for(e;e;e);  As such it may be
  640.       overlooked or confused with the use of semi-colons to
  641.       terminate statements.  The message will be inhibited if
  642.       the ';' is separated by at least one blank from the ')'.
  643.       Better, place it on a separate line.
  644. 723   Suspicious use of =  -- A preprocessor definition began
  645.       with an = sign.  For example:
  646. #define LIMIT = 50
  647.       Was this intentional?  Or was the programmer thinking of
  648.       assignment when he wrote this?
  649. 725   Expected positive indentation from Location  -- The
  650.       current line was found to be aligned with, rather than
  651.       indented with respect to, the indicated line.  The
  652.       indicated line corresponds to a clause introducing a
  653.       control structure and statements within its scope are
  654.       expected to be indented with respect to it.  If tabs
  655.       within your program are other than 8 blanks you should use
  656.       the -t option (See Section 11.).
  657. 726   Extraneous comma ignored  -- A comma followed by a
  658.       right-brace within an enumeration is not a valid ANSI
  659.       construct.  The comma is ignored.
  660. 727   Symbol 'Symbol' (Location) not explicitly initialized  --
  661.       The named static variable (local to a function) was not
  662.       explicitly initialized before use.  The following remarks
  663.       apply to messages  728 and  729 as well as 727.  By no
  664.       explicit initialization we mean that there was no
  665.       initializer present in the definition of the object, no
  666.       direct assignment to the object, and no address operator
  667.       applied to the object or, if the address of the object was
  668.       taken, it was assigned to a pointer to const.  These
  669.       messages do not necessarily signal errors since the
  670.       implicit initialization for static variables is 0.
  671.       However, the messages are helpful in indicating those
  672.       variables that you had forgotten to initialize to a value.
  673.       To extract the maximum benefit from the messages we
  674.       suggest that you employ an explicit initializer for those
  675.       variables that you want to initialize to 0.  For example:
  676. static int n = 0;
  677.       For variables that will be initialized dynamically, do not
  678.       use an explicit initializer as in:
  679. static int m;
  680.       This message will be given for any array, struct or union
  681.       if no member or element has been assigned a value.
  682. 728   Symbol 'Symbol' (Location) not explicitly initialized  --
  683.       The named intra-module variable (static variable with file
  684.       scope) was not explicitly initialized.  See the comments
  685.       on message  727 for more details.
  686. 729   Symbol 'Symbol' (Location) not explicitly initialized  --
  687.       The named inter-module variable (external variable) was
  688.       not explicitly initialized.  See the comments on message
  689.       727 for more details.  This message is suppressed for unit
  690.       checkout (-u).
  691. 730   Boolean argument to function  -- A Boolean was used as an
  692.       argument to a function.  Was this intended?  Or was the
  693.       programmer confused by a particularly complex conditional
  694.       statement.  Experienced C programmers often suppress this
  695.       message.  This message is given only if the associated
  696.       parameter is not declared bool.
  697. 731   Boolean argument to equal/not equal  -- A Boolean was used
  698.       as an argument to == or !=.  For example:
  699. if( (a > b) == (c > d) ) ...
  700.       tests to see if the inequalities are of the same value.
  701.       This could be an error as it is an unusual use of a
  702.       Boolean (see Warnings  503 and  514) but it may also be
  703.       deliberate since this is the only way to efficiently
  704.       achieve equivalence or exclusive or.  Because of this
  705.       possible use, the construct is given a relatively mild
  706.       'informational' classification.  If the Boolean argument
  707.       is cast to some type, this message is not given.
  708. 732   Loss of sign (Context) (Type to Type)  -- An assignment
  709.       (or implied assignment, see Context) is made from a signed
  710.       quantity to an unsigned quantity.  Also, it could not be
  711.       determined that the signed quantity had no sign.  For
  712.       example:
  713. u  =  n;      /* Info 732 */
  714. u  =  4;      /*  OK      */
  715.       where u is unsigned and n is not, warrants a message only
  716.       for the first assignment, even though the constant 4 is
  717.       nominally a signed int.
  718.       Make sure that this is not an error (that the assigned
  719.       value is never negative) and then use a cast (to unsigned)
  720.       to remove the message.
  721. 733   Assigning address of auto variable 'Symbol' to outer scope
  722.       symbol 'Symbol'  -- The address of an auto variable is
  723.       only valid within the block in which the variable is
  724.       declared.  An address to such a variable has been assigned
  725.       to a variable that has a longer life expectancy.  There is
  726.       an inherent danger in doing this.
  727. 734   Loss of precision (Context) (Integer bits to Integer bits)
  728.       -- An assignment is being made into an object smaller than
  729.       an int.  The information being assigned is derived from
  730.       another object or combination of objects in such a way
  731.       that information could potentially be lost.  The number of
  732.       bits given does not count the sign bit.  For example if ch
  733.       is a char and n is an int then:
  734. ch  =  n;
  735.       will trigger this message whereas:
  736. ch  =  n & 1;
  737.       will not.  To suppress the message a cast can be made as in:
  738. ch  =  (char) n;
  739.       You may receive notices involving multiplication and shift
  740.       operators with subinteger variables.  For example:
  741. ch = ch << 2
  742. ch = ch * ch
  743.       where, for example, ch is an unsigned char.  These can be
  744.       suppressed by using the flag +fpm (precision of an
  745.       operator is bound by the maximum of its operands).  See
  746.       Section 5.
  747. 735   Loss of precision (Context) (Integer bits to Integer bits)
  748.       -- An assignment (or implied assignment, see Context) is
  749.       made from a long double to a double.  Using a cast will
  750.       suppress the message.  The number of bits includes the
  751.       sign bit.
  752. 736   Loss of precision (Context) (Integer bits to Integer bits)
  753.       -- An assignment (or implied assignment, see Context) is
  754.       being made to a float from a value or combination of
  755.       values that appear to have higher precision than a float.
  756.       You may suppress this message by using a cast.  The number
  757.       of bits includes the sign bit.
  758. 737   Loss of sign in promotion from Type to Type  -- An
  759.       unsigned quantity was joined with a signed quantity in a
  760.       binary operator (or 2nd and 3rd arguments to the
  761.       conditional operator ? :) and the signed quantity is
  762.       implicitly converted to unsigned.  The message will not be
  763.       given if the signed quantity is an unsigned constant, a
  764.       Boolean, or an expression involving bit manipulation.  For
  765.       example,
  766. u  &  ~0xFF
  767.       where u is unsigned does not draw the message even though
  768.       the operand on the right is technically a signed integer
  769.       constant.  It looks enough like an unsigned to warrant not
  770.       giving the message.
  771.       This mixed mode operation could also draw Warnings  573 or
  772.       574 depending upon the operator involved.
  773.       You may suppress the message with a cast but you should
  774.       first determine whether the signed value could ever be
  775.       negative or whether the unsigned value can fit within the
  776.       constraints of a signed quantity.
  777. 738   Symbol 'Symbol' (Location) not explicitly initialized  --
  778.       The named static local variable was not initialized before
  779.       being passed to a function whose corresponding parameter
  780.       is declared as pointer to const.  Is this an error or is
  781.       the programmer relying on the default initialization of 0
  782.       for all static items.  By employing an explicit
  783.       initializer you will suppress this message.  See also
  784.       message numbers  727 and  603.
  785. 739   Trigraph Sequence 'String' in literal (Quiet Change)  --
  786.       The indicated Trigraph (three-character) sequence was
  787.       found within a string.  This trigraph reduces to a single
  788.       character according to the ANSI standard.  This represents
  789.       a "Quiet Change" from the past where the sequence was not
  790.       treated as exceptional.  If you had no intention of
  791.       mapping these characters into a single character you may
  792.       precede the initial '?' with a backslash.  If you are
  793.       aware of the convention and you intend that the Trigraph
  794.       be converted you should suppress this informational
  795.       message.
  796. 740   Unusual pointer cast (incompatible indirect types)  -- A
  797.       cast is being made to convert one pointer to another such
  798.       that neither of the pointers is a generic pointer (neither
  799.       is pointer to char, unsigned char, or void) and the
  800.       indirect types are truly different.  The message will not
  801.       be given if the indirect types differ merely in signedness
  802.       (e.g., pointer to unsigned versus pointer to int) or in
  803.       qualification (e.g., pointer to const int versus pointer
  804.       to int).  The message will also not be given if one of the
  805.       indirect types is a union.
  806.       The main purpose of this message is to report possible
  807.       problems for machines in which pointer to char is rendered
  808.       differently from pointer to word.  Consider casting a
  809.       pointer to pointer to char to a pointer to pointer to
  810.       word.  The indirect bit pattern remains unchanged.
  811.       A second reason is to identify those pointer casts in
  812.       which the indirect type doesn't seem to have the proper
  813.       bit pattern such as casting from a pointer to int to a
  814.       pointer to double.
  815.       If you are not interested in running on machines in which
  816.       char pointers are fundamentally different from other
  817.       pointers then you may want to suppress this message.  You
  818.       can also suppress this message by first casting to char
  819.       pointer or to void pointer but this is only recommended if
  820.       the underlying semantics are right.
  821. 741   Unusual pointer cast (function qualification)  -- A cast
  822.       is being made between two pointers such that their
  823.       indirect types differ in one of the Microsoft qualifiers:
  824.       pascal, fortran, cdecl and interrupt.  If this is not an
  825.       error you may cast to a more neutral pointer first such as
  826.       a void *.
  827. 742   Multiple character constant  -- A character constant was
  828.       found that contained multiple characters, e.g., 'ab'.
  829.       This is legal C but the numeric value of the constant is
  830.       implementation defined.  It may be safe to suppress this
  831.       message because, if more characters are provided than what
  832.       can fit in an int, message number  25 is given.
  833. 743   Negative character constant  -- A character constant was
  834.       specified whose value is some negative integer.  For
  835.       example, on machines where a byte is 8 bits, the character
  836.       constant 'xFF' is flagged because its value (according to
  837.       the ANSI standard) is -1 (its type is int).  Note that its
  838.       value is not 0xFF.
  839. 744   switch statement has no default  -- A switch statement has
  840.       no section labeled default:.  Was this an oversight?  It
  841.       is standard practice in many programming groups to always
  842.       have a default: case.  This can lead to better (and
  843.       earlier) error detection.  One way to suppress this
  844.       message is by introducing a vacuous default: break;
  845.       statement.  If you think this adds too much overhead to
  846.       your program, think again.  In all cases tested so far,
  847.       the introduction of this statement added absolutely
  848.       nothing to the overall length of code.  If you accompany
  849.       the vacuous statement with a suitable comment, your code
  850.       will at least be more readable.
  851.       This message is not given if the control expression is an
  852.       enumerated type.  In this case, all enumerated constants
  853.       are expected to be represented by case statements, else
  854.       787 will be issued.
  855. 745   function 'Name' has no explicit type or class, int assumed
  856.       -- A function declaration or definition contained no
  857.       explicit type.  Was this deliberate?   If the flag fdr
  858.       (deduce return mode, see Section 5.5 Flag Options) is
  859.       turned on, this message is suppressed.
  860. 746   call to function 'Name' not made in the presence of a
  861.       prototype  -- A call to a function is not made in the
  862.       presence of a prototype.  This does not mean that
  863.       PC-lint/FlexeLint is unaware of any prototype; it means
  864.       that a prototype is not in a position for a compiler to
  865.       see it.  If you have not adopted a strict prototyping
  866.       convention you will want to suppress this message with
  867.       -e746.
  868. 747   Significant prototype coercion (Context) Type to Type  --
  869.       The type specified in the prototype differed from the type
  870.       provided as an argument in some significant way.  Usually
  871.       the two types are arithmetic of differing sizes or one is
  872.       float and the other integral.  This is flagged because if
  873.       the program were to be translated by a compiler that does
  874.       not support prototype conversion, the conversion would not
  875.       be performed.  See also Section 17.6 C Elective Notes  917
  876.       and  918.
  877. 748   Symbol 'Symbol' (Location) is a register variable used
  878.       with setjmp  -- The named variable is a register variable
  879.       and is used within a function that calls upon setjmp.
  880.       When a subsequent longjmp is issued the values of register
  881.       variables may be unpredictable.  If this error is not sup
  882.       pressed for this variable, the variable is marked as
  883.       uninitialized at this point in the program.
  884. More information on messages 749-769 can be found in Section 11.8
  885. Weak Definials.
  886. 749   local enumeration constant 'Symbol' (Location) not
  887.       referenced  -- A member (name provided as Symbol) of an
  888.       enum was defined in a module but was not otherwise used
  889.       within that module.  A 'local' member is one that is not
  890.       defined in a header file.  Compare with messages  754 and
  891.       769.
  892. 750   local macro 'Symbol' (Location) not referenced  -- A
  893.       'local' macro is one that is not defined in a header file.
  894.       The macro is not referenced throughout the module in which
  895.       it is defined.
  896. 751   local typedef 'Symbol' (Location) not referenced  -- A
  897.       'local' typedef symbol is one that is not defined in any
  898.       header file.  It may have file scope or block scope but it
  899.       was not used through its scope.
  900. 752   local declarator 'Symbol' (Location) not referenced  -- A
  901.       'local' declarator symbol is one declared in a declaration
  902.       appearing in the module file itself as opposed to a header
  903.       file.  The symbol may have file scope or may have block
  904.       scope.  But it wasn't referenced.
  905. 753   local struct, union or enum tag 'Symbol' (Location) not
  906.       referenced  -- A 'local' tag is one not defined in a
  907.       header file.  Since its definition appeared, why was it
  908.       not used?   Use of a tag is implied by the use of any of
  909.       its members.
  910. 754   local structure member 'Symbol' (Location) not referenced
  911.       -- A member (name provided as Symbol) of a struct or union
  912.       was defined in a module but was not otherwise used within
  913.       that module.  A 'local' member is one that is not defined
  914.       in a header file.  See message  768.
  915. 755   global macro 'Symbol' (Location) not referenced  -- A
  916.       'global' macro is one defined in a header file.  This
  917.       message is given for macros defined in non-library
  918.       headers.  The macro is not used in any of the modules
  919.       comprising the program.  This message is suppressed for
  920.       unit checkout (-u option).  See Section 11.
  921. 756   global typedef 'Symbol' (Location) not referenced  -- This
  922.       message is given for a typedef symbol declared in a
  923.       non-library header file.  The symbol is not used in any of
  924.       the modules comprising a program.  This message is
  925.       suppressed for unit checkout (-u option).
  926. 757   global declarator 'Symbol' (Location) not referenced  --
  927.       This message is given for objects that have been declared
  928.       in non-library header files and that have not been used in
  929.       any module comprising the program being checked.  The
  930.       message is suppressed for unit checkout (-u).
  931. 758   global struct, union or enum tag 'Symbol' (Location) not
  932.       referenced  -- This message is given for struct, union and
  933.       enum tags that have been defined in non-library header
  934.       files and that have not been used in any module comprising
  935.       the program.  The message is suppressed for unit checkout
  936.       (-u).
  937. 759   header declaration for symbol 'Symbol' (Location) could be
  938.       moved from header to module  -- This message is given for
  939.       declarations, within non-library header files, that are
  940.       not referenced outside the defining module.  Hence, it can
  941.       be moved inside the module and thereby 'lighten the load'
  942.       on all modules using the header.  This message is only
  943.       given when more than one module is being linted.
  944. 760   Redundant macro 'Symbol' defined identically at Location
  945.       -- The given macro was defined earlier (location given) in
  946.       the same way and is hence redundant.
  947. 761   Redundant typedef 'Symbol' previously declared at Location
  948.       -- A typedef symbol has been typedefed earlier at the
  949.       given location.  Although the declarations are consistent
  950.       you should probably remove the second.
  951. 762   Redundantly declared symbol 'Symbol' previously declared
  952.       at Location  -- A declaration for the given symbol was
  953.       found to be consistent with an earlier declaration in the
  954.       same scope.  This declaration adds nothing new and it can
  955.       be removed.
  956. 763   Redundant declaration for symbol 'Symbol' previously
  957.       declared at Location  -- A tag for a struct, union or enum
  958.       was defined twice in the same module (consistently).  The
  959.       second one can be removed.
  960. 764   switch statement does not have a case  -- A switch
  961.       statement has been found that does not have a case
  962.       statement associated with it (it may or may not have a
  963.       default statement).  This is normally a useless construct.
  964. 765   external 'Symbol' (Location) could be made static  -- An
  965.       external symbol was referenced in only one module.  It was
  966.       not declared static (and its type is not qualified with
  967.       the Microsoft keyword __export).  Some programmers like to
  968.       make static every symbol they can, because this lightens
  969.       the load on the linker.  It also represents good
  970.       documentation.  On the other hand, you may want the symbol
  971.       to remain external because debuggers often work only on
  972.       external names.  It's possible, using macros, to have the
  973.       best of both worlds; see Section 11.8.3 staticable.
  974. 766   Include of header file FileName not used in module String
  975.       -- The named header file was directly #include'd in the
  976.       named module but the #include can be removed because it
  977.       was not used in processing the named module or in any
  978.       header included by the module.  It contained no macro,
  979.       typedef, struct, union or enum tag or component, or
  980.       declaration referenced by the module.  One of the reasons
  981.       a particular #include can be removed is because it had
  982.       been included by an earlier header file.  Warning  537 can
  983.       be used to detect such cases.  See also Info messages
  984.       964,  966 and Section 11.8.1 Unused Headers.
  985. 767   macro 'Symbol' was defined differently in another module
  986.       (Location)  -- Two macros processed in two different
  987.       modules had inconsistent definitions.
  988. 768   global struct member 'Symbol' (Location) not referenced
  989.       -- A member (name provided as Symbol) of a struct or union
  990.       appeared in a non-library header file but was not used in
  991.       any module comprising the program.  This message is
  992.       suppressed for unit checkout.  Since struct's may be
  993.       replicated in storage, finding an unused member can pay
  994.       handsome storage dividends.  However, many structures
  995.       merely reflect an agreed upon convention for accessing
  996.       storage and for any one program many members are unused.
  997.       In this case, receiving this message can be a nuisance.
  998.       One convenient way to avoid unwanted messages (other than
  999.       the usual -e and -esym) is to always place such structures
  1000.       in library header files.  Alternatively, you can place the
  1001.       struct within a ++flb ... --flb sandwich to force it to be
  1002.       considered library.
  1003. 769   global enumeration constant 'Symbol' (Location) not
  1004.       referenced  -- A member (name provided as Symbol) of an
  1005.       enum appeared in a non-library header file but was not
  1006.       used in any module comprising the program.  This message
  1007.       is suppressed for unit checkout.  There are reasons why a
  1008.       programmer may occasionally want to retain an unused enum
  1009.       and for this reason this message is distinguished from
  1010.       768 (unused member).  See message  768 for ways of
  1011.       selectively suppressing this message.
  1012. 770   tag 'Symbol' defined identically at Location  -- The
  1013.       struct, union, or enum tag Symbol was defined identically
  1014.       in different locations (usually two different files).
  1015.       This is not an error but it is not necessarily good
  1016.       programming practice either.  It is better to place common
  1017.       definitions of this kind in a header file where they can
  1018.       be shared among several modules.  If you do this, you will
  1019.       not get this message.  Note that if the tag is defined
  1020.       differently in different scopes, you will receive warning
  1021.       631 rather than this message.
  1022. 771   Symbol 'Symbol' (Location) conceivably not initialized  --
  1023.       The named symbol, declared at Location, was initialized in
  1024.       the main portion of a control loop (while, for, or do) and
  1025.       subsequently used outside the loop.  If it is possible for
  1026.       the main body of the loop to not be fully executed, then
  1027.       the given symbol would remain uninitialized resulting in
  1028.       an error.
  1029.       PC-lint/FlexeLint does not do a great job of evaluating
  1030.       expressions and hence may not recognize that a loop is
  1031.       executed at least once.  This is particularly true after
  1032.       initializing an array.  Satisfy yourself that the loop is
  1033.       executed and then suppress the message.  You may wish to
  1034.       suppress the message globally with -e771 or just for
  1035.       specific symbols using -esym.  Don't forget that a simple
  1036.       assignment statement may be all that's needed to suppress
  1037.       the message.  See Section 9.
  1038. 772   Symbol 'Symbol' (Location) conceivably not initialized  --
  1039.       The address of the named Symbol was passed to a function
  1040.       expecting to receive a pointer to a const item.  This
  1041.       requires the Symbol to have been initialized.  See Warning
  1042.       603 for an explanation of the dangers of such a construct.
  1043.       See Informational message  771 for an explanation of
  1044.       "conceivably not initialized."
  1045. 773   Expression-like macro 'Symbol' not parenthesized  -- A
  1046.       macro that appeared to be an expression contained
  1047.       unparenthesized binary operators and therefore may result
  1048.       in unexpected associations when used with other operators.
  1049.       For example,
  1050. #define A  B + 1
  1051.       may be used later in the context:
  1052. f( A * 2 );
  1053.       with the surprising result that B+2 gets passed to f and
  1054.       not the (B+1)*2  Corrective action is to define A as:
  1055. #define A  (B + 1)
  1056.       Lowest precedence binary operators are not reported upon.
  1057.       Thus:
  1058. #define A  s.x
  1059.       does not elicit this message because this case does not
  1060.       seem to represent a problem.  Also, unparenthesized unary
  1061.       operators (including casts) do not generate this message.
  1062.       Information about such unparenthesized parameters can be
  1063.       found by enabling Elective Note  973.   [22 section 20.5]
  1064. 774   Boolean within 'String' always evaluates to [True/False]
  1065.       -- The indicated clause (String is one of if, while or for
  1066.       (2nd expression)) has an argument that appears to always
  1067.       evaluate to either 'True' or 'False' (as indicated in the
  1068.       message).  Information is gleaned from a variety of
  1069.       sources including prior assignment statements and
  1070.       initializers.  Compare this with message  506, which is
  1071.       based on testing constants or combinations of constants.
  1072.       Also compare with the Elective Note  944, which can
  1073.       sometimes provide more detailed information.  See Section 9.
  1074. 775   non-negative quantity cannot be less than zero  -- A
  1075.       non-negative quantity is being compared for being <=0.
  1076.       This is a little suspicious since a non-negative quantity
  1077.       can be equal to 0 but never less than 0.  The non-negative
  1078.       quantity may be of type unsigned or may have been promoted
  1079.       from an unsigned type or may have been judged not to have
  1080.       a sign by virtue of it having been AND'ed with a quantity
  1081.       known not to have a sign bit an enum that may not be
  1082.       negative, etc.  See also Warning  568.
  1083. 776   Possible truncation of addition  -- An int expression
  1084.       (signed or unsigned) involving addition or subtraction is
  1085.       converted to long implicitly or explicitly.  Moreover, the
  1086.       precision of a long is greater than that of int.  If an
  1087.       overflow occurred, information would be lost.  Either cast
  1088.       one of the operands to some form of long or cast the
  1089.       result to some form of int.
  1090.       See Warning  647 for a further description and an example
  1091.       of this kind of error.  See also messages  790 and  942.
  1092. 777   Testing float's for equality  -- This message is issued
  1093.       when the operands of operators == and != are some form of
  1094.       floating type (float, double, or long double).  Testing
  1095.       for equality between two floating point quantities is
  1096.       suspect because of round-off error and the lack of perfect
  1097.       representation of fractions.  If your numerical algorithm
  1098.       calls for such testing turn the message off.  The message
  1099.       is suppressed when one of the operands can be represented
  1100.       exactly, such as 0 or 13.5.
  1101. 778   Constant expression evaluates to 0 in operation: String
  1102.       -- A constant expression involving addition, subtraction,
  1103.       multiplication, shifting, or negation resulted in a 0.
  1104.       This could be a purposeful computation but could also have
  1105.       been unintended.  If this is intentional, suppress the
  1106.       message.  If one of the operands is 0, Elective Note  941
  1107.       may be issued rather than a 778.
  1108. 779   String constant in comparison operator: Operator  -- A
  1109.       string constant appeared as an argument to a comparison
  1110.       operator.  For example:
  1111. if( s == "abc" ) ...
  1112.       This is usually an error.  Did the programmer intend to
  1113.       use strcmp?  It certainly looks suspicious. At the very
  1114.       least, any such comparison is bound to be
  1115.       machine-dependent.  If you cast the string constant, the
  1116.       message is suppressed.
  1117. 780   Vacuous array element  -- A declaration of an array looks
  1118.       suspicious because the array element is an array of 0
  1119.       dimension.  For example:
  1120. extern int a[][];
  1121. extern int a[10][];
  1122.       will both emit this message but
  1123. extern int a[][10];
  1124.       will not.  In the latter case, proper array accessing will
  1125.       take place even though the outermost dimension is missing.
  1126.       If extern were omitted, the construct would be given a
  1127.       more serious error message.
  1128. 781   Inconsistent use of tag 'Symbol' conflicts with Location
  1129.       -- A tag specified as a union, struct, or enum was
  1130.       specified as some other type in another module (location
  1131.       given by Location).  For example, if tag is specified as
  1132.       union in one module and is specified as struct in the
  1133.       current module you will get this message.  See also
  1134.       Warning  407.
  1135. 782   Line exceeds Integer characters  -- An internal limit on
  1136.       the size of the input buffer has been reached.  The
  1137.       message contains the maximum permissible size.  This does
  1138.       not necessarily mean that the input will be processed
  1139.       erroneously.  Additional characters will be read on a
  1140.       subsequent read.  However the line sequence numbers
  1141.       reported on messages will be incorrect.
  1142. 783   Line does not end with new-line  -- This message is issued
  1143.       when an input line is not terminated by a new-line or when
  1144.       a NUL character appears within an input line.  When input
  1145.       lines are read, an fgets is used.  A strlen call is made
  1146.       to determine the number of characters read.  If the
  1147.       new-line character is not seen at the presumed end, this
  1148.       message is issued.  If your editor is in the habit of not
  1149.       appending new-lines onto the end of the last line of the
  1150.       file then suppress this message.  Otherwise, examine the
  1151.       file for NUL characters and eliminate them.
  1152. 784   Nul character truncated from string  -- During
  1153.       initialization of an array with a string constant there
  1154.       was not enough room to hold the trailing NUL character.
  1155.       For example:
  1156. char a[3] = "abc";
  1157.       would evoke such a message.  This may not be an error
  1158.       since the easiest way to do this initialization is in the
  1159.       manner indicated.  It is more convenient than:
  1160. char a[3] = { 'a', 'b', 'c' };
  1161.       On the other hand, if it really is an error it may be
  1162.       especially difficult to find.
  1163. 785   Too few initializers for aggregate  -- The number of
  1164.       initializers in a brace-enclosed initializer was less than
  1165.       the number of items in the aggregate.  Default
  1166.       initialization is taken.  An exception is made with the
  1167.       initializer {0}.  This is given a separate message number
  1168.       in the Elective Note category ( 943).  It is normally
  1169.       considered to be simply a stylized way of initializing all
  1170.       members to 0.
  1171. 786   String concatenation within initializer  -- Although it is
  1172.       perfectly 'legal' to concatenate string constants within
  1173.       an initializer, this is a frequent source of error.
  1174.       Consider:
  1175. char *s[] = { "abc" "def" };
  1176.       Did the programmer intend to have an array of two strings
  1177.       but forget the comma separator?  Or was a single string
  1178.       intended?
  1179. 787   enum constant 'Symbol' not used within switch  -- A switch
  1180.       expression is an enumerated type and at least one of the
  1181.       enumerated constants was not present as a case label.
  1182.       Moreover, no default case was provided.
  1183. 788   enum constant 'Symbol' not used within defaulted switch
  1184.       -- A switch expression is an enumerated type and at least
  1185.       one of the enumerated constants was not present as a case
  1186.       label.  However, unlike Info  787, a default case was
  1187.       provided.  This is a mild form of the case reported by
  1188.       Info  787.  The user may thus elect to inhibit this mild
  1189.       form while retaining Info  787.
  1190. 789   Assigning address of auto variable 'Symbol' to static  --
  1191.       The address of an auto variable (Symbol) is being assigned
  1192.       to a static variable.  This is dangerous because the
  1193.       static variable will persist after return from the
  1194.       function in which the auto is declared but the auto will
  1195.       be, in theory, gone.  This can prove to be among the
  1196.       hardest bugs to find.  If you have one of these, make cer
  1197.       tain there is no error and use -esym to suppress the
  1198.       message for a particular variable.
  1199. 790   Suspicious truncation, integral to float  -- This message
  1200.       is issued when it appears that there may have been an
  1201.       unintended loss of information during an operation
  1202.       involving integrals, the result of which is later
  1203.       converted to a floating point quantity.  The operations
  1204.       that are scrutinized and reported upon by this message
  1205.       are:  shift left and multiplication. Addition and
  1206.       subtraction are covered by Elective Note  942. See also
  1207.       messages  647 and  776.
  1208. 791   unusual option sequence  -- A temporary message
  1209.       suppression option (one having the form:  !e...) followed
  1210.       a regular option.  Was this intended?
  1211. 792   void cast of void expression  -- A void expression has
  1212.       been cast to void.  Was this intended?
  1213. 793   ANSI limit of 'String' 'Name' exceeded  -- Some ANSI limit
  1214.       has been exceeded.  These limits are described in Section
  1215.       2.2.4.1 of the ANSI C Standard.  Programs exceeding these
  1216.       limits are not considered maximally portable.  However,
  1217.       they may work for individual compilers.
  1218.       Many large programs exceed the ANSI limit of 511 external
  1219.       identifiers.  This will result in message 793  "ANSI limit
  1220.       of 511 'external identifiers' exceeded".  It may not be
  1221.       obvious how to inhibit this message for identifiers while
  1222.       leaving other limits in a reportable state.  The second
  1223.       parameter of the message is designated Name and so the
  1224.       -esym may be used.  Because the symbol contains a blank,
  1225.       quotes must be used.  The option becomes:
  1226. -"esym(793,external identifiers)"
  1227. 794   Conceivable use of null pointer 'Symbol' in [left/right]
  1228.       argument to operator 'String'  Reference  -- From
  1229.       information gleaned from earlier statements it is
  1230.       conceivable that a null pointer (a pointer whose value is
  1231.       0) can be used in a context where null pointers are
  1232.       inappropriate.  In the case of binary operators one of the
  1233.       words 'left' or 'right' is used to designate which operand
  1234.       is null.  Symbol identifies the pointer variable that may
  1235.       be NULL.  This is similar to messages  413 and  613 and
  1236.       differs from them in that the likelihood is not as great.
  1237.       For example:
  1238.     int *p = 0;
  1239.     int i;
  1240.     for( i = 0; i < n; i++ )
  1241.        p = &a[i];
  1242.     *p = 0;
  1243.       If the body of the for loop is never taken then p remains
  1244.       null.
  1245. 795   Conceivable division by 0  -- In a division or modulus
  1246.       operation the division is deduced to be conceivably 0.
  1247.       See Section 9.2 Value Tracking for the meaning of
  1248.       "conceivable".
  1249. 796   Conceivable access of out-of-bounds pointer ('Integer'
  1250.       beyond end of data) by operator 'String'  -- An
  1251.       out-of-bounds pointer may conceivably have been accessed.
  1252.       See message  415 for a description of the parameters
  1253.       Integer and String.  For example:
  1254.     int a[10];
  1255.     int j = 100;
  1256.     for( i = 0; i < n; i++ )
  1257.        j = n;
  1258.     a[j] = 0;
  1259.       Here, the access to a[j] is flagged because it is
  1260.       conceivable that the for loop is not executed leaving the
  1261.       unacceptable index of 100 in variable j.  This message is
  1262.       similar to messages  415 and  661 but differing from them
  1263.       by the degree of probability.
  1264. 797   Conceivable creation of out-of-bounds pointer ('Integer'
  1265.       beyond end of data) by operator 'String'  -- An
  1266.       out-of-bounds pointer is potentially being created.  See
  1267.       message  415 for a description of the parameters Integer
  1268.       and String.  See message  796 for an example of how a
  1269.       probability can be considered 'conceivable'.  See also
  1270.       message  416 and/or Section 9.2 Value Tracking) for a
  1271.       description of the difference between pointer 'creation'
  1272.       and pointer 'access'.
  1273. 798   Redundant character 'Char'  -- The indicated character
  1274.       char is redundant and can be eliminated from the input
  1275.       source.  A typical example is a backslash on a line by
  1276.       itself.
  1277. 799   numerical constant 'Integer' larger than unsigned long  --
  1278.       An integral constant was found to be larger than the
  1279.       largest value allowed for unsigned long quantities.  By
  1280.       default, an unsigned long is 4 bytes but can be
  1281.       respecified via the option -sl#.  If the long long type is
  1282.       permitted (see option +fll) this message is automatically
  1283.       suppressed.  See also message  417.
  1284. 801   Use of goto is deprecated  -- A goto was detected.  Use of
  1285.       the goto is not considered good programming practice by
  1286.       most authors and its use is normally discouraged.  There
  1287.       are a few cases where the goto can be effectively employed
  1288.       but often these can be rewritten just as effectively
  1289.       without the goto.  The use of goto's can have a
  1290.       devastating effect on the structure of large functions
  1291.       creating a mass of spaghetti-like confusion.  For this
  1292.       reason its use has been banned in many venues.
  1293. 802   Conceivably passing a null pointer to function 'Symbol',
  1294.       Context Reference  -- A NULL pointer is conceivably being
  1295.       passed to a function identified by Symbol.  The argument
  1296.       in question is given by Context.  The function is either a
  1297.       library function designed not to receive a NULL pointer or
  1298.       a user function dubbed so via the option -function.  See
  1299.       Section 10.  See Section 9.2 Value Tracking for the
  1300.       meaning of 'conceivable'.
  1301. 803   Conceivable data overrun for function 'Symbol', argument
  1302.       Integer exceeds argument Integer Reference  -- This
  1303.       message is for data transfer functions such as memcpy,
  1304.       strcpy, fgets, etc. when the size indicated by the first
  1305.       cited argument (or arguments) can conceivably exceed the
  1306.       size of the buffer area cited by the second.  The message
  1307.       may also be issued for user functions via the -function
  1308.       option.  See Section 10.  See Section 9.2 Value Tracking
  1309.       for the meaning of 'conceivable'.
  1310. 804   Conceivable access beyond array for function 'Symbol',
  1311.       argument Integer exceeds Integer Reference  -- This
  1312.       message is issued for several library functions (such as
  1313.       fwrite, memcmp, etc) wherein there is conceivably an
  1314.       attempt to access more data than exist.  For example, if
  1315.       the length of data specified in the fwrite call can exceed
  1316.       the size of the data specified.  The function is specified
  1317.       by Symbol and the arguments are identified by argument
  1318.       number.  See also Section 10.1 Function Mimicry (function)
  1319.       and Section 9.2 Value Tracking.
  1320. 805   Expected L"..." to initialize wide char string  -- An
  1321.       initializer for a wide character array or pointer did not
  1322.       use a preceding 'L'.  For example:
  1323.     wchar_t a[] = "abc";
  1324.       was found whereas
  1325.     wchar_t a[] = L"abc":
  1326.       was expected.
  1327. 806   Small bit field is signed rather than unsigned  -- A small
  1328.       bit field (less than an int wide) was found and the base
  1329.       type is signed rather than unsigned.  Since the most
  1330.       significant bit is a sign bit this practice can produce
  1331.       surprising results.  For example,
  1332.      struct { int b:1; } s;
  1333.      s.b = 1;
  1334.      if( s.b > 0 ) /* should succeed but actually fails */
  1335.      ...
  1336. 807   Conceivably passing to function 'Symbol' a negative value
  1337.       (Integer), Context Reference  -- An integral value that
  1338.       may conceivably be negative is being passed to a function
  1339.       that is expecting only positive values for a particular
  1340.       argument.  The message contains the name of the function
  1341.       (Symbol), the questionable value (Integer) and the
  1342.       argument number (Context).  The function may be a standard
  1343.       library function designed to accept only positive values
  1344.       such as malloc or memcpy (third argument), or may have
  1345.       been identified by the user as such through the -function
  1346.       or -sem options.  See message  422 for an example and
  1347.       further explanation.
  1348. 808   No explicit type given symbol 'Symbol' given, assumed int
  1349.       -- An explicit type was missing in a declaration.  Unlike
  1350.       Warning  601, the declaration may have been accompanied by
  1351.       a storage class or modifier (qualifier) or both.  For
  1352.       example:
  1353.     extern f(void);
  1354.       will draw message 808.  Had the extern not been present, a
  1355.       601 would have been raised.
  1356.      The keywords unsigned, signed, short and long are taken to
  1357.       be explicit type specifiers even though int is implicitly
  1358.       assumed as a base.
  1359. 809   Possible return of address of auto through variable
  1360.       'Symbol'  -- The value held by a pointer variable may have
  1361.       been the address of an auto variable.  It is normally
  1362.       incorrect to return the address of an item on the stack
  1363.       because the portion of the stack allocated to the
  1364.       returning function is subject to being obliterated after
  1365.       return.
  1366. 810   Arithmetic modification of custodial variable 'Symbol'  --
  1367.       We define the custodial variable as that variable directly
  1368.       receiving the result of a malloc or new or equivalent
  1369.       call.  It is inappropriate to modify such a variable
  1370.       because it must ultimately be free'ed or delete'ed.  You
  1371.       should first make a copy of the custodial pointer and then
  1372.       modify the copy.  The copy is known as an alias.
  1373. 811   Possible deallocation of pointer alias  -- A free or a
  1374.       delete was applied to a pointer that did not appear to be
  1375.       the custodial variable of the storage that had been
  1376.       allocated.  Please refer to message  810 for the
  1377.       definition of 'custodial variable'.  Deleting an alias
  1378.       pointer is bad because it can result in deleting the same
  1379.       area twice.  This can cause strange behavior at
  1380.       unpredictable times.  Always try to identify the custodial
  1381.       pointer as opposed to copies (or aliases) of it.  Then
  1382.       deallocate storage through the custodial pointer.  Modify
  1383.       only the alias pointers.
  1384. 812   static variable 'Symbol' has size 'Integer'  -- The amount
  1385.       of storage for a static symbol has reached or exceeded a
  1386.       value that was specified in a -size option ( See Section 5.).
  1387. 813   auto variable 'Symbol' in function 'Symbol' has size
  1388.       'Integer'  -- The amount of storage for an auto symbol has
  1389.       reached or exceeded a value that was specified in a -size
  1390.       option ( See Section 5.).
  1391. 815   Arithmetic modification of unsaved pointer  -- An
  1392.       allocation expression (malloc, calloc, new) is not
  1393.       immediately assigned to a variable but is used as an
  1394.       operand in some expression.  This would make it difficult
  1395.       to free the allocated storage.  For example: 
  1396. p = new X[n] + 2;
  1397.      will elicit this message.  A preferred sequence is:
  1398. q = new X[n];
  1399. p = q+2;
  1400.       In this way the storage may be freed via the custodial
  1401.       pointer q.
  1402.       Another example of a statement that will yield this
  1403.       message is:
  1404. p = new (char *) [n];
  1405.       This is a gruesome blunder on the part of the programmer.
  1406.       It does NOT allocate an array of pointers as a novice
  1407.       might think.  It is parsed as:
  1408. p = (new (char *)) [n];
  1409.       which represents an allocation of a single pointer
  1410.       followed by an index into this 'array' of one pointer.
  1411. 816   Non-ANSI format specification  -- A non-standard format
  1412.       specifier was found in a format-processing function such
  1413.       as printf or scanf.  Such a specifier could be unique to a
  1414.       particular compiler or could be a de facto standard but is
  1415.       not ANSI.
  1416. 817   Conceivably negative subscript (Integer) in operator
  1417.       'String'  -- An integer whose value was conceivably
  1418.       negative was added to an array or to a pointer to an
  1419.       allocated area (allocated by malloc, operator new, etc.)
  1420.       This message is not given for pointers whose origin is
  1421.       unknown since a negative subscript is in general legal.
  1422.       The addition could have occurred as part of a subscript
  1423.       operation or as part of a pointer arithmetic operation.
  1424.       The operator is denoted by String.  The value of the
  1425.       integer is given by Integer.
  1426. 818   Pointer parameter 'Symbol' (Location) could be declared
  1427.       ptr to const  -- As an example:
  1428. int f( int *p ) { return *p; }
  1429.       can be redeclared as:
  1430. int f( const int *p ) { return *p; }
  1431.       Declaring a parameter a pointer to const offers advantages
  1432.       that a mere pointer does not.  In particular, you can pass
  1433.       to such a parameter the address of a const data item.  In
  1434.       addition it can offer better documentation.
  1435.       Other situations in which a const can be added to a
  1436.       declaration are covered in messages  952,  953,  954 and 1764.
  1437. 820   Boolean test of a parenthesized assignment  -- A Boolean
  1438.       test was made on the result of an assignment and,
  1439.       moreover, the assignment was parenthesized.  For example:
  1440. if ( (a = b) ) ...  // Info 820
  1441.       will draw this informational whereas
  1442. if ( a = b ) ...    // Info 720
  1443.       (i.e. the unparenthesized case) will, instead, draw Info
  1444.       720.  We, of course, do not count the outer parentheses,
  1445.       required by the language, that always accompany the if
  1446.       clause.
  1447.       The reason for partitioning the messages in this fashion
  1448.       is to allow the programmer to adopt the convention,
  1449.       advanced by some compilers (in particular gcc), of always
  1450.       placing a redundant set of parentheses around any
  1451.       assignment that is to be tested.  In this case you can
  1452.       suppress Info 820 (via -e820) while still enabling Info 720.
  1453. 821   Right hand side of assignment not parenthesized  -- An
  1454.       assignment operator was found having one of the following
  1455.       forms:
  1456. a = b || c
  1457. a = b && c
  1458. a = b ? c : d
  1459.       Moreover, the assignment appeared in a context where a
  1460.       value was being obtained.  For example:
  1461. f( a = b ? c : d );
  1462.       The reader of such code could easily confuse the
  1463.       assignment for a test for equality.  To eliminate any such
  1464.       doubts we suggest parenthesizing the right hand side as in:
  1465. f( a = (b ? c : d) );
  1466. 825   control flows into case/default without -fallthrough
  1467.       comment  -- A common programming mistake is to forget a
  1468.       break statement between case statements of a switch.  For
  1469.       example:
  1470. case 'a':  a = 0;
  1471. case 'b':  a++;
  1472.       Is the fall through deliberate or is this a bug?  To
  1473.       signal that this is intentional use the -fallthrough
  1474.       option within a lint comment as in:
  1475. case 'a':  a = 0;
  1476.      //lint -fallthrough
  1477. case 'b':  a++;
  1478.       This message is similar to Warning  616 ("control flows
  1479.       into case/default") and is intended to provide a stricter
  1480.       alternative.  Warning  616 is suppressed by any comment
  1481.       appearing at the point of the fallthrough.  Thus, an
  1482.       accidental omission of a break can go undetected by the
  1483.       insertion of a neutral comment.  This can be hazardous to
  1484.       well-commented programs.
  1485. 826   Suspicious pointer-to-pointer conversion (area too small)
  1486.       -- A pointer was converted into another either implicitly
  1487.       or explicitly.  The area pointed to by the destination
  1488.       pointer is larger than the area that was designated by the
  1489.       source pointer.  For example:
  1490. long *f( char *p ) { return (long *) p; }
  1491. 827   Loop not reachable  -- A loop structure (for, while, or
  1492.       do) could not be reached.  Was this an oversight?  It may
  1493.       be that the body of the loop has a labeled statement and
  1494.       that the plan of the programmer is to jump into the middle
  1495.       of the loop through that label.  It is for this reason
  1496.       that we give an Informational message and not the Warning
  1497.       ( 527) that we would normally deliver for an unreachable
  1498.       statement.  But please note that jumping into a loop is a
  1499.       questionable practice in any regard.
  1500. 828   Semantics of function 'Name' copied to function 'Name'  --
  1501.       A function with built-in semantics or user-defined
  1502.       semantics was #define'd to be some other function with a
  1503.       similar name formed by prepending or appending
  1504.       underscores.  For example:
  1505.   #define strcmp(a,b) __strcmp__(a,b)
  1506.       will cause Info 828 to be issued.  As the message
  1507.       indicates, the semantics will be automatically transferred
  1508.       to the new function.
  1509. 829   A +headerwarn option was previously issued for header
  1510.       'Symbol'  -- Some coding standards discourage or even
  1511.       prohibit the use of certain header files.  PC-lint can
  1512.       guard against their use if we by activating the lint
  1513.       option +headerwarn(Symbol).  Later, if the file is used,
  1514.       we will then issue this message.
  1515. 830   Location cited in prior message  -- Message 830 is a
  1516.       vehicle to convey in 'canonical form' the location
  1517.       information embedded within some other message.  For
  1518.       example, consider the (somewhat simplified) message:
  1519.   file x.c line 37:  Declaration for 'x' conflicts
  1520.   with line 22
  1521.       This contains the location ("line 22") embedded in the
  1522.       text of the message.  Embedded location information is not
  1523.       normally understood by editors and IDE's (Interactive
  1524.       Development Environments), which can only position to the
  1525.       nominal location (line 37 in this example).  By adding
  1526.       this additional message with the nominal location of line
  1527.       22 the user can, by stepping to the next message, see what
  1528.       the 'conflict' is all about.
  1529. 831   Reference cited in prior message  -- Message 831 is
  1530.       similar to message  830 in that it is a vehicle to convey
  1531.       in 'canonical form' location information embedded within
  1532.       some other message.  In the case of Info 831 the
  1533.       information is Reference information.  This is a sequence
  1534.       of 1 or more locations that support a particular message.
  1535.       For example, consider the (somewhat simplified) message:
  1536.   file y.c line 701:  Possible divide by 0 [Reference: file
  1537.     z.c lines 22, 23]
  1538.       Accompanying this message will be two Info 831 messages,
  1539.       one for each of the references cited in the message.
  1540.       Without this it would be a relatively tedious matter to
  1541.       locate each one of the references to determine just why
  1542.       there is a potential divide by 0.  With these additional
  1543.       messages, editors and IDE's can automatically position the
  1544.       focus of editing to the nominal locations of the message.
  1545. 832   Parameter 'Symbol' not explicitly declared, int assumed
  1546.       -- In an old-style function definition a parameter was not
  1547.       explicitly declared.  To illustrate:
  1548.   void f( n, m )
  1549.   int n;
  1550.   { ...
  1551.       This is an example of an old-style function definition
  1552.       with n and m the parameters.  n is explicitly declared and
  1553.       m is allowed to default to int.  An 832 will be issued for m.
  1554. 833   Symbol 'Symbol' is typed differently (String) in another
  1555.       module, compare with Location -- Two objects, functions or
  1556.       definials are typed differently in two different modules.
  1557.       This is a case where the difference is legal but may cause
  1558.       confusion on the part of program maintenance.
  1559. 834   Operator 'Name' followed by operator 'Name' is confusing.
  1560.       Use parentheses. -- Some combinations of operators seem to
  1561.       be confusing.  For example:
  1562.   a = b - c - d;
  1563.    a = b - c + d;
  1564.             a = b / c / d;
  1565.             a = b / c * d;
  1566.       tend to befuddle the reader.  To reduce confusion we
  1567.       recommend using parentheses to make the association of
  1568.       these operators explicit.  For example:
  1569. a = (b - c) - d;
  1570.             a = (b - c) + d;
  1571.             a = (b / c) / d;
  1572.             a = (b / c) * d;
  1573.       in place of the above.
  1574.  17.6  C Elective Notes
  1575. Messages in the 900 level are termed "elective" because they are
  1576. not normally on.  They must be explicitly turned on with an
  1577. option of the form +e9... or -w4.  Messages in the range
  1578. 910-919 involve implicit conversions.  Messages in the range
  1579. 920-930 involve explicit conversions (casts).
  1580. 900   Successful completion, 'Integer' messages produced  --
  1581.       This message exists to provide some way of ensuring that
  1582.       an output message is always produced, even if there are no
  1583.       other messages.  This is required for some windowing
  1584.       systems.  For this purpose use the option +e900.
  1585. 909   Implicit conversion from Type to bool  -- A non-bool was
  1586.       tested as a Boolean.  For example, in the following
  1587.       function:
  1588.   int f(int n)
  1589.   {
  1590.   if( n ) return n;
  1591.   else return 0;
  1592.   }
  1593.       the programmer tests 'n' directly rather than using an
  1594.       explicit Boolean expression such as 'n != 0'.  Some shops
  1595.       prefer the explicit test.
  1596. 910   Implicit conversion (Context) from 0 to pointer  -- A
  1597.       pointer was assigned (or initialized) with a 0.  Some
  1598.       programmers prefer other conventions such as NULL or nil.
  1599.       This message will help such programmers root out cavalier
  1600.       uses of 0.  This is relatively easy in C since you can
  1601.       define NULL as follows:
  1602.   #define NULL (void *)0
  1603.       However, in C++, a void* cannot be assigned to other
  1604.       pointers without a cast.  Instead, assuming that NULL is
  1605.       defined to be 0, use the option:
  1606.   --emacro((910),NULL)
  1607.       This will inhibit message 910 in expressions using NULL.
  1608.       This method will also work in C.
  1609.       Both methods assume that you expressly turn on this
  1610.       message with a +e910 or equivalent.
  1611. 911   Implicit expression promotion from Type to Type  -- Notes
  1612.       whenever a sub-integer expression such as a char, short,
  1613.       enum, or bit-field is promoted to int for the purpose of
  1614.       participating in some arithmetic operation or function call.
  1615. 912   Implicit binary conversion from Type to Type  -- Notes
  1616.       whenever a binary operation (other than assignment)
  1617.       requires a type balancing.  A smaller range type is
  1618.       promoted to a larger range type.  For example: 3 + 5.5
  1619.       will trigger such a message because int is converted to
  1620.       double.
  1621. 913   Implicit adjustment of expected argument type from Type to
  1622.       Type  -- Notes whenever an old-style function definition
  1623.       contains a sub-integer or float type.  For example:
  1624.   int f( ch, x ) char ch; float x; { ...
  1625.       contains two 913 adjustments.
  1626. 914   Implicit adjustment of function return value from Type to
  1627.       Type  -- Notes whenever the function return value is
  1628.       implicitly adjusted.  This message is given only for
  1629.       functions returning arrays.
  1630. 915   Implicit conversion (Context) Type to Type  -- Notes
  1631.       whenever an assignment, initialization or return implies
  1632.       an arithmetic conversion (Context specifies which).
  1633. 916   Implicit pointer assignment conversion (Context)  -- Notes
  1634.       whenever an assignment, initialization or return implies
  1635.       an implicit pointer conversion (Context specifies which).
  1636. 917   Prototype coercion (Context) Type to Type  -- Notes
  1637.       whenever an implicit arithmetic conversion takes place as
  1638.       the result of a prototype.  For example:
  1639.   double sqrt(double);
  1640.   ... sqrt(3); ...
  1641.       will elicit this message because 3 is quietly converted to
  1642.       double.
  1643. 918   Prototype coercion (Context) of pointers  -- Notes
  1644.       whenever a pointer is implicitly converted because of a
  1645.       prototype.  Because of prototype conversion, near pointers
  1646.       will otherwise be silently mapped into far pointers.  far
  1647.       pointers mapped into near pointers also generate message
  1648.       619.
  1649. 919   Implicit conversion (Context) Type to Type  -- A lower
  1650.       precision quantity was assigned to a higher precision
  1651.       variable as when an int is assigned to a double.
  1652. 920   Cast from Type to void  -- A cast is being made from the
  1653.       given type to void.
  1654. 921   Cast from Type to Type  -- A cast is being made from one
  1655.       integral type to another.
  1656. 922   Cast from Type to Type  -- A cast is being made to or from
  1657.       one of the floating types (float, double, long double).
  1658. 923   Cast from Type to Type  -- A cast is being made either
  1659.       from a pointer to a non-pointer or from a non-pointer to a
  1660.       pointer.
  1661. 924   Cast from Type to Type  -- A cast is being made from a
  1662.       struct or a union.  If the cast is not to a compatible
  1663.       struct or union error  69 is issued.
  1664. 925   Cast from pointer to pointer  -- A cast is being made to
  1665.       convert one pointer to another such that one of the
  1666.       pointers is a pointer to void.  Such conversions are  considered
  1667.       harmless and normally do not even need a cast.
  1668. 926   Cast from pointer to pointer  -- A cast is being made to
  1669.       convert a char pointer to a char pointer (one or both of
  1670.       the char's may be unsigned).  This is considered a 'safe'
  1671.       cast.
  1672. 927   Cast from pointer to pointer  -- A cast is being made to
  1673.       convert a char (or unsigned char) pointer to a non-char
  1674.       pointer.  char pointers are sometimes implemented
  1675.       differently from other pointers and there could be an
  1676.       information loss in such a conversion.
  1677. 928   Cast from pointer to pointer  -- A cast is being made from
  1678.       a non-char pointer to a char pointer.  This is generally
  1679.       considered to be a 'safe' conversion.
  1680. 929   Cast from pointer to pointer  -- A cast is being made to
  1681.       convert one pointer to another that does not fall into one
  1682.       of the classifications described in  925 through  928
  1683.       above.  This could be nonportable on machines that
  1684.       distinguish between pointer to char and pointer to word.
  1685.       Consider casting a pointer to pointer to char to a pointer
  1686.       to pointer to word.  The indirect bit pattern remains
  1687.       unchanged.
  1688. 930   Cast from Type to Type  -- A cast is being made to or from
  1689.       an enumeration type.
  1690. 931   Both sides have side effects  -- Indicates when both sides
  1691.       of an expression have side-effects.  An example is n++ +
  1692.       f().  This is normally benign.  The really troublesome
  1693.       cases such as n++ + n are caught via Warning  564.
  1694. 932   Passing near pointer to library function 'Symbol'
  1695.       (Context)  -- A source of error in Windows programming is
  1696.       to pass a near pointer to a library function (See Chapter
  1697.       6.).  If the library is a DLL library, then in supplying
  1698.       the missing segment, the library would assume its own data
  1699.       segment, which would probably be wrong.  See also messages
  1700.       933 and  934.
  1701. 933   Passing near pointer to far function (Context)  -- A
  1702.       source of error in Windows programming is to pass a near
  1703.       pointer to a DLL function.  Most Microsoft functions in
  1704.       DLLs are declared with the far modifier.  Hence this can
  1705.       be tentatively used as a discriminant to decide that a
  1706.       pointer is too short.  An advantage that this Note has
  1707.       over  932 is that it can catch functions designated only
  1708.       by pointer.  Also you may be using libraries that are not
  1709.       DLLs and that share the same DS segment.  In this case,
  1710.       932 may produce too many superfluous messages.  See also
  1711.       message  934.
  1712. 934   taking address of near auto variable 'Symbol' (Context)
  1713.       -- A source of error in writing DLL libraries is that the
  1714.       stack segment may be different from the data segment.  In
  1715.       taking the address of a near data object only the offset
  1716.       is obtained.  In supplying the missing segment, the
  1717.       compiler would assume the data segment, which could be
  1718.       wrong.  See also messages  932 and  933.
  1719. 935   int within struct  -- This Note helps to locate
  1720.       non-portable data items within struct's.  If instead of
  1721.       containing int's and unsigned int's, a struct were to
  1722.       contain short's and long's then the data would be more
  1723.       portable across machines and memory models.  Note that bit
  1724.       fields and union's do not get complaints.
  1725. 936   old-style function definition for function 'Symbol'  -- An
  1726.       "old-style" function definition is one in which the types
  1727.       are not included between parentheses.  Only names are
  1728.       provided between parentheses with the type information
  1729.       following the right parenthesis.  This is the only style
  1730.       allowed by K&R.
  1731. 937   old-style function declaration for function 'Symbol'  --
  1732.       An "old-style" function declaration is one without type
  1733.       information for its arguments.
  1734. 938   parameter 'Symbol' not explicitly declared  -- In an
  1735.       "old-style" function definition it is possible to let a
  1736.       function parameter default to int by simply not providing
  1737.       a separate declaration for it.
  1738. 939   return type defaults to int for function 'Symbol'  -- A
  1739.       function was declared without an explicit return type.  If
  1740.       no explicit storage class is given, then Informational
  1741.       745 is also given provided the Deduce Return mode flag
  1742.       (fdr) is off.  This is meant to catch all cases.
  1743. 940   omitted braces within an initializer  -- An initializer
  1744.       for a subaggregate does not have braces.  For example:
  1745.   int a[2][2] = { 1, 2, 3, 4 };
  1746.       This is legal C but may violate local programming
  1747.       standards.  The worst violations are covered by Warning 651.
  1748. 941   Result 0 due to operand(s) equaling 0 in operation
  1749.       'String'  -- The result of a constant evaluation is 0
  1750.       owing to one of the operands of a binary operation being
  1751.       0.  This is less severe than Info  778 wherein neither
  1752.       operand is 0.  For example, expression (2&1) yields a  778
  1753.       whereas expression (2&0) yields a 941.
  1754. 942   Possibly truncated addition promoted to float  -- An
  1755.       integral expression (signed or unsigned) involving
  1756.       addition or subtraction is converted to a floating point
  1757.       number. If an overflow occurred, information would be
  1758.       lost.  See also messages  647,  776 and  790.
  1759. 943   Too few initializers for aggregate  -- The initializer {0}
  1760.       was used to initialize an aggregate of more than one item.
  1761.       Since this is a very common thing to do it is given a
  1762.       separate message number, which is normally suppressed.
  1763.       See  785 for more flagrant abuses.
  1764. 944   [left/right/] argument for operator 'String' always
  1765.       evaluates to [True/False]  -- The indicated operator
  1766.       (given by String has an argument that appears to always
  1767.       evaluate to either 'True' or 'False' (as indicated in the
  1768.       message).  This is given for Boolean operators (||and &&
  1769.       and for Unary operator !) and information is gleaned from
  1770.       a variety of sources including prior assignment statements
  1771.       and initializers.  Compare this with message  506, which
  1772.       is based on testing constants or combinations of constants.
  1773. 945   Undefined struct used with extern  -- Some compilers
  1774.       refuse to process declarations of the form:
  1775.   extern struct X s;
  1776.       where struct X is not yet defined.  This note can alert a
  1777.       programmer porting to such platforms.
  1778. 946   Relational or subtract operator applied to pointers  -- A
  1779.       relational operator (one of >, >=, <, <=) or the subtract
  1780.       operator has been applied to a pair of pointers.  The
  1781.       reason this is of note is that when large model pointers
  1782.       are compared (in one of the four ways above) or
  1783.       subtracted, only the offset portion of the pointers is
  1784.       subject to the arithmetic.  It is presumed that the
  1785.       segment portion is the same.  If this presumption is not
  1786.       accurate then disaster looms.  By enabling this message
  1787.       you can focus in on the potential trouble spots.
  1788. 947   Subtract operator applied to pointers  -- An expression of
  1789.       the form p - q was found where both p and q are pointers.
  1790.       This is of special importance in cases where the maximum
  1791.       pointer can overflow the type that holds pointer
  1792.       differences.  For example, suppose that the maximum
  1793.       pointer is 3 Gigabytes -1, and that pointer differences
  1794.       are represented by a long, where the maximum long is 2
  1795.       Gigabytes -1.  Note that both of these quantities fit
  1796.       within a 32 bit word.  Then subtracting a small pointer
  1797.       from a very large pointer will produce an apparent
  1798.       negative value in the long representing the pointer
  1799.       difference.  Conversely, subtracting a very large pointer
  1800.       from a small pointer can produce a positive quantity.
  1801.       The alert reader will note that a potential problem exists
  1802.       whenever the size of the type of a pointer difference
  1803.       equals the size of a pointer.  But the problem doesn't
  1804.       usually manifest itself since the highest pointer values
  1805.       are usually less than what a pointer could theoretically
  1806.       hold.  For this reason, the message cannot be given
  1807.       automatically based on scalar types and hence has been
  1808.       made an Elective Note.
  1809.       Compare this Note with that of  946, which was designed
  1810.       for a slightly different pointer difference problem.
  1811. 950   Non-ISO/ANSI reserved word or construct: 'Symbol'  --
  1812.       Symbol is either a reserved word that is non-ISO/ANSI or a
  1813.       construct (such as the // form of comment in a C module).
  1814.       This Elective Note is enabled automatically by the -A
  1815.       option.  If these messages are occurring in a compiler or
  1816.       library header file over which you have no control, you
  1817.       may want to use the option -elib(950).  If the reserved
  1818.       word is one you want to completely disable, then use the
  1819.       option -rw(Word).
  1820. 951   Pointer to incomplete type 'Symbol' employed in operation
  1821.       -- A pointer to an incomplete type (for example, struct X
  1822.       where struct X has not yet been defined in the current
  1823.       module) was employed in an assignment or in a comparison
  1824.       (for equality) operator.  For example, suppose a module
  1825.       consisted only of the following function:
  1826.   struct A * f(struct A *p )
  1827.      {
  1828.      return p;
  1829.      }
  1830.       Since struct A had not been defined, this message will be
  1831.       issued.  Such employment is permitted by the standard but
  1832.       is not permitted by all C compilers.  If you want to
  1833.       deploy your application to the maximum number of platforms
  1834.       you should enable this Elective Note.
  1835. 952   Parameter 'Symbol' (Location) could be declared const  --
  1836.       A parameter is not modified by a function.  For example:
  1837.      int f( char *p, int n ) { return *p = n; }
  1838.       can be redeclared as:
  1839.      int f( char * const p, const int n ) { return *p = n; }
  1840.       There are few advantages to declaring an unchanging
  1841.       parameter a const.  It signals to the person reading the
  1842.       code that a parameter is unchanging, but, in the estimate
  1843.       of most, reduces legibility.  For this reason the message
  1844.       has been given an Elective Note status.
  1845.       However, there is a style of programming that encourages
  1846.       declaring parameters const.  For the above example, this
  1847.       style would declare f as
  1848.      int f( char * p, int n);
  1849.       and would use the const qualifier only in the definition.
  1850.       Note that the two forms are compatible according to the
  1851.       standard.  The declaration is considered the interface
  1852.       specification where const does not matter.  The const's do
  1853.       matter in the definition of the function, which is
  1854.       considered the implementation.  Message 952 could be used
  1855.       to support this style.
  1856.       Marking a parameter as const does not affect the type of
  1857.       argument that can be passed to the parameter.  In
  1858.       particular, it does not mean that only const arguments may
  1859.       be passed.  This is in contrast to declaring a parameter
  1860.       as pointer to const or reference to const.  For these
  1861.       situations, Informational messages are issued ( 818 and
  1862.       1764 respectively) and these do affect the kinds of
  1863.       arguments that may be passed.  See also messages  953 and 954.
  1864. 953   Variable 'Symbol' (Location) could be declared as const
  1865.       -- A local variable (either static or auto) is initialized
  1866.       but never modified thereafter.  Such a variable could be
  1867.       declared const.  One advantage in making such a
  1868.       declaration is that it can furnish a clue to the program
  1869.       reader that the variable is unchanging.  In the case of
  1870.       static data it can mean that the data is ROM'able.  Other
  1871.       situations in which a const can be added to a declaration
  1872.       are covered in messages  818,  952,  954 and  1764.
  1873. 954   Pointer variable 'Symbol' (Location) could be declared as
  1874.       pointing to a const  -- The data pointed to by a pointer
  1875.       is never changed (at least not through that pointer).  It
  1876.       may therefore be better, or at least more descriptive, if
  1877.       the variable were typed pointer to const.  For example:
  1878.   {
  1879.   char *p = "abc";
  1880.   for( ; *p; p++ ) print(*p);
  1881.   }
  1882.       can be redeclared as:
  1883.   {
  1884.   const char *p = "abc";
  1885.   for( ; *p; p++ ) print(*p);
  1886.   }
  1887.       It is interesting to contrast this situation with that of
  1888.       pointer parameters.  The latter is given Informational
  1889.       status ( 818) because it has an effect of enhancing the
  1890.       set of pointers that can be passed into a function.  Other
  1891.       situations in which a const can be added to a declaration
  1892.       are covered in messages  952,  953 and  1764.
  1893. 955   Parameter name missing from prototype for function
  1894.       'Symbol'  -- In a function declaration a parameter name is
  1895.       missing.  For example:
  1896.   void f(int);
  1897.       will raise this message.  This is perfectly legal but
  1898.       misses an opportunity to instruct the user of a library
  1899.       routine on the nature of the parameter.  For example:
  1900.   void f(int count);
  1901.       would presumably be more meaningful.  [27, Rule 34].
  1902.       This message is not given for function definitions, only
  1903.       function declarations.
  1904. 956   Non const, non volatile static or external variable
  1905.       'Symbol'  -- This check has been advocated by programmers
  1906.       whose applications are multi-threaded.  Software that
  1907.       contains modifiable data of static duration is often
  1908.       non-reentrant.  That is, two or more threads cannot run
  1909.       the code concurrently.  By 'static duration' we mean
  1910.       variables declared static or variables declared external
  1911.       to any function.  For example:
  1912.   int count = 0;
  1913.   void bump() { count++; }
  1914.   void get_count() { return count; }
  1915.       If the purpose is to obtain a count of all the bump()'s by
  1916.       a given thread then this program clearly will not do since
  1917.       the global variable count sums up the bump()'s from all
  1918.       the threads.  Moreover, if the purpose of the code is to
  1919.       obtain a count of all bump()'s by all threads, it still
  1920.       may contain a subtle error (depending on the compiler and
  1921.       the machine).  If it is possible to interrupt a thread
  1922.       between the access of count and the subsequent store, then
  1923.       two threads that are bump()'ing at the same time, may
  1924.       register an increase in the count by just one.
  1925.       Please note that not all code is intended to be
  1926.       re-entrant.  In fact most programs are not designed that
  1927.       way and so this Elective Note need not be enabled for the
  1928.       majority of programs.  If the program is intended to be
  1929.       re-entrant, all uses of non-const static variables should
  1930.       be examined carefully for non-reentrant properties.
  1931. 957   Function 'Symbol' defined without a prototype in scope  --
  1932.       A function was defined without a prototype in scope.  It
  1933.       is usually good practice to declare prototypes for all
  1934.       functions in header files and have those header files
  1935.       checked against the definitions of the function to assure
  1936.       that they match.
  1937.       If you are linting all the files of your project together
  1938.       such cross checking will be done in the natural course of
  1939.       things.  For this reason this message has been given a
  1940.       relatively low urgency of Elective Note.
  1941. 958   Padding of Integer byte(s) is required to align member on
  1942.       Integer byte boundary  -- This message is given whenever
  1943.       padding is necessary within a struct to achieve a required
  1944.       member alignment.  Consider:
  1945.   struct A { char c; int n; };
  1946.       Assuming that int must be aligned on a 4-byte boundary and
  1947.       assuming the size of a char to be 1, then this message
  1948.       will be issued indicating that there will be a padding of
  1949.       3 bytes.
  1950.       The alignment requirements vary with the compiler, the
  1951.       machine and, sometimes, compiler options.  When separately
  1952.       compiled programs need to share data at the binary level
  1953.       it helps to remove any artificially created padding from
  1954.       any of the structures that may be shared.
  1955. 959   struct size (Integer bytes) is not an even multiple of the
  1956.       maximum member alignment (Integer bytes)  -- The alignment