-Wmacro-shift warns about shifting macro arguments too far (#741)

Fixes #735
This commit is contained in:
Rangi
2021-02-16 13:31:01 -08:00
committed by GitHub
parent 122ba6eba5
commit cb61da8842
9 changed files with 40 additions and 10 deletions

View File

@@ -168,12 +168,17 @@ void macro_ShiftCurrentArgs(int32_t count)
{
if (!macroArgs) {
error("Cannot shift macro arguments outside of a macro\n");
} else if (macroArgs->shift < macroArgs->nbArgs) {
} else if (count > 0 && (count > macroArgs->nbArgs
|| macroArgs->shift > macroArgs->nbArgs - count)) {
warning(WARNING_MACRO_SHIFT,
"Cannot shift macro arguments past their end\n");
macroArgs->shift = macroArgs->nbArgs;
} else if (count < 0 && macroArgs->shift < -count) {
warning(WARNING_MACRO_SHIFT,
"Cannot shift macro arguments past their beginning\n");
macroArgs->shift = 0;
} else {
macroArgs->shift += count;
if (macroArgs->shift > macroArgs->nbArgs)
macroArgs->shift = macroArgs->nbArgs;
else if (macroArgs->shift < 0)
macroArgs->shift = 0;
}
}