Implement -Wunmatched-directive

This commit is contained in:
Rangi42
2024-11-28 14:06:52 -05:00
committed by Eldred Habert
parent 9216485bca
commit a27f704c25
15 changed files with 51 additions and 0 deletions

View File

@@ -113,6 +113,12 @@ void charmap_Pop() {
charmapStack.pop();
}
void charmap_CheckStack() {
if (!charmapStack.empty()) {
warning(WARNING_UNMATCHED_DIRECTIVE, "`PUSHC` without corresponding `POPC`\n");
}
}
void charmap_Add(std::string const &mapping, std::vector<int32_t> &&value) {
if (mapping.empty()) {
error("Cannot map an empty string\n");

View File

@@ -384,6 +384,10 @@ int main(int argc, char *argv[]) {
sect_CheckLoadClosed();
sect_CheckSizes();
charmap_CheckStack();
opt_CheckStack();
sect_CheckStack();
if (nbErrors != 0)
errx("Assembly aborted (%u error%s)!", nbErrors, nbErrors == 1 ? "" : "s");

View File

@@ -184,3 +184,9 @@ void opt_Pop() {
warningsAreErrors = entry.warningsAreErrors;
warningStates = entry.warningStates;
}
void opt_CheckStack() {
if (!stack.empty()) {
warning(WARNING_UNMATCHED_DIRECTIVE, "`PUSHO` without corresponding `POPO`\n");
}
}

View File

@@ -973,6 +973,12 @@ void sect_PopSection() {
std::swap(currentUnionStack, entry.unionStack);
}
void sect_CheckStack() {
if (!sectionStack.empty()) {
warning(WARNING_UNMATCHED_DIRECTIVE, "`PUSHS` without corresponding `POPS`\n");
}
}
void sect_EndSection() {
if (!currentSection)
fatalerror("Cannot end the section outside of a SECTION\n");

View File

@@ -56,6 +56,7 @@ static const WarningFlag warningFlags[NB_WARNINGS] = {
{"obsolete", LEVEL_DEFAULT },
{"shift", LEVEL_EVERYTHING},
{"shift-amount", LEVEL_EVERYTHING},
{"unmatched-directive", LEVEL_EXTRA },
{"unterminated-load", LEVEL_EXTRA },
{"user", LEVEL_DEFAULT },
// Parametric warnings