diff --git a/doc/cc65.sgml b/doc/cc65.sgml index 50236231c..c5e450872 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -471,6 +471,8 @@ Here is a description of all the command line options: Treat all warnings as errors. + + Warn about statements that don't have an effect. Warn about known #pragmas. diff --git a/src/cc65/error.c b/src/cc65/error.c index f73f0a4a0..bce570e34 100644 --- a/src/cc65/error.c +++ b/src/cc65/error.c @@ -6,7 +6,7 @@ /* */ /* */ /* */ -/* (C) 1998-2009, Ullrich von Bassewitz */ +/* (C) 1998-2010, Ullrich von Bassewitz */ /* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ @@ -63,11 +63,13 @@ unsigned WarningCount = 0; /* Warning and error options */ IntStack WarnEnable = INTSTACK(1); /* Enable warnings */ IntStack WarningsAreErrors = INTSTACK(0); /* Treat warnings as errors */ -IntStack WarnStructParam = INTSTACK(1); /* Warn about structs passed by val */ -IntStack WarnUnusedLabel = INTSTACK(1); /* Warn about unused labels */ -IntStack WarnUnusedParam = INTSTACK(1); /* Warn about unused parameters */ -IntStack WarnUnusedVar = INTSTACK(1); /* Warn about unused variables */ -IntStack WarnUnknownPragma = INTSTACK(1); /* Warn about unknown #pragmas */ + /* Warn about: */ +IntStack WarnNoEffect = INTSTACK(1); /* ... statements without an effect */ +IntStack WarnStructParam = INTSTACK(1); /* ... structs passed by val */ +IntStack WarnUnusedLabel = INTSTACK(1); /* ... unused labels */ +IntStack WarnUnusedParam = INTSTACK(1); /* ... unused parameters */ +IntStack WarnUnusedVar = INTSTACK(1); /* ... unused variables */ +IntStack WarnUnknownPragma = INTSTACK(1); /* ... unknown #pragmas */ /* Map the name of a warning to the intstack that holds its state */ typedef struct WarnMapEntry WarnMapEntry; @@ -78,6 +80,7 @@ struct WarnMapEntry { static WarnMapEntry WarnMap[] = { /* Keep sorted, even if this isn't used for now */ { &WarningsAreErrors, "error" }, + { &WarnNoEffect, "no-effect" }, { &WarnStructParam, "struct-param" }, { &WarnUnknownPragma, "unknown-pragma" }, { &WarnUnusedLabel, "unused-label" }, diff --git a/src/cc65/error.h b/src/cc65/error.h index ad66a1506..3a4f9c053 100644 --- a/src/cc65/error.h +++ b/src/cc65/error.h @@ -6,7 +6,7 @@ /* */ /* */ /* */ -/* (C) 1998-2009, Ullrich von Bassewitz */ +/* (C) 1998-2010, Ullrich von Bassewitz */ /* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ @@ -60,11 +60,13 @@ extern unsigned WarningCount; /* Warning and error options */ extern IntStack WarnEnable; /* Enable warnings */ extern IntStack WarningsAreErrors; /* Treat warnings as errors */ -extern IntStack WarnStructParam; /* Warn about structs passed by val */ -extern IntStack WarnUnusedLabel; /* Warn about unused labels */ -extern IntStack WarnUnusedParam; /* Warn about unused parameters */ -extern IntStack WarnUnusedVar; /* Warn about unused variables */ -extern IntStack WarnUnknownPragma; /* Warn about unknown #pragmas */ + /* Warn about: */ +extern IntStack WarnNoEffect; /* ... statements without an effect */ +extern IntStack WarnStructParam; /* ... structs passed by val */ +extern IntStack WarnUnusedLabel; /* ... unused labels */ +extern IntStack WarnUnusedParam; /* ... unused parameters */ +extern IntStack WarnUnusedVar; /* ... unused variables */ +extern IntStack WarnUnknownPragma; /* ... unknown #pragmas */ diff --git a/src/cc65/pragma.c b/src/cc65/pragma.c index 608ef7e6d..2a4e1085a 100644 --- a/src/cc65/pragma.c +++ b/src/cc65/pragma.c @@ -238,7 +238,7 @@ static IntStack* GetWarning (StrBuf* B) /* Done */ return S; -} +} @@ -490,7 +490,7 @@ static void WarnPragma (StrBuf* B) int Push; /* A warning name must follow */ - IntStack* S =GetWarning (B); + IntStack* S = GetWarning (B); if (S == 0) { return; } diff --git a/src/cc65/stmt.c b/src/cc65/stmt.c index 5078bfa11..5bc4df4a9 100644 --- a/src/cc65/stmt.c +++ b/src/cc65/stmt.c @@ -6,7 +6,7 @@ /* */ /* */ /* */ -/* (C) 1998-2009, Ullrich von Bassewitz */ +/* (C) 1998-2010, Ullrich von Bassewitz */ /* Roemerstrasse 52 */ /* D-70794 Filderstadt */ /* EMail: uz@cc65.org */ @@ -653,7 +653,9 @@ int Statement (int* PendingToken) * void, emit a warning. */ GetCodePos (&End); - if (CodeRangeIsEmpty (&Start, &End) && !IsTypeVoid (Expr.Type)) { + if (CodeRangeIsEmpty (&Start, &End) && + !IsTypeVoid (Expr.Type) && + IS_Get (&WarnNoEffect)) { Warning ("Statement has no effect"); } CheckSemi (PendingToken);