Vault 7: Projects
This publication series is about specific projects related to the Vault 7 main publication.
Compiler Command-Line Driver
2012-2013 Microchip Technology Inc. DS50002071C-page 89
-Wsequence-point Warn about code that may have undefined semantics because
of violations of sequence point rules in the C standard.
The C standard defines the order in which expressions in a C
program are evaluated in terms of sequence points, which rep-
resent a partial ordering between the execution of parts of the
program: those executed before the sequence point and those
executed after it. These occur after the evaluation of a full
expression (one which is not part of a larger expression), after
the evaluation of the first operand of a &&, ||, ? : or ,
(comma) operator, before a function is called (but after the eval-
uation of its arguments and the expression denoting the called
function), and in certain other places. Other than as expressed
by the sequence point rules, the order of evaluation of subex-
pressions of an expression is not specified. All these rules
describe only a partial order rather than a total order, since, for
example, if two functions are called within one expression with
no sequence point between them, the order in which the func-
tions are called is not specified. However, the standards com-
mittee has ruled that function calls do not overlap.
It is not specified, when, between sequence points
modifications to the values of objects take effect. Programs
whose behavior depends on this have undefined behavior; the
C standard specifies that Between the previous and next
sequence point, an object shall have its stored value modified,
at most once, by the evaluation of an expression. Furthermore,
the prior value shall be read only to determine the value to be
stored. If a program breaks these rules, the results on any par-
ticular implementation are entirely unpredictable.
Examples of code with undefined behavior are a = a++;,
a[n] = b[n++] and a[i++] = i;. Some more complicated
cases are not diagnosed by this option, and it may give an
occasional false positive result, but in general it has been found
fairly effective at detecting this sort of problem in programs.
-Wswitch Warn whenever a switch statement has an index of enumeral
type and lacks a case for one or more of the named codes of
that enumeration. (The presence of a default label prevents this
warning.) case labels outside the enumeration range also pro-
voke warnings when this option is used.
-Wsystem-headers Print warning messages for constructs found in system header
files. Warnings from system headers are normally suppressed,
on the assumption that they usually do not indicate real prob-
lems and would only make the compiler output harder to read.
Using this command line option tells the compiler to emit warn-
ings from system headers as if they occurred in user code.
However, note that using -Wall in conjunction with this option
will not warn about unknown pragmas in system headers; for
that, -Wunknown-pragmas must also be used.
-Wtrigraphs Warn if any trigraphs are encountered (assuming they are
enabled).
TABLE 5-8: WARNING/ERROR OPTIONS IMPLIED BY -WALL (CONTINUED)
Option Definition
Protego_Release_01_05-Related-OEM-Documentation-MPLAB-XC16-C-Compiler.pdf