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

0 commit comments

Comments
 (0)