Add check for MISRA-C 2012 rule 4.2 - Trigraphs should not be used - as well as some test cases. (#2253)
This commit is contained in:
parent
c04e25e936
commit
1df97ac5c8
|
@ -776,6 +776,16 @@ class MisraChecker:
|
||||||
else:
|
else:
|
||||||
self.reportError(token, 4, 1)
|
self.reportError(token, 4, 1)
|
||||||
|
|
||||||
|
def misra_4_2(self, rawTokens):
|
||||||
|
for token in rawTokens:
|
||||||
|
if (token.str[0] != '"') or (token.str[-1] != '"'):
|
||||||
|
continue
|
||||||
|
# Check for trigraph sequence as defined by ISO/IEC 9899:1999
|
||||||
|
for sequence in ['??=', '??(', '??/', '??)', '??\'', '??<', '??!', '??>', '??-']:
|
||||||
|
if sequence in token.str[1:-1]:
|
||||||
|
# First trigraph sequence match, report error and leave loop.
|
||||||
|
self.reportError(token, 4, 2)
|
||||||
|
break
|
||||||
|
|
||||||
def misra_5_1(self, data):
|
def misra_5_1(self, data):
|
||||||
long_vars = {}
|
long_vars = {}
|
||||||
|
@ -2395,6 +2405,7 @@ class MisraChecker:
|
||||||
if cfgNumber == 1:
|
if cfgNumber == 1:
|
||||||
self.misra_3_1(data.rawTokens)
|
self.misra_3_1(data.rawTokens)
|
||||||
self.misra_4_1(data.rawTokens)
|
self.misra_4_1(data.rawTokens)
|
||||||
|
self.misra_4_2(data.rawTokens)
|
||||||
self.misra_5_1(cfg)
|
self.misra_5_1(cfg)
|
||||||
self.misra_5_2(cfg)
|
self.misra_5_2(cfg)
|
||||||
self.misra_5_3(cfg)
|
self.misra_5_3(cfg)
|
||||||
|
|
|
@ -101,6 +101,16 @@ void misra_4_1()
|
||||||
(void)printf("\x41" "g");
|
(void)printf("\x41" "g");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *s42_1 = "String containing trigraphs ??-??-??"; // 4.2
|
||||||
|
const char *s42_2 = "String containing trigraph???=preceeded by questionmark"; // 4.2
|
||||||
|
const char *s42_3 = "No trigraph?(?'?)";
|
||||||
|
|
||||||
|
void misra_4_2()
|
||||||
|
{
|
||||||
|
(void)printf("??=Trigraph\n"); // 4.2
|
||||||
|
(void)printf("No?/Trigraph\n");
|
||||||
|
}
|
||||||
|
|
||||||
extern int misra_5_3_var_hides_var______31x;
|
extern int misra_5_3_var_hides_var______31x;
|
||||||
void misra_5_3_var_hides_function_31x (void) {}
|
void misra_5_3_var_hides_function_31x (void) {}
|
||||||
enum misra_5_3_Enum {
|
enum misra_5_3_Enum {
|
||||||
|
|
Loading…
Reference in New Issue