diff --git a/addons/misra-test.c b/addons/misra-test.c index 51bf8f238..ece5e4540 100644 --- a/addons/misra-test.c +++ b/addons/misra-test.c @@ -196,3 +196,6 @@ void misra_18_8(int x) { union misra_19_2 { }; // 19.2 #include "notfound.h" // 20.1 + +#define int short // 20.4 +#undef X // 20.5 diff --git a/addons/misra.py b/addons/misra.py index 2745eea63..5cd3382ab 100644 --- a/addons/misra.py +++ b/addons/misra.py @@ -633,6 +633,14 @@ def misra_20_4(rawTokens): if macroName in KEYWORDS: reportError(token, 20, 4) +def misra_20_5(rawTokens): + linenr = -1 + for token in rawTokens: + if token.str.startswith('/') or token.linenr == linenr: + continue + linenr = token.linenr + if simpleMatch(token, '# undef'): + reportError(token, 20, 5) if '-verify' in sys.argv[1:]: VERIFY = True @@ -703,6 +711,8 @@ for arg in sys.argv[1:]: misra_20_1(data.rawTokens) misra_20_2(data.rawTokens) misra_20_3(data.rawTokens) + misra_20_4(data.rawTokens) + misra_20_5(data.rawTokens) if VERIFY: for expected in VERIFY_EXPECTED: