Implement -Wpurge= (#1443)

This commit is contained in:
Sylvie
2024-08-05 12:50:48 -04:00
committed by GitHub
parent f304e1dd7f
commit 2f8f99bd94
14 changed files with 59 additions and 10 deletions

View File

@@ -169,6 +169,10 @@ void sym_Purge(std::string const &symName) {
} else if (sym->ID != (uint32_t)-1) {
error("Symbol \"%s\" is referenced and thus cannot be purged\n", symName.c_str());
} else {
if (sym->isExported)
warning(WARNING_PURGE_1, "Purging an exported symbol \"%s\"\n", symName.c_str());
else if (sym->isLabel())
warning(WARNING_PURGE_2, "Purging a label \"%s\"\n", symName.c_str());
// Do not keep a reference to the label's name after purging it
if (sym->name == labelScope)
labelScope = std::nullopt;

View File

@@ -41,6 +41,8 @@ static WarningState const defaultWarnings[ARRAY_SIZE(warningStates)] = {
WARNING_DISABLED, // WARNING_NUMERIC_STRING_2
WARNING_ENABLED, // WARNING_TRUNCATION_1
WARNING_DISABLED, // WARNING_TRUNCATION_2
WARNING_ENABLED, // WARNING_PURGE_1
WARNING_DISABLED, // WARNING_PURGE_2
WARNING_ENABLED, // WARNING_UNMAPPED_CHAR_1
WARNING_DISABLED, // WARNING_UNMAPPED_CHAR_2
};
@@ -87,6 +89,8 @@ static char const * const warningFlags[NB_WARNINGS] = {
// Parametric warnings
"numeric-string",
"numeric-string",
"purge",
"purge",
"truncation",
"truncation",
"unmapped-char",
@@ -104,6 +108,7 @@ static const struct {
uint8_t defaultLevel;
} paramWarnings[] = {
{"numeric-string", 2, 1},
{"purge", 2, 1},
{"truncation", 2, 2},
{"unmapped-char", 2, 1},
};
@@ -161,6 +166,8 @@ static uint8_t const _wallCommands[] = {
WARNING_LARGE_CONSTANT,
WARNING_NESTED_COMMENT,
WARNING_OBSOLETE,
WARNING_PURGE_1,
WARNING_PURGE_2,
WARNING_UNMAPPED_CHAR_1,
META_WARNING_DONE,
};
@@ -171,6 +178,8 @@ static uint8_t const _wextraCommands[] = {
WARNING_MACRO_SHIFT,
WARNING_NESTED_COMMENT,
WARNING_OBSOLETE,
WARNING_PURGE_1,
WARNING_PURGE_2,
WARNING_TRUNCATION_1,
WARNING_TRUNCATION_2,
WARNING_UNMAPPED_CHAR_1,
@@ -190,6 +199,8 @@ static uint8_t const _weverythingCommands[] = {
WARNING_MACRO_SHIFT,
WARNING_NESTED_COMMENT,
WARNING_OBSOLETE,
WARNING_PURGE_1,
WARNING_PURGE_2,
WARNING_SHIFT,
WARNING_SHIFT_AMOUNT,
WARNING_TRUNCATION_1,