From eb1cf750f285dffd3d3b6de227482e69f1b79c01 Mon Sep 17 00:00:00 2001 From: Dirk Lehmann Date: Mon, 12 Apr 2021 17:05:31 +0200 Subject: [PATCH] -W-unreachable-code option added, alphabetic order of --list-warnings --- doc/cc65.sgml | 2 ++ src/cc65/error.c | 6 ++++-- src/cc65/error.h | 3 ++- src/cc65/stmt.c | 2 +- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/doc/cc65.sgml b/doc/cc65.sgml index 24f4422f4..240c2bc09 100644 --- a/doc/cc65.sgml +++ b/doc/cc65.sgml @@ -555,6 +555,8 @@ Here is a description of all the command line options: Warn when passing structs by value. Warn about #pragmas that aren't recognized by cc65. + + Warn about unreachable code in cases of comparing constants, etc. Warn about unused labels. diff --git a/src/cc65/error.c b/src/cc65/error.c index ec665b319..0118d50b8 100644 --- a/src/cc65/error.c +++ b/src/cc65/error.c @@ -71,12 +71,13 @@ IntStack WarnNoEffect = INTSTACK(1); /* - statements without an effect */ IntStack WarnPointerSign = INTSTACK(1); /* - pointer conversion to pointer differing in signedness */ IntStack WarnPointerTypes = INTSTACK(1); /* - pointer conversion to incompatible pointer type */ IntStack WarnRemapZero = INTSTACK(1); /* - remapping character code zero */ +IntStack WarnReturnType = INTSTACK(1); /* - control reaches end of non-void function */ IntStack WarnStructParam = INTSTACK(0); /* - structs passed by val */ IntStack WarnUnknownPragma = INTSTACK(1); /* - unknown #pragmas */ +IntStack WarnUnreachableCode= INTSTACK(1); /* - unreachable code */ IntStack WarnUnusedLabel = INTSTACK(1); /* - unused labels */ IntStack WarnUnusedParam = INTSTACK(1); /* - unused parameters */ IntStack WarnUnusedVar = INTSTACK(1); /* - unused variables */ -IntStack WarnReturnType = INTSTACK(1); /* - control reaches end of non-void function */ /* Map the name of a warning to the intstack that holds its state */ typedef struct WarnMapEntry WarnMapEntry; @@ -92,12 +93,13 @@ static WarnMapEntry WarnMap[] = { { &WarnPointerSign, "pointer-sign" }, { &WarnPointerTypes, "pointer-types" }, { &WarnRemapZero, "remap-zero" }, + { &WarnReturnType, "return-type" }, { &WarnStructParam, "struct-param" }, { &WarnUnknownPragma, "unknown-pragma" }, + { &WarnUnreachableCode, "unreachable-code" }, { &WarnUnusedLabel, "unused-label" }, { &WarnUnusedParam, "unused-param" }, { &WarnUnusedVar, "unused-var" }, - { &WarnReturnType, "return-type" }, }; Collection DiagnosticStrBufs; diff --git a/src/cc65/error.h b/src/cc65/error.h index a7592b366..31c46f513 100644 --- a/src/cc65/error.h +++ b/src/cc65/error.h @@ -68,12 +68,13 @@ extern IntStack WarnPointerSign; /* - pointer conversion to pointer diffe extern IntStack WarnPointerTypes; /* - pointer conversion to incompatible pointer type */ extern IntStack WarnNoEffect; /* - statements without an effect */ extern IntStack WarnRemapZero; /* - remapping character code zero */ +extern IntStack WarnReturnType; /* - control reaches end of non-void function */ extern IntStack WarnStructParam; /* - structs passed by val */ extern IntStack WarnUnknownPragma; /* - unknown #pragmas */ +extern IntStack WarnUnreachableCode; /* - unreachable code */ extern IntStack WarnUnusedLabel; /* - unused labels */ extern IntStack WarnUnusedParam; /* - unused parameters */ extern IntStack WarnUnusedVar; /* - unused variables */ -extern IntStack WarnReturnType; /* - control reaches end of non-void function */ /* Forward */ struct StrBuf; diff --git a/src/cc65/stmt.c b/src/cc65/stmt.c index 9890c5467..ccb113978 100644 --- a/src/cc65/stmt.c +++ b/src/cc65/stmt.c @@ -187,7 +187,7 @@ static int IfStatement (void) /* If the if expression was always true, the code in the else branch ** is never executed. Output a warning if this is the case. */ - if (TestResult == TESTEXPR_TRUE) { + if (TestResult == TESTEXPR_TRUE && IS_Get (&WarnUnreachableCode)) { Warning ("Unreachable code"); }