Import VBCC source snapshot (29/04/2022)
diff --git a/doc/errors.texi b/doc/errors.texi
new file mode 100644
index 0000000..798b39b
--- /dev/null
+++ b/doc/errors.texi
@@ -0,0 +1,1399 @@
+  @item "declaration expected" (Fatal, Error, ANSI-violation)
+
+        Something is pretty wrong with the source.
+
+
+  @item "only one input file allowed" (Fatal)
+
+        vbcc accepts only a single filename to compile. You can use a
+        frontend to compile multiple files or perhaps you mistyped an
+        option.
+
+
+  @item "Flag <%s> specified more than once" ()
+
+        You specified a command line option that should be specified only
+        once more than once. Maybe you have this option in your config-file
+        and used it in the command line, too?
+        The first occurrence will override the latter ones.
+
+
+  @item "Flag <%s> needs string" (Fatal)
+
+        This option hast to be specified with a string parameter, e.g.
+        -flag=foobar
+
+
+  @item "Flag <%s> needs value" (Fatal)
+
+        This option hast to be specified with an integer parameter, e.g.
+        -flag=1234
+
+
+  @item "Unknown Flag <%s>" (Fatal)
+
+        This option is not recognized by vbcc. Perhaps you mistyped it, used
+        the wrong case or specified an option of the frontend to vbcc?
+
+
+  @item "No input file" (Fatal)
+
+        You did not specify an input file. Your source file should not start
+        with a '-' and if you use a frontend make sure it has the proper
+        suffix.
+
+
+  @item "Could not open <%s> for input" (Fatal)
+
+        A file could not be opened.
+
+
+  @item "need a struct or union to get a member" (Error, ANSI-violation)
+
+        The source contains something like a.b where a is not a structure
+        or union.
+
+
+  @item "too many (%d) nested blocks" (Fatal, Error)
+
+        vbcc only allows a maximum number of nested blocks
+        (compund-statements). You can increase this number by changing
+        the line #define MAXN <something> in vbc.h and recompiling vbcc.
+
+
+ @item "left block 0" (Error, ANSI-violation)
+
+        This error should not occur.
+
+
+ @item "incomplete struct <%s>" (Error, ANSI-violation)
+
+        You tried to get a member of an incomplete structure/union.
+        You defined struct x y; somewhere without defining struct x@{...@}.
+
+
+ @item "out of memory" (Fatal, Error)
+
+        Guess what.
+
+
+ @item "redeclaration of struct <%s>" (Error, ANSI-violation)
+
+        You may not redeclare a struct/union in the same block.
+
+
+ @item "incomplete type (%s) in struct" (Error, ANSI-violation)
+
+        Every member in a struct/union declaration must be complete.
+        Perhaps you only wanted a pointer to that type and forgot the '*'?
+
+
+ @item "function (%s) in struct/union" (Error, ANSI-violation)
+
+        Functions cannot be members of structs/unions.
+
+
+ @item "redeclaration of struct/union member <%s>" (Error, ANSI-violation)
+
+        Two members of a struct/union have the same name.
+
+
+ @item "redeclaration of <%s>" (Error, ANSI-violation)
+
+        You used a name already in use in an enumeration.
+
+
+ @item "invalid constant expression" (Error, ANSI-violation)
+
+        ??? Nowhere to find...
+
+
+ @item "array dimension must be constant integer" (Error, ANSI-violation)
+
+        The dimensions of an array must be constants (real constants,
+        const int x=100; int y[x]; is not allowed) and integers
+        (int y[100.0]; is not allowed either).
+
+
+ @item "no declarator and no identifier in prototype" (Error, ANSI-violation)
+
+
+
+ @item "invalid storage-class in prototype" (Error, ANSI-violation)
+
+        Function parameters may only be auto or register.
+
+
+ @item "void not the only function argument" (Error, ANSI-violation)
+
+        You tried to declare a function that has an argument of type void
+        as well as other arguments.
+
+
+ @item "<%s> no member of struct/union" (Error, ANSI-violation)
+
+        The struct/union does not contain a member called like that.
+
+
+ @item "increment/decrement is only allowed for aithmetic and pointer types" (Error, ANSI-violation)
+
+
+
+ @item "functions may not return arrays or functions" (Error, ANSI-violation)
+
+
+
+ @item "only pointers to functions can be called" (Error, ANSI-violation)
+
+        You tried to call something that did not decay into a pointer to
+        a function.
+
+
+ @item "redefinition of var <%s>" (Error, ANSI-violation)
+
+
+
+ @item "redeclaration of var <%s> with new storage-class" (Error, ANSI-violation)
+
+
+
+ @item "first operand of conditional-expression must be arithmetic or pointer type" (Error, ANSI-violation)
+
+
+
+ @item "multiple definitions of var <%s>" (Error, ANSI-violation)
+
+        There have been multiple definitions of a global variable with
+        initialization.
+
+
+ @item "operands of : do not match" (Error, ANSI-violation)
+
+        In an expression of the form a ? b : c
+        - a and b must have the same type or
+        - a and b both must have arithmetic types or
+        - one of them must be a pointer and the other must be void * or 0
+
+
+ @item "function definition in inner block" (Error, ANSI-violation)
+
+        C does not allow nested functions.
+
+
+ @item "redefinition of function <%s>" (Error, ANSI-violation)
+
+        Defining two functions with the same name in one translation-unit
+        is no good idea.
+
+
+ @item "invalid storage-class for function" (Error, ANSI-violation)
+
+        Functions must not have storage-classes register or auto.
+
+
+ @item "declaration-specifiers expected" (Error, ANSI-violation)
+
+
+
+ @item "declarator expected" (Error, ANSI-violation)
+
+
+
+ @item "<%s> is no parameter" (Error, ANSI-violation)
+
+        In an old-style function definition you tried to declare a name as
+        parameter which was not in the identifier-list.
+
+
+ @item "assignment of different structs/unions" (Error, ANSI-violation)
+
+
+
+ @item "invalid types for assignment" (Error, ANSI-violation)
+
+        In an assignment-context (this includes passing arguments to
+        prototyped functions) the source and target must be one of the
+        following types:
+
+        - both are arithmetic types
+        - both are the same struct/union
+        - one of them is a pointer to void and the other one is any pointer
+        - the target is any pointer and the source is an integral
+          constant-expression with the value 0
+        - both are pointer to the same type (here the target may have
+          additional const/volatile qualifiers - not recursively, however)
+
+        Any other combinations should be illegal.
+
+
+ @item "only 0 can be compared against pointer" (Warning, ANSI-violation)
+
+        You may not compare a pointer against any other constant but a
+        0 (null pointer).
+
+
+ @item "pointers do not point to the same type" (Warning, ANSI-violation)
+
+        You tried to compare or assign pointers that point to different
+        types. E.g. the types they point to may have different attributes.
+
+
+ @item "function initialized" (Error, Fatal, ANSI-violation)
+
+        There was a '=' after a function declaration.
+
+
+ @item "initialization of incomplete struct" (Error, Fatal, ANSI-violation)
+
+        A structure is incomplete if the only its name, but not the
+        content is known. You cannot do much with such structures.
+
+
+ @item "initialization of incomplete union" (Error, Fatal, ANSI-violation)
+
+        A union is incomplete if the only its name, but not the
+        content is known. You cannot do much with such unions.
+
+
+ @item "empty initialization" (Error, ANSI-violation)
+
+        There was no valid expression after the '=' in a variable definition.
+
+
+ @item "initializer not a constant" (Error, ANSI-violation)
+
+        Static variables and compound types may only be initialized with
+        constants.
+        Variables with const qualifier are no valid constant-expressions
+        here.
+
+        Addresses of static variables are ok, but casting them may turn
+        them into non-constant-expressions.
+
+
+ @item "double type-specifier" (Warning, ANSI-violation)
+
+
+
+ @item "illegal type-specifier" (Warning, ANSI-violation)
+
+
+
+ @item "multiple storage-classes" (Warning, ANSI-violation)
+
+
+
+ @item "storage-class specifier should be first" (Warning, ANSI-violation)
+
+
+
+ @item "bitfields must be ints" (Warning, ANSI-violation)
+
+
+
+ @item "bitfield width must be constant integer" (Warning, ANSI-violation)
+
+
+
+ @item "struct/union member needs identifier" (Warning, ANSI-violation)
+
+
+
+ @item "; expected" (Warning, ANSI-violation)
+
+        Probably you forgot a ';' or there is a syntactic error in an
+        expression.
+
+
+ @item "struct/union has no members" (Warning, ANSI-violation)
+
+        You defined an empty struct or union.
+
+
+ @item "@} expected" (Warning, ANSI-violation)
+
+
+
+ @item ", expected" (Warning, ANSI-violation)
+
+
+
+ @item "invalid unsigned" (Warning, ANSI-violation)
+
+
+
+ @item ") expected" (Warning, ANSI-violation)
+
+
+
+ @item "array dimension has sidefx (will be ignored)" (Warning, ANSI-violation)
+
+
+
+ @item "array of size 0 (set to 1)" (Warning, ANSI-violation)
+
+        ANSI C does not allow arrays or any objects to have a size of 0.
+
+
+ @item "] expected" (Warning, ANSI-violation)
+
+
+
+ @item "mixed identifier- and parameter-type-list" (Warning, ANSI-violation)
+
+
+
+ @item "var <%s> was never assigned a value" (Warning)
+
+
+
+ @item "var <%s> was never used" (Warning)
+
+
+
+ @item "invalid storage-class" (Warning, ANSI-violation)
+
+
+
+ @item "type defaults to int" (Warning)
+
+
+
+ @item "redeclaration of var <%s> with new type" (Warning, ANSI-violation)
+
+
+
+ @item "redeclaration of parameter <%s>" (Warning, ANSI-violation)
+
+
+
+ @item ": expected" (Warning, ANSI-violation)
+
+
+
+ @item "illegal escape-sequence in string" (Warning, ANSI-violation)
+
+
+
+ @item "character constant contains multiple chars" (Warning)
+
+
+
+ @item "could not evaluate sizeof-expression" (Error, ANSI-violation)
+
+
+
+ @item "" expected (unterminated string)" (Error, ANSI-violation)
+
+
+
+ @item "something wrong with numeric constant" (Error, ANSI-violation)
+
+
+
+ @item "identifier expected" (Fatal, Error, ANSI-violation)
+
+
+
+ @item "definition does not match previous declaration" (Warning, ANSI-violation)
+
+
+
+ @item "integer added to illegal pointer" (Warning, ANSI-violation)
+
+
+
+ @item "offset equals size of object" (Warning)
+
+
+
+ @item "offset out of object" (Warning, ANSI-violation)
+
+
+
+ @item "only 0 should be cast to pointer" (Warning)
+
+
+
+ @item "unknown identifier <%s>" (Error, ANSI-violation)
+
+
+
+ @item "too few function arguments" (Warning, ANSI-violation)
+
+
+
+ @item "division by zero (result set to 0)" (Warning, ANSI-violation)
+
+
+
+ @item "assignment of different pointers" (Warning, ANSI-violation)
+
+
+
+ @item "lvalue required for assignment" (Error, ANSI-violation)
+
+
+
+ @item "assignment to constant type" (Error, ANSI-violation)
+
+
+
+ @item "assignment to incomplete type" (Error, ANSI-violation)
+
+
+
+ @item "operands for || and && have to be arithmetic or pointer" (Error, ANSI-violation)
+
+
+
+ @item "bitwise operations need integer operands" (Error, ANSI-violation)
+
+
+
+ @item "assignment discards const" (Warning, ANSI-violation)
+
+        You assigned something like (const type *) to (type *).
+
+
+ @item "relational expression needs arithmetic or pointer type" (Error, ANSI-violation)
+
+
+
+ @item "both operands of comparison must be pointers" (Error, ANSI-violation)
+
+        You wrote an expression like a == b where one operand was a pointer
+        while the other was not. Perhaps a function is not declared correctly
+        or you used NULL instead of 0?
+
+
+ @item "operand needs arithmetic type" (Error, ANSI-violation)
+
+
+
+ @item "pointer arithmetic with void * is not possible" (Error, ANSI-violation)
+
+        Adding/subtracting from a pointer to void is not possible.
+
+
+ @item "pointers can only be subtracted" (Error, ANSI-violation)
+
+        You cannot add, multiply etc. two pointers.
+
+
+ @item "invalid types for operation <%s>" (Error, ANSI-violation)
+
+
+
+ @item "invalid operand type" (Error, ANSI-violation)
+
+
+
+ @item "integer-pointer is not allowed" (Error, ANSI-violation)
+
+        You may not subtract a pointer from an integer.
+        Adding an integer or subtracting it from a pointer is ok.
+
+
+@item "assignment discards volatile" (Warning, ANSI-violation)
+
+        You assigned something like (volatile type *) to (type *).
+
+
+@item "<<, >> and % need integer operands" (Error, ANSI-violation)
+
+
+
+@item "casting from void is not allowed" (Error, ANSI-violation)
+
+        Casting something of type void to anything makes no sense.
+
+
+@item "integer too large to fit into pointer" (Error, ANSI-violation)
+
+        You tried to assign an integer to a pointer that is too small to
+        hold the integer.
+        Note that assignment of pointers<->integers is never portable.
+
+
+@item "only integers can be cast to pointers" (Error, ANSI-violation)
+
+
+
+@item "invalid cast" (Error, ANSI-violation)
+
+
+
+@item "pointer too large to fit into integer" (Error, ANSI-violation)
+
+        You tried to assign a pointer to an integer that is too small to
+        hold the pointer.
+        Note that assignment of pointers<->integers is never portable.
+
+
+@item "unary operator needs arithmetic type" (Error, ANSI-violation)
+
+
+
+@item "negation type must be arithmetic or pointer" (Error, ANSI-violation)
+
+
+
+@item "complement operator needs integer type" (Error, ANSI-violation)
+
+
+
+@item "pointer assignment with different qualifiers" (Warning, ANSI-violation)
+
+        You tried to assign a pointer to a pointer that points to a type
+        with different qualifiers (e.g. signed<->unsigned).
+
+
+@item "dereferenced object is no pointer" (Error, ANSI-violation)
+
+
+
+@item "dereferenced object is incomplete" (Error, ANSI-violation)
+
+        You tried to dereference a pointer to an incomplete object.
+        Either you had a pointer to an array of unknown size or a pointer
+        to a struct or union that was not (yet) defined.
+
+
+@item "only 0 should be assigned to pointer" (Warning, ANSI-violation)
+
+        You may not assign constants other than a null pointer to any
+        pointer.
+
+
+@item "typedef <%s> is initialized" (Warning, ANSI-violation)
+
+
+
+@item "lvalue required to take address" (Error, ANSI-violation)
+
+        You can only get the address of an object, but not of expressions
+        etc.
+
+
+@item "unknown var <%s>" (Error, ANSI-violation)
+
+
+
+@item "address of register variables not available" (Error, ANSI-violation)
+
+        If a variable is declared as 'register' its address may not be
+        taken (no matter if the variable actually gets assigned to a
+        register).
+
+
+@item "var <%s> initialized after 'extern'" (Warning)
+
+
+
+@item "const var <%s> not initialized" (Warning)
+
+        A constant variable was not initialized in its definition.
+        As there is no other legal way to assign a value to a constant
+        variable this is probable an error.
+
+
+@item "function definition after 'extern'" (Warning, ANSI-violation)
+
+
+
+@item "return type of main is not int" (Warning, ANSI-violation)
+
+        main() should be defined as
+
+            int main(int argc, char **argv)
+
+        Especially the return type of main must be 'int' - 'void' is
+        not allowed by ANSI C.
+
+
+@item "invalid storage-class for function parameter" (Warning, ANSI-violation)
+
+        Function parameters may only have 'auto' or 'register' as
+        storage-class. 'static' or 'extern' are not allowed.
+
+
+@item "formal parameters conflict with parameter-type-list" (Warning, ANSI-violation)
+
+
+
+@item "parameter type defaults to int" (Warning)
+
+        A function definition contains no explicit type specifier.
+        'int' will be assumed.
+
+
+@item "no declaration-specifier, used int" (Warning, ANSI-violation)
+
+        A variable was declared/defined without a type specified.
+        This is not allowed in ANSI C (apart from functions).
+
+
+@item "no declarator in prototype" (Warning, ANSI-violation)
+
+
+
+@item "static var <%s> never defined" (Warning)
+
+
+
+@item "@} expected" (Warning)
+
+
+
+@item "left operand of comma operator has no side-effects" (Warning)
+
+        In an expression of the form a,b a has no side-effects and is
+        therefore superfluous.
+
+
+@item "label empty" (Error, ANSI-violation)
+
+        There was a ':' without an identifier before it.
+
+
+@item "redefinition of label <%s>" (Error, ANSI-violation)
+
+        The label was defined more than once in the same function.
+        Consider that labels can not be hidden in inner blocks.
+
+
+@item "case without switch" (Error, ANSI-violation)
+
+        A case label was found outside of any switch-statements.
+
+
+@item "case-expression must be constant" (Error, ANSI-violation)
+
+        The expression after 'case' must be constant.
+
+
+@item "case-expression must be integer" (Error, ANSI-violation)
+
+        The expression after 'case' must be integer.
+
+
+@item "empty if-expression" (Error, ANSI-violation)
+
+        There was no valid expression after 'if'.
+
+
+@item "if-expression must be arithmetic or pointer" (Error, ANSI-violation)
+
+        The expression after 'if' must be arithmetic (i.e. an integer
+        or floating point type) or a pointer.
+
+
+@item "empty switch-expression" (Error, ANSI-violation)
+
+        There was no valid expression after 'switch'.
+
+
+@item "switch-expression must be integer" (Error, ANSI-violation)
+
+        The expression after 'switch' must be an integer.
+
+
+@item "multiple default labels" (Error, ANSI-violation)
+
+        There was more than one default label in a switch-statement.
+
+
+@item "while-expression must be arithmetic or pointer" (Error, ANSI-violation)
+
+        The expression after the 'while' must be arithmetic (i.e. an integer
+        or floating point type) or a pointer.
+
+
+@item "empty while-expression" (Error, ANSI-violation)
+
+        There was no valid expression after 'while'.
+
+
+@item "for-expression must be arithmetic or pointer" (Error, ANSI-violation)
+
+        The expression inside the 'for' must be arithmetic (i.e. an integer
+        or floating point type) or a pointer.
+
+
+@item "do-while--expression must be arithmetic or pointer" (Error, ANSI-violation)
+
+        The expression after the 'while' must be arithmetic (i.e. an integer
+        or floating point type) or a pointer.
+
+
+@item "goto without label" (Error, ANSI-violation)
+
+        'goto' must be followed by a label.
+
+
+@item "continue not within loop" (Error, ANSI-violation)
+
+        'continue' is only allowed inside of loops.
+        Perhaps there are unbalanced '@{' '@}'.
+
+
+@item "break not in matching construct" (Error, ANSI-violation)
+
+        'break' is only allowed inside of loops or switch-statements.
+        Perhaps there are unbalanced '@{' '@}'.
+
+
+@item "label <%s> was never defined" (Error, ANSI-violation)
+
+        There is a goto to a label that was never defined.
+
+
+@item "label <%s> was never used" (Warning)
+
+        You defined a label, but there is no goto that jumps to it.
+
+
+@item "register %s not ok" (Warning)
+
+        There was an internal error (i.e. a bug in the compiler)!
+        Please report the error to vb@@compilers.de. Thanks!
+
+
+@item "default not in switch" (Warning, ANSI-violation)
+
+        A default label that is not in any switch-statement was found.
+        Perhaps there are unbalanced '@{' '@}'.
+
+
+@item "( expected" (Warning, ANSI-violation)
+
+
+
+@item "loop eliminated" (Warning)
+
+        There was a loop that will never be executed (e.g. while(0)...)
+        and therefore the entire loop was eliminated.
+        I do not know any reason for such loops, so there is probably an
+        error.
+
+
+@item "statement has no effect" (Warning)
+
+        There is a statement that does not cause any side-effects (e.g.
+        assignments, function calls etc.) and is therefore superfluous.
+        E.g. you might have typed a==b; instead of a=b;
+
+
+@item "'while' expected" (Warning, ANSI-violation)
+
+        The 'while' in a do-while loop is missing.
+
+
+@item "function should not return a value" (Warning)
+
+        You specified an argument to return although the function is
+        void. Declare the function as non-void.
+
+
+@item "function should return a value" (Warning)
+
+        You did not specify an argument to return although the function
+        is not void. Declare the function as void or specify a return
+        value.
+
+
+@item "@{ expected" (Warning, ANSI-violation)
+
+
+
+@item "internal error %d in line %d of file %s !!" (Fatal, Error)
+
+        There was an internal error (i.e. a bug in the compiler)!
+        Please report the error to vb@@compilers.de. Thanks!
+
+
+@item "there is no message number %d" (Fatal)
+
+        You tried to activate or suppress a message that does not exist.
+
+
+@item "message number %d cannot be suppressed" (Fatal)
+
+        You cannot suppress a message that displays a real error,
+        ANSI-violation or another real problem.
+        Only 'harmless' warnings can be suppressed.
+
+
+@item "implicit declaration of function <%s>" (Warning)
+
+        A function was called before it was declared and therefore
+        implicitly declared as
+
+            int function();
+
+        This should be avoided in new programs.
+
+
+@item "function call without prototype in scope" (Warning)
+
+        When writing new programs it is probably sensible to use prototypes
+        for every function. If a function is called without a prototype in
+        scope this may cause incorrect type conversions and is usually an
+        error.
+
+
+@item "#pragma used" (Warning)
+
+        Usage of #pragma should be avoided in portable programs.
+
+
+@item "assignment in comparison context" (Warning)
+
+        The expression in an if-, for-, while- or do-while-statement
+        is an assignment, e.g.
+
+            if(i=0)...
+
+        This could an error, if you wanted if(i==0).
+        If you turned on this warning and want it to shut up for a
+        certain expression you can cast it to its type, e.g.
+
+            if((int)(i=0))...
+
+        Note that only assignments with '=' will be warned, not '+=' etc.
+
+
+@item "comparison redundant because operand is unsigned" (Warning)
+
+        A comparison with an unsigned variable is redundant, because
+        the result will always be constant, e.g.
+
+            unsigned int i;
+            if(i<0)...
+
+        This usually is a programming error and can be avoided in all cases.
+
+
+@item "cast to narrow type may cause loss of precision" (Warning)
+
+        A variable is cast to a type smaller than its original type, so
+        that some information may get lost.
+        However this warning will be displayed in lots of cases where
+        no problem can arise, e.g. (short)(a==b).
+
+
+@item "pointer cast may cause alignment problems" (Warning)
+
+        A pointer is cast to a pointer to a type with stricter alignment
+        requirements, i.e. the new pointer might be invalid if you do not
+        know what you are doing.
+        Those casts should be avoidable in all 'usual' cases.
+
+
+@item "no declaration of global variable <%s> before definition" (Warning)
+
+        It is usually good to declare all global variables (including
+        functions) in header files.
+
+
+@item "'extern' inside function" (Warning)
+
+        Declaration of external variables in inner blocks is usually
+        not a good idea.
+
+
+@item "dead assignment to <%s> eliminated" (Warning)
+
+        A variable is assigned a value that is never used or gets
+        overwritten before it is used. If this occurs in real code then
+        there is either an error or an unnecessary assignment.
+
+        This is detected only in optimizing compilation.
+
+
+@item "var <%s> is used before defined" (Warning)
+
+        The variable is used before it was assigned a value and therefore
+        is undefined. It cannot be detected if the code where it is used
+        can be reached, but if it is reached it will cause undefined
+        behaviour. So it is most probably an error either way (see 170).
+
+        However not all uninitialized usages can be found.
+
+        Also note that the compiler may choose convenient values for
+        uninitialized variables. Example:
+
+            int f(int a)
+            @{
+                int x;
+                if(a) x=0;
+                return(x);
+            @}
+
+        Here the optimizer may choose that x==0 if it is uninitialized and
+        then only generate a return(0);
+        It can also happen that you get different values if you read an
+        uninitialized variable twice although it was not assigned a value
+        in between.
+
+        This is only detected in optimizing compilation.
+
+
+@item "would need more than %ld optimizer passes for best results" (Warning)
+
+        The optimizer would probably be able to do some further
+        optimizations if you increased the number of allowed passes
+        with the -optpasses=n option.
+
+
+@item "function <%s> has no return statement" (Warning)
+
+        A non-void function has no return statement. Either this function
+        never returns (then better declare it as void) or it reaches
+        end of control which would be an error.
+
+        As main() cannot be declared as void you will not be warned if
+        main has no return statement. If you want a warning for main, too,
+        you can turn on warning 174.
+
+
+@item "function <main> has no return statement" (Warning)
+
+        The same like 173 for main, so you can turn it on/off separately.
+
+
+@item "this code is weird" (Warning)
+
+        The code has a very strange control flow. There is probably a
+        jump inside a loop or something similar and the optimizer will
+        not make any loop optimization and perhaps worse register
+        allocation on this construct.
+        There must be goto statements in the source.
+
+        This warning is only detected in optimizing compilation.
+
+
+@item "size of incomplete type not available" (Warning, ANSI-violation)
+
+        An incomplete type must not be the argument for sizeof.
+
+
+@item "line too long" (FATAL, Error, ANSI-violation, Preprocessor)
+
+
+
+@item "identifier must begin with a letter or underscore" (FATAL, Error, ANSI-violation, Preprocessor)
+
+
+
+@item "cannot redefine macro" (Error, ANSI-violation, Preprocessor)
+
+
+
+@item "missing ) after argumentlist" (Error, ANSI-violation, Preprocessor)
+
+
+
+@item "identifier expected" (Error, ANSI-violation, Preprocessor)
+
+
+
+@item "illegal character in identifier" (Error, ANSI-violation, Preprocessor)
+
+
+
+@item "missing operand before/after ##" (Error, ANSI-violation, Preprocessor)
+
+
+
+@item "no macro-argument after #-operator" (Error, ANSI-violation, Preprocessor)
+
+
+
+@item "macro redefinition not allowed" (Error, ANSI-violation, Preprocessor)
+
+
+
+@item "unexpected end of file (unterminated comment)" (FATAL, Error, Preprocessor)
+
+
+
+@item "too many nested includes" (FATAL, Error, Preprocessor)
+
+
+
+@item "#else without #if/#ifdef/#ifndef" (FATAL, Error, ANSI-violation, Preprocessor)
+
+
+
+@item "#else after #else" (Error, ANSI-violation, Preprocessor)
+
+
+
+@item "#endif without #if" (Error, ANSI-violation, Preprocessor)
+
+
+
+@item "cannot include file" (FATAL, Error, Preprocessor)
+
+
+
+@item "expected \" or < in #include-directive" (Error, ANSI-violation, Preprocessor)
+
+
+
+@item "unknown #-directive" (Warning, Preprocessor)
+
+
+
+@item "wrong number of macro arguments" (Error, ANSI-violation, Preprocessor)
+
+
+
+@item "macro argument expected" (Error, ANSI-violation, Preprocessor)
+
+
+
+@item "out of memory" (FATAL, Error, Preprocessor)
+
+
+
+@item "macro redefinition" (Warning, Preprocessor)
+
+
+
+@item "/* in comment" (Warning, Preprocessor)
+
+
+
+@item "cannot undefine macro" (Error, ANSI-violation, Preprocessor)
+
+
+
+@item "characters after #-directive ignored" (Warning, Preprocessor)
+
+
+
+@item "duplicate case labels" (Warning, ANSI-violation)
+
+        Each case-label in a switch-statement must have a distinct constant
+        value attached (after converting it to the type of the
+        switch-expression).
+
+
+@item "var <%s> is incomplete" (Warning, ANSI-violation)
+
+        An incomplete var was defined. probably you wrote something like:
+
+            int a[];
+
+
+@item "long float is no longer valid" (Warning, ANSI-violation)
+
+        'long float' was a synonym for double in K&R C, but this is no longer
+        allowed in ANSI C.
+
+
+@item "long double is not really supported by vbcc" (Warning)
+
+        vbcc does not know about long double yet and therefore will use it
+        simply as a synonym for double. This should not break any legal code,
+        but you will not get error messages if you e.g. assign a pointer to
+        double to a pointer to long double.
+
+
+@item "empty struct-declarations are not yet handled correct" (Warning)
+
+        obsolete
+
+
+@item "identifier too long (only %d characters are significant)" (Warning)
+
+
+
+@item "illegal initialization of var <%s>" (Warning, ANSI-violation)
+
+        Perhaps you tried to initialize a variable with external linkage
+        in an inner block.
+
+
+@item "suspicious loop" (Warning)
+
+        vbcc thinks a loop-condition looks suspicious. A possible example
+        could be for(i=0;i!=7;i+=2)
+
+
+@item "ansi/iso-mode turned on" (Warning)
+
+        You turned on the ANSI/ISO-conforming mode. This warning is always
+        displayed unless it is suppressed. So vbcc cannot be blamed to miss
+        a diagnostic for any constraint violation. :-)
+
+
+@item "division by zero (result set to 0)" (Warning, ANSI-violation)
+
+        Similar to warning 84.
+
+
+@item "constant out of range" (Warning, ANSI-violation)
+
+        An integral constant is too large to fit into an unsigned long.
+
+
+@item "constant is unsigned due to size" (Warning)
+
+        If an integral constant is so large that it cannot be represented
+        as long its type is promoted to unsigned long.
+
+
+@item "varargs function called without prototype in scope" (Warning)
+
+        A function which takes a variable number of arguments must not be
+        called without a prototype in scope. E.g. calling printf() without
+        #include <stdio.h> may cause this warning.
+
+
+@item "suspicious format string" (Warning)
+
+        The format-string of a printf-/scanflike function seems to be corrupt
+        or not matching the type of the arguments.
+
+
+@item "format string contains \'\\0\'" (Warning)
+
+        The format string for a printf-/scanflike function contains an
+        embedded '\0' character.
+
+
+@item "illegal use of keyword <%s>" (Warning, ANSI-violation)
+
+        The reserved keywords of C may not be used as identifier.
+
+
+@item "register <%s> used with wrong type" (Error)
+
+
+@item "register <%s> is not free" (Error)
+
+
+@item "'__reg' used in old-style function definition" (Warning)
+
+
+@item "unknown register \"%s\"" (Warning)
+
+
+@item "'...' only allowed with prototypes" (Warning, ANSI-violation)
+
+
+@item "Hey, do you really know the priority of '&&' vs. '||'?" (Warning)
+
+
+@item "be careful with priorities of <</>> vs. +/-" (Warning)
+
+
+@item "address of auto variable returned" (Warning)
+
+
+@item "void function returns a void expression" (Warning)
+
+
+@item "redeclaration of typedef <%s>" (Warning, ANSI-violation)
+
+
+@item "multiple specification of attribute \"%s\"" (Warning)
+
+
+@item "redeclaration of var \"%s\" with differing setting of attribute \"%s\"" (Warning)
+
+@item "string-constant expected" (Error)
+
+@item "tag \"%s\" used for wrong type" (Warning, ANSI-violation)
+
+@item "member after flexible array member" (Error, ANSI-violation)
+
+@item "illegal number" (Error, ANSI-violation)
+
+@item "void character constant" (Preprocessor, Error, ANSI-violation)
+
+@item "spurious tail in octal character constant" (Preprocessor, Error, ANSI-violation)
+
+@item "spurious tail in hexadecimal character constant" (Preprocessor, Error, ANSI-violation)
+
+@item "illegal escape sequence in character constant" (Preprocessor, Error, ANSI-violation)
+
+@item "invalid constant integer value" (Preprocessor, Error, ANSI-violation)
+
+@item "a right parenthesis was expected" (Preprocessor, Error, ANSI-violation)
+
+@item "a colon was expected" (Preprocessor, Error, ANSI-violation)
+
+@item "truncated constant integral expression" (Preprocessor, Error, ANSI-violation)
+
+@item "rogue operator '%s' in constant integral expression" (Preprocessor, Error, ANSI-violation)
+
+@item "invalid token in constant integral expression" (Preprocessor, Error, ANSI-violation)
+
+@item "trailing garbage in constant integral expression" (Preprocessor, Error, ANSI-violation)
+
+@item "void condition for a #if/#elif" (Preprocessor, Error, ANSI-violation)
+
+@item "void condition (after expansion) for a #if/#elif" (Preprocessor, Error, ANSI-violation)
+
+@item "invalid '#include'" (Preprocessor, Error, ANSI-violation)
+
+@item "macro expansion did not produce a valid filename for #include" (Preprocessor, Error, ANSI-violation)
+
+@item "file '%s' not found" (Preprocessor, Error, ANSI-violation)
+
+@item "not a valid number for #line" (Preprocessor, Error, ANSI-violation)
+
+@item "not a valid filename for #line" (Preprocessor, Error, ANSI-violation)
+
+@item "rogue '#'" (Preprocessor, Error, ANSI-violation)
+
+@item "rogue #else" (Preprocessor, Error, ANSI-violation)
+
+@item "rogue #elif" (Preprocessor, Error, ANSI-violation)
+
+@item "unmatched #endif" (Preprocessor, Error, ANSI-violation)
+
+@item "unknown cpp directive '#%s'" (Preprocessor, Error, ANSI-violation)
+
+@item "unterminated #if construction" (Preprocessor, Error, ANSI-violation)
+
+@item "could not flush output (disk full ?)" (Preprocessor, Error, ANSI-violation)
+
+@item "truncated token" (Preprocessor, Error, ANSI-violation)
+
+@item "illegal character '%c'" (Preprocessor, Error, ANSI-violation)
+
+@item "unfinished string at end of line" (Preprocessor, Error, ANSI-violation)
+
+@item "missing macro name" (Preprocessor, Error, ANSI-violation)
+
+@item "trying to redefine the special macro %s" (Preprocessor, Error, ANSI-violation)
+
+@item "truncated macro definition" (Preprocessor, Error, ANSI-violation)
+
+@item "'...' must end the macro argument list" (Preprocessor, Error, ANSI-violation)
+
+@item "void macro argument" (Preprocessor, Error, ANSI-violation)
+
+@item "missing comma in macro argument list" (Preprocessor, Error, ANSI-violation)
+
+@item "invalid macro argument" (Preprocessor, Error, ANSI-violation)
+
+@item "duplicate macro argument" (Preprocessor, Error, ANSI-violation)
+
+@item "'__VA_ARGS__' is forbidden in macros with a fixed number of arguments" (Preprocessor, Error, ANSI-violation)
+
+@item "operator '##' may neither begin nor end a macro" (Preprocessor, Error, ANSI-violation)
+
+@item "operator '#' not followed by a macro argument" (Preprocessor, Error, ANSI-violation)
+
+@item "macro '%s' redefined unidentically" (Preprocessor, Error, ANSI-violation)
+
+@item "not enough arguments to macro" (Preprocessor, Error, ANSI-violation)
+
+@item "unfinished macro call" (Preprocessor, Error, ANSI-violation)
+
+@item "too many argument to macro" (Preprocessor, Error, ANSI-violation)
+
+@item "operator '##' produced the invalid token '%s%s'" (Preprocessor, Error, ANSI-violation)
+
+@item "quad sharp" (Preprocessor, Error, ANSI-violation)
+
+@item "void macro name" (Preprocessor, Error, ANSI-violation)
+
+@item "macro %s already defined" (Preprocessor, Error, ANSI-violation)
+
+@item "trying to undef special macro %s" (Preprocessor, Error, ANSI-violation)
+
+@item "illegal macro name for #ifdef" (Preprocessor, Error, ANSI-violation)
+
+@item "unfinished #ifdef" (Preprocessor, Error, ANSI-violation)
+
+@item "illegal macro name for #undef" (Preprocessor, Error, ANSI-violation)
+
+@item "unfinished #undef" (Preprocessor, Error, ANSI-violation)
+
+@item "illegal macro name for #ifndef" (Preprocessor, Error, ANSI-violation)
+
+@item "unfinished #ifndef" (Preprocessor, Error, ANSI-violation)
+
+@item "reconstruction of <foo> in #include" (Preprocessor, Warning)
+
+@item "comment in the middle of a cpp directive" (Preprocessor, Warning)
+
+@item "null cpp directive" (Preprocessor, Warning)
+
+@item "rogue '#' in code compiled out" (Preprocessor, Warning)
+
+@item "rogue '#' dumped" (Preprocessor, Warning)
+
+@item "#error%s" (Preprocessor, ANSI-violation, Error)
+
+@item "trigraph ?""?%c encountered" (Preprocessor, Warning)
+
+@item "unterminated #if construction (depth %ld)" (Preprocessor, Error, ANSI-violation)
+
+@item "malformed identifier with UCN: '%s'" (Preprocessor, Warning, ANSI-violation)
+
+@item "truncated UTF-8 character" (Preprocessor, Warning, ANSI-violation)
+
+@item "identifier not followed by whitespace in #define" (Preprocessor, Warning, ANSI-violation)
+
+@item "assignment discards restrict" (Warning, ANSI-violation)
+
+@item "storage-class in declaration within for() converted to auto" (Warning, ANSI-violation)
+
+@item "corrupted special object" (ANSI-violation, Fatal)
+
+@item "<inline> only allowed in function declarations" (Error, ANSI-violation)
+
+@item "reference to static variable <%s> in inline function with external linkage" (Error, ANSI-violation)
+
+@item "underflow of pragma popwarn" (Error, ANSI-violation)
+
+@item "invalid argument to _Pragma" (Preprocessor, Error, ANSI-violation)
+
+@item "missing comma before '...'" (Preprocessor, Error, ANSI-violation)
+
+@item "padding bytes behind member <%s>" (Warning)
+
+@item "member <%s> does not have natural alignment" (Warning)
+
+@item "function <%s> exceeds %s limit" (Warning)
+
+@item "%s could not be calculated for function <%s>" (Warning)
+
+@item "offsetof applied to non-struct" (Error, ANSI-violation) 
+
+@item "trailing garbage in #ifdef" (Preprocessor, Warning, ANSI-violation)
+
+@item "too many arguments to macro" (Preprocessor, Warning, ANSI-violation)
+
+@item "truncated comment" (Preprocessor, Warning|ANSI-violation)
+
+@item "trailing garbage in preprocessing directive" (Preprocessor, Warning, ANSI-violation)
+
+@item "variable-length array must have auto storage-class" (Error, ANSI-violation)
+
+@item "member <%s> has type with zero alignment/size (probably void)" (Error, ANSI-violation, Fatal)
+
+@item "stack information for target <%s> unavailable" (Warning)
+
+@item "used registers information unavailable for target <%s>" (Warning)
+
+@item "computed %sstack usage %d but set to %d" (Warning)
+
+@item "unable to compute call targets" (Warning)
+
+@item "computed register usage differs from specified one" (Warning)
+
+@item "trailing garbage in #include" (Preprocessor, Warning ,ANSI-violation)
+
+@item "target-warning: %s" (Warning)
+
+@item "target-error: %s" (Error)