Skip to content

Commit 8ea015a

Browse files
authored
Merge branch 'main' into rvermeulen/fix-466
2 parents 65b8539 + 4d804eb commit 8ea015a

File tree

10 files changed

+41
-78
lines changed

10 files changed

+41
-78
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
* `A7-1-1` - no longer report parameters as contravening this rule. This is inline with the rule intent as described in the referenced C++ Core Guidelines rule [CON.1](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#con1-by-default-make-objects-immutable), which states "To avoid confusion and lots of false positives, don’t enforce this rule for function parameters."
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
`M9-3-3`: `MemberFunctionConstIfPossible.ql`:
2+
- Fix FP reported in 467. Excluding candidates in uninstantiated templates.

cpp/autosar/src/rules/A7-1-1/DeclarationUnmodifiedParamMissingConstSpecifier.ql

Lines changed: 0 additions & 42 deletions
This file was deleted.

cpp/autosar/src/rules/M9-3-3/MemberFunctionConstIfPossible.ql

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,10 @@ class ConstMemberFunctionCandidate extends NonConstMemberFunction {
5454
not this instanceof Destructor and
5555
not this instanceof Operator and
5656
//less interested in MemberFunctions with no definition
57-
this.hasDefinition()
57+
this.hasDefinition() and
58+
// For uninstantiated templates we have only partial information that prevents us from determining
59+
// if the candidate calls non-const functions. Therefore we exclude these.
60+
not this.isFromUninstantiatedTemplate(_)
5861
}
5962

6063
/**

cpp/autosar/test/rules/A7-1-1/DeclarationUnmodifiedParamMissingConstSpecifier.expected

Lines changed: 0 additions & 1 deletion
This file was deleted.

cpp/autosar/test/rules/A7-1-1/DeclarationUnmodifiedParamMissingConstSpecifier.qlref

Lines changed: 0 additions & 1 deletion
This file was deleted.

cpp/autosar/test/rules/A7-1-1/test.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
void f1(int *p) { // COMPLIANT
55
*p += 2;
66
}
7-
void f2(int *p) { // NON_COMPLIANT
7+
void f2(int *p) { // COMPLIANT - we ignore parameters for this rule
88
int l4 = 1; // NON_COMPLIANT
99
int *p1 = p; // NON_COMPLIANT
1010
}

cpp/autosar/test/rules/M9-3-3/test.cpp

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,34 @@ class Z22 : Z1 {
162162
void f3() { this->a = 100; } // COMPLIANT
163163
};
164164

165+
template <class T> class Array {
166+
public:
167+
T &back();
168+
169+
private:
170+
T data[128];
171+
unsigned int size;
172+
};
173+
174+
template <class T, template <class...> class U> class Stack {
175+
public:
176+
T &Top() {
177+
return this->data.back();
178+
} // COMPLIANT[FALSE_NEGATIVE|TRUE_NEGATIVE] - exception not specified in the
179+
// standard, we opt to not raise an issue because the template can be both
180+
// compliant and non-compliant depending on instantiations.
181+
private:
182+
U<T> data;
183+
};
184+
185+
using IntVectorStack = Stack<int, Array>;
186+
187+
void test_template() {
188+
IntVectorStack s;
189+
190+
int i = s.Top();
191+
}
192+
165193
class Z3 {
166194
void f(int) = delete; // COMPLIANT
167-
};
195+
};

cpp/common/src/codingstandards/cpp/exclusions/cpp/Const.qll

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import codingstandards.cpp.exclusions.RuleMetadata
55

66
newtype ConstQuery =
77
TRemoveConstOrVolatileQualificationAutosarQuery() or
8-
TDeclarationUnmodifiedParamMissingConstSpecifierQuery() or
98
TDeclarationUnmodifiedObjectMissingConstSpecifierQuery() or
109
TVariableMissingConstexprQuery() or
1110
TFunctionMissingConstexprQuery() or
@@ -28,15 +27,6 @@ predicate isConstQueryMetadata(Query query, string queryId, string ruleId, strin
2827
ruleId = "A5-2-3" and
2928
category = "required"
3029
or
31-
query =
32-
// `Query` instance for the `declarationUnmodifiedParamMissingConstSpecifier` query
33-
ConstPackage::declarationUnmodifiedParamMissingConstSpecifierQuery() and
34-
queryId =
35-
// `@id` for the `declarationUnmodifiedParamMissingConstSpecifier` query
36-
"cpp/autosar/declaration-unmodified-param-missing-const-specifier" and
37-
ruleId = "A7-1-1" and
38-
category = "required"
39-
or
4030
query =
4131
// `Query` instance for the `declarationUnmodifiedObjectMissingConstSpecifier` query
4232
ConstPackage::declarationUnmodifiedObjectMissingConstSpecifierQuery() and
@@ -145,13 +135,6 @@ module ConstPackage {
145135
TQueryCPP(TConstPackageQuery(TRemoveConstOrVolatileQualificationAutosarQuery()))
146136
}
147137

148-
Query declarationUnmodifiedParamMissingConstSpecifierQuery() {
149-
//autogenerate `Query` type
150-
result =
151-
// `Query` type for `declarationUnmodifiedParamMissingConstSpecifier` query
152-
TQueryCPP(TConstPackageQuery(TDeclarationUnmodifiedParamMissingConstSpecifierQuery()))
153-
}
154-
155138
Query declarationUnmodifiedObjectMissingConstSpecifierQuery() {
156139
//autogenerate `Query` type
157140
result =

rule_packages/cpp/Const.json

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -33,19 +33,6 @@
3333
"obligation": "required"
3434
},
3535
"queries": [
36-
{
37-
"description": "`Constexpr`/`const` specifiers prevent unintentional data modification for parameters intended as immutable.",
38-
"kind": "problem",
39-
"name": "Constexpr or const specifiers shall be used for immutable parameter usage",
40-
"precision": "high",
41-
"severity": "warning",
42-
"short_name": "DeclarationUnmodifiedParamMissingConstSpecifier",
43-
"tags": [
44-
"correctness",
45-
"maintainability",
46-
"readability"
47-
]
48-
},
4936
{
5037
"description": "`Constexpr`/`const` specifiers prevent unintentional data modification for data intended as immutable.",
5138
"kind": "problem",
@@ -57,7 +44,10 @@
5744
"correctness",
5845
"maintainability",
5946
"readability"
60-
]
47+
],
48+
"implementation_scope": {
49+
"description": "We exclude function parameters from this rule in line with the rule intention as described in the C++ Core Guidelines Con.1 which excludes function parameters."
50+
}
6151
}
6252
],
6353
"title": "Constexpr or const specifiers shall be used for immutable data declaration."

0 commit comments

Comments
 (0)