Skip to content

Commit af73a78

Browse files
committed
Declarations1: add rule 21-2
1 parent 110f211 commit af73a78

File tree

14 files changed

+146
-58
lines changed

14 files changed

+146
-58
lines changed

c/cert/src/rules/DCL37-C/DoNotDeclareOrDefineAReservedIdentifier.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,14 @@ This query implements the CERT-C rule DCL37-C:
44

55
> Do not declare or define a reserved identifier
66
7+
78
## CERT
89

910
** REPLACE THIS BY RUNNING THE SCRIPT `scripts/help/cert-help-extraction.py` **
1011

1112
## Implementation notes
1213

13-
None
14+
This query does not consider identifiers described in the future library directions section of the standard. This query also checks for any reserved identifier as declared regardless of whether its header file is included or not.
1415

1516
## References
1617

c/cert/src/rules/DCL37-C/DoNotDeclareOrDefineAReservedIdentifier.ql

Lines changed: 6 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -14,27 +14,10 @@
1414

1515
import cpp
1616
import codingstandards.c.cert
17-
import codingstandards.cpp.Naming
18-
import codingstandards.c.Keywords
17+
import codingstandards.cpp.rules.declaredareservedidentifier.DeclaredAReservedIdentifier
1918

20-
from Element m, string name
21-
where
22-
not isExcluded(m, Declarations1Package::doNotDeclareOrDefineAReservedIdentifierQuery()) and
23-
(
24-
m.(Macro).hasName(name) or
25-
m.(Declaration).hasGlobalName(name)
26-
) and
27-
(
28-
Naming::Cpp14::hasStandardLibraryMacroName(name)
29-
or
30-
Naming::Cpp14::hasStandardLibraryObjectName(name)
31-
or
32-
Naming::Cpp14::hasStandardLibraryFunctionName(name)
33-
or
34-
name.regexpMatch("_[A-Z_].*")
35-
or
36-
name.regexpMatch("_.*") and m.(Declaration).hasGlobalName(name)
37-
or
38-
Keywords::isKeyword(name)
39-
)
40-
select m, "Reserved identifier '" + name + "' is declared."
19+
class DoNotDeclareAReservedIdentifierQuery extends DeclaredAReservedIdentifierSharedQuery {
20+
DoNotDeclareAReservedIdentifierQuery() {
21+
this = Declarations1Package::doNotDeclareOrDefineAReservedIdentifierQuery()
22+
}
23+
}

c/cert/test/rules/DCL37-C/DoNotDeclareOrDefineAReservedIdentifier.qlref

Lines changed: 0 additions & 1 deletion
This file was deleted.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
c/common/test/rules/declaredareservedidentifier/DeclaredAReservedIdentifier.ql
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
// GENERATED FILE - DO NOT MODIFY
2+
import codingstandards.cpp.rules.declaredareservedidentifier.DeclaredAReservedIdentifier
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/**
2+
* @id c/misra/do-not-declare-a-reserved-identifier
3+
* @name RULE-21-2: A reserved identifier or reserved macro name shall not be declared
4+
* @description Declaring a reserved identifier can lead to undefined behaviour.
5+
* @kind problem
6+
* @precision very-high
7+
* @problem.severity warning
8+
* @tags external/misra/id/rule-21-2
9+
* correctness
10+
* maintainability
11+
* readability
12+
* external/misra/obligation/required
13+
*/
14+
15+
import cpp
16+
import codingstandards.c.misra
17+
import codingstandards.cpp.rules.declaredareservedidentifier.DeclaredAReservedIdentifier
18+
19+
class DoNotDeclareAReservedIdentifierQuery extends DeclaredAReservedIdentifierSharedQuery {
20+
DoNotDeclareAReservedIdentifierQuery() {
21+
this = Declarations1Package::doNotDeclareAReservedIdentifierQuery()
22+
}
23+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
c/common/test/rules/declaredareservedidentifier/DeclaredAReservedIdentifier.ql

0 commit comments

Comments
 (0)