Skip to content

Commit aa6742e

Browse files
committed
Declarations4: change RULE-8-6 to share with M3-2-4
1 parent 3b4443e commit aa6742e

18 files changed

+59
-50
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
// GENERATED FILE - DO NOT MODIFY
2+
import codingstandards.cpp.rules.identifierwithexternallinkageonedefinitionshared.IdentifierWithExternalLinkageOneDefinitionShared
Lines changed: 7 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/**
22
* @id c/misra/identifier-with-external-linkage-one-definition
3-
* @name RULE-8-6: An identifier with external linkage shall have exactly one external definition
3+
* @name RULE-8-6: An identifier with external linkage shall have exactly one definition
44
* @description An identifier with multiple definitions in different translation units leads to
55
* undefined behavior.
66
* @kind problem
@@ -13,26 +13,10 @@
1313

1414
import cpp
1515
import codingstandards.c.misra
16-
import codingstandards.cpp.Identifiers
16+
import codingstandards.cpp.rules.identifierwithexternallinkageonedefinitionshared.IdentifierWithExternalLinkageOneDefinitionShared
1717

18-
from ExternalIdentifiers d, DeclarationEntry de1, DeclarationEntry de2
19-
where
20-
not isExcluded(d, Declarations4Package::identifierWithExternalLinkageOneDefinitionQuery()) and
21-
not isExcluded([de1, de2], Declarations4Package::identifierWithExternalLinkageOneDefinitionQuery()) and
22-
d.isTopLevel() and
23-
d = de1.getDeclaration() and
24-
d = de2.getDeclaration() and
25-
de1 != de2 and
26-
de1.isDefinition() and
27-
de2.isDefinition() and
28-
//exceptions
29-
(d instanceof Function implies not d.(Function).isInline()) and
30-
// Apply an ordering based on location to enforce that (de1, de2) = (de2, de1) and we only report (de1, de2).
31-
(
32-
de1.getFile().getAbsolutePath() < de2.getFile().getAbsolutePath()
33-
or
34-
de1.getFile().getAbsolutePath() = de2.getFile().getAbsolutePath() and
35-
de1.getLocation().getStartLine() < de2.getLocation().getStartLine()
36-
)
37-
select de1, "The identifier " + de1.getName() + " has external linkage and is redefined $@.", de2,
38-
"here"
18+
class IdentifierWithExternalLinkageShallHaveOneDefinitionQuery extends IdentifierWithExternalLinkageOneDefinitionSharedSharedQuery {
19+
IdentifierWithExternalLinkageShallHaveOneDefinitionQuery() {
20+
this = Declarations4Package::identifierWithExternalLinkageOneDefinitionQuery()
21+
}
22+
}

c/misra/test/rules/RULE-8-6/IdentifierWithExternalLinkageOneDefinition.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/identifierwithexternallinkageonedefinitionshared/IdentifierWithExternalLinkageOneDefinitionShared.ql

cpp/autosar/src/rules/M3-2-4/IdentifierWithExternalLinkageShallHaveOneDefinition.ql

Lines changed: 6 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -15,28 +15,10 @@
1515

1616
import cpp
1717
import codingstandards.cpp.autosar
18-
import codingstandards.cpp.Linkage
18+
import codingstandards.cpp.rules.identifierwithexternallinkageonedefinitionshared.IdentifierWithExternalLinkageOneDefinitionShared
1919

20-
from Declaration d, DeclarationEntry de1, DeclarationEntry de2
21-
where
22-
not isExcluded(d) and
23-
not isExcluded([de1, de2]) and
24-
hasExternalLinkage(d) and
25-
d.isTopLevel() and
26-
d = de1.getDeclaration() and
27-
d = de2.getDeclaration() and
28-
de1 != de2 and
29-
de1.isDefinition() and
30-
de2.isDefinition() and
31-
// exceptions
32-
not d instanceof TemplateClass and
33-
(d instanceof Function implies not d.(Function).isInline()) and
34-
// Apply an ordering based on location to enforce that (de1, de2) = (de2, de1) and we only report (de1, de2).
35-
(
36-
de1.getFile().getAbsolutePath() < de2.getFile().getAbsolutePath()
37-
or
38-
de1.getFile().getAbsolutePath() = de2.getFile().getAbsolutePath() and
39-
de1.getLocation().getStartLine() < de2.getLocation().getStartLine()
40-
)
41-
select de1, "The identifier " + de1.getName() + " has external linkage and is redefined $@.", de2,
42-
"here"
20+
class IdentifierWithExternalLinkageOneDefinitionQuery extends IdentifierWithExternalLinkageOneDefinitionSharedSharedQuery {
21+
IdentifierWithExternalLinkageOneDefinitionQuery() {
22+
this = ScopePackage::identifierWithExternalLinkageShallHaveOneDefinitionQuery()
23+
}
24+
}

cpp/autosar/test/rules/M3-2-4/IdentifierWithExternalLinkageShallHaveOneDefinition.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+
cpp/common/test/rules/identifierwithexternallinkageonedefinitionshared/IdentifierWithExternalLinkageOneDefinitionShared.ql
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/**
2+
* Provides a library which includes a `problems` predicate for reporting....
3+
*/
4+
5+
import cpp
6+
import codingstandards.cpp.Customizations
7+
import codingstandards.cpp.Exclusions
8+
import codingstandards.cpp.Linkage
9+
10+
abstract class IdentifierWithExternalLinkageOneDefinitionSharedSharedQuery extends Query { }
11+
12+
Query getQuery() { result instanceof IdentifierWithExternalLinkageOneDefinitionSharedSharedQuery }
13+
14+
query predicate problems(DeclarationEntry de1, string message, DeclarationEntry de2, string de2Str) {
15+
exists(Declaration d |
16+
not isExcluded(de1, getQuery()) and
17+
hasExternalLinkage(d) and
18+
d.isTopLevel() and
19+
d = de1.getDeclaration() and
20+
d = de2.getDeclaration() and
21+
de1 != de2 and
22+
de1.isDefinition() and
23+
de2.isDefinition() and
24+
// exceptions
25+
not d instanceof TemplateClass and
26+
(d instanceof Function implies not d.(Function).isInline()) and
27+
// Apply an ordering based on location to enforce that (de1, de2) = (de2, de1) and we only report (de1, de2).
28+
(
29+
de1.getFile().getAbsolutePath() < de2.getFile().getAbsolutePath()
30+
or
31+
de1.getFile().getAbsolutePath() = de2.getFile().getAbsolutePath() and
32+
de1.getLocation().getStartLine() < de2.getLocation().getStartLine()
33+
) and
34+
message = "The identifier " + de1.getName() + " has external linkage and is redefined $@." and
35+
de2Str = "here"
36+
)
37+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
// GENERATED FILE - DO NOT MODIFY
2+
import codingstandards.cpp.rules.identifierwithexternallinkageonedefinitionshared.IdentifierWithExternalLinkageOneDefinitionShared

rule_packages/c/Declarations4.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,10 +103,11 @@
103103
{
104104
"description": "An identifier with multiple definitions in different translation units leads to undefined behavior.",
105105
"kind": "problem",
106-
"name": "An identifier with external linkage shall have exactly one external definition",
106+
"name": "An identifier with external linkage shall have exactly one definition",
107107
"precision": "high",
108108
"severity": "error",
109109
"short_name": "IdentifierWithExternalLinkageOneDefinition",
110+
"shared_implementation_short_name": "IdentifierWithExternalLinkageOneDefinitionShared",
110111
"tags": [
111112
"correctness"
112113
]

rule_packages/cpp/Scope.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@
156156
"precision": "high",
157157
"severity": "error",
158158
"short_name": "IdentifierWithExternalLinkageShallHaveOneDefinition",
159+
"shared_implementation_short_name": "IdentifierWithExternalLinkageOneDefinitionShared",
159160
"tags": [
160161
"correctness"
161162
]

0 commit comments

Comments
 (0)