From 6fd7c375ec8741474b625954c4288990da9c0d67 Mon Sep 17 00:00:00 2001 From: Kristen Newbury Date: Wed, 1 Apr 2026 15:59:41 -0400 Subject: [PATCH 1/2] Add RULE-10-1-2 --- .../cpp/exclusions/cpp/Declarations4.qll | 26 ++++++++++++++++ .../cpp/exclusions/cpp/RuleMetadata.qll | 7 +++++ .../VolatileQualifierNotUsedAppropriately.ql | 31 +++++++++++++++++++ ...tileQualifierNotUsedAppropriately.expected | 7 +++++ ...olatileQualifierNotUsedAppropriately.qlref | 1 + cpp/misra/test/rules/RULE-10-1-2/test.cpp | 26 ++++++++++++++++ rule_packages/cpp/Declarations4.json | 27 ++++++++++++++++ rules.csv | 2 +- 8 files changed, 126 insertions(+), 1 deletion(-) create mode 100644 cpp/common/src/codingstandards/cpp/exclusions/cpp/Declarations4.qll create mode 100644 cpp/misra/src/rules/RULE-10-1-2/VolatileQualifierNotUsedAppropriately.ql create mode 100644 cpp/misra/test/rules/RULE-10-1-2/VolatileQualifierNotUsedAppropriately.expected create mode 100644 cpp/misra/test/rules/RULE-10-1-2/VolatileQualifierNotUsedAppropriately.qlref create mode 100644 cpp/misra/test/rules/RULE-10-1-2/test.cpp create mode 100644 rule_packages/cpp/Declarations4.json diff --git a/cpp/common/src/codingstandards/cpp/exclusions/cpp/Declarations4.qll b/cpp/common/src/codingstandards/cpp/exclusions/cpp/Declarations4.qll new file mode 100644 index 000000000..eefef3ada --- /dev/null +++ b/cpp/common/src/codingstandards/cpp/exclusions/cpp/Declarations4.qll @@ -0,0 +1,26 @@ +//** THIS FILE IS AUTOGENERATED, DO NOT MODIFY DIRECTLY. **/ +import cpp +import RuleMetadata +import codingstandards.cpp.exclusions.RuleMetadata + +newtype Declarations4Query = TVolatileQualifierNotUsedAppropriatelyQuery() + +predicate isDeclarations4QueryMetadata(Query query, string queryId, string ruleId, string category) { + query = + // `Query` instance for the `volatileQualifierNotUsedAppropriately` query + Declarations4Package::volatileQualifierNotUsedAppropriatelyQuery() and + queryId = + // `@id` for the `volatileQualifierNotUsedAppropriately` query + "cpp/misra/volatile-qualifier-not-used-appropriately" and + ruleId = "RULE-10-1-2" and + category = "required" +} + +module Declarations4Package { + Query volatileQualifierNotUsedAppropriatelyQuery() { + //autogenerate `Query` type + result = + // `Query` type for `volatileQualifierNotUsedAppropriately` query + TQueryCPP(TDeclarations4PackageQuery(TVolatileQualifierNotUsedAppropriatelyQuery())) + } +} diff --git a/cpp/common/src/codingstandards/cpp/exclusions/cpp/RuleMetadata.qll b/cpp/common/src/codingstandards/cpp/exclusions/cpp/RuleMetadata.qll index 652d12307..bf93da4b1 100644 --- a/cpp/common/src/codingstandards/cpp/exclusions/cpp/RuleMetadata.qll +++ b/cpp/common/src/codingstandards/cpp/exclusions/cpp/RuleMetadata.qll @@ -33,6 +33,11 @@ import DeadCode8 import DeadCode9 import Declarations import Declarations1 +<<<<<<< HEAD +======= +import Declarations3 +import Declarations4 +>>>>>>> bc0278c3c (Add RULE-10-1-2) import ExceptionSafety import Exceptions1 import Exceptions2 @@ -129,6 +134,7 @@ newtype TCPPQuery = TDeadCode9PackageQuery(DeadCode9Query q) or TDeclarationsPackageQuery(DeclarationsQuery q) or TDeclarations1PackageQuery(Declarations1Query q) or + TDeclarations4PackageQuery(Declarations4Query q) or TExceptionSafetyPackageQuery(ExceptionSafetyQuery q) or TExceptions1PackageQuery(Exceptions1Query q) or TExceptions2PackageQuery(Exceptions2Query q) or @@ -225,6 +231,7 @@ predicate isQueryMetadata(Query query, string queryId, string ruleId, string cat isDeadCode9QueryMetadata(query, queryId, ruleId, category) or isDeclarationsQueryMetadata(query, queryId, ruleId, category) or isDeclarations1QueryMetadata(query, queryId, ruleId, category) or + isDeclarations4QueryMetadata(query, queryId, ruleId, category) or isExceptionSafetyQueryMetadata(query, queryId, ruleId, category) or isExceptions1QueryMetadata(query, queryId, ruleId, category) or isExceptions2QueryMetadata(query, queryId, ruleId, category) or diff --git a/cpp/misra/src/rules/RULE-10-1-2/VolatileQualifierNotUsedAppropriately.ql b/cpp/misra/src/rules/RULE-10-1-2/VolatileQualifierNotUsedAppropriately.ql new file mode 100644 index 000000000..982fce383 --- /dev/null +++ b/cpp/misra/src/rules/RULE-10-1-2/VolatileQualifierNotUsedAppropriately.ql @@ -0,0 +1,31 @@ +/** + * @id cpp/misra/volatile-qualifier-not-used-appropriately + * @name RULE-10-1-2: The volatile qualifier shall be used appropriately + * @description Using the volatile qualifier on certain entities can lead to undefined behavior or + * code that is hard to understand. + * @kind problem + * @precision very-high + * @problem.severity error + * @tags external/misra/id/rule-10-1-2 + * correctness + * readability + * maintainability + * scope/single-translation-unit + * external/misra/enforcement/decidable + * external/misra/obligation/required + */ + +import cpp +import codingstandards.cpp.misra + +from Declaration d +where + not isExcluded(d, Declarations4Package::volatileQualifierNotUsedAppropriatelyQuery()) and + d.getADeclarationEntry().getType().isVolatile() and + ( + d instanceof LocalVariable or + exists(d.(Parameter).getFunction()) or + d instanceof Function or + d.(Variable).isStructuredBinding() + ) +select d, "Volatile entity declared." diff --git a/cpp/misra/test/rules/RULE-10-1-2/VolatileQualifierNotUsedAppropriately.expected b/cpp/misra/test/rules/RULE-10-1-2/VolatileQualifierNotUsedAppropriately.expected new file mode 100644 index 000000000..5c532a083 --- /dev/null +++ b/cpp/misra/test/rules/RULE-10-1-2/VolatileQualifierNotUsedAppropriately.expected @@ -0,0 +1,7 @@ +| test.cpp:2:16:2:16 | g1 | Volatile entity declared. | +| test.cpp:4:21:4:21 | p | Volatile entity declared. | +| test.cpp:5:16:5:16 | x | Volatile entity declared. | +| test.cpp:9:18:9:18 | a | Volatile entity declared. | +| test.cpp:12:14:12:15 | f1 | Volatile entity declared. | +| test.cpp:15:23:15:23 | p | Volatile entity declared. | +| test.cpp:19:16:19:16 | m | Volatile entity declared. | diff --git a/cpp/misra/test/rules/RULE-10-1-2/VolatileQualifierNotUsedAppropriately.qlref b/cpp/misra/test/rules/RULE-10-1-2/VolatileQualifierNotUsedAppropriately.qlref new file mode 100644 index 000000000..f34189a09 --- /dev/null +++ b/cpp/misra/test/rules/RULE-10-1-2/VolatileQualifierNotUsedAppropriately.qlref @@ -0,0 +1 @@ +rules/RULE-10-1-2/VolatileQualifierNotUsedAppropriately.ql \ No newline at end of file diff --git a/cpp/misra/test/rules/RULE-10-1-2/test.cpp b/cpp/misra/test/rules/RULE-10-1-2/test.cpp new file mode 100644 index 000000000..3545bd448 --- /dev/null +++ b/cpp/misra/test/rules/RULE-10-1-2/test.cpp @@ -0,0 +1,26 @@ +int g[1] = {1}; +auto volatile [g1] = g; // NON_COMPLIANT + +void f(volatile int p) { // NON_COMPLIANT + volatile int x = 1; // NON_COMPLIANT + int y = 2; // COMPLIANT + + int z[1] = {1}; + auto volatile [a] = z; // NON_COMPLIANT +} + +volatile int f1(); // NON_COMPLIANT + +void f2(volatile int *p); // COMPLIANT +void f3(int *volatile p); // NON_COMPLIANT + +class C { +public: + volatile int m(); // NON_COMPLIANT + int m1(); // COMPLIANT + volatile int m2; // COMPLIANT +}; + +struct S { + volatile int s; // COMPLIANT +}; \ No newline at end of file diff --git a/rule_packages/cpp/Declarations4.json b/rule_packages/cpp/Declarations4.json new file mode 100644 index 000000000..1eacd04e2 --- /dev/null +++ b/rule_packages/cpp/Declarations4.json @@ -0,0 +1,27 @@ +{ + "MISRA-C++-2023": { + "RULE-10-1-2": { + "properties": { + "enforcement": "decidable", + "obligation": "required" + }, + "queries": [ + { + "description": "Using the volatile qualifier on certain entities can lead to undefined behavior or code that is hard to understand.", + "kind": "problem", + "name": "The volatile qualifier shall be used appropriately", + "precision": "very-high", + "severity": "error", + "short_name": "VolatileQualifierNotUsedAppropriately", + "tags": [ + "correctness", + "readability", + "maintainability", + "scope/single-translation-unit" + ] + } + ], + "title": "The volatile qualifier shall be used appropriately" + } + } +} \ No newline at end of file diff --git a/rules.csv b/rules.csv index 008020f37..8394ca351 100644 --- a/rules.csv +++ b/rules.csv @@ -916,7 +916,7 @@ cpp,MISRA-C++-2023,RULE-9-6-4,Yes,Required,Undecidable,System,A function declare cpp,MISRA-C++-2023,RULE-9-6-5,Yes,Required,Decidable,Single Translation Unit,A function with non-void return type shall return a value on all paths,MSC52-CPP,ImportMisra23,Import, cpp,MISRA-C++-2023,RULE-10-0-1,Yes,Advisory,Decidable,Single Translation Unit,A declaration should not declare more than one variable or member variable,M8-0-1,ImportMisra23,Import, cpp,MISRA-C++-2023,RULE-10-1-1,Yes,Advisory,Decidable,Single Translation Unit,The target type of a pointer or lvalue reference parameter should be const-qualified appropriately,RULE-8-13,Declarations2,Hard, -cpp,MISRA-C++-2023,RULE-10-1-2,Yes,Required,Decidable,Single Translation Unit,The volatile qualifier shall be used appropriately,,Declarations2,Easy, +cpp,MISRA-C++-2023,RULE-10-1-2,Yes,Required,Decidable,Single Translation Unit,The volatile qualifier shall be used appropriately,A2-11-1,Declarations4,Easy, cpp,MISRA-C++-2023,RULE-10-2-1,Yes,Required,Decidable,Single Translation Unit,An enumeration shall be defined with an explicit underlying type,A7-2-2,ImportMisra23,Import, cpp,MISRA-C++-2023,RULE-10-2-2,Yes,Advisory,Decidable,Single Translation Unit,Unscoped enumerations should not be declared,A7-2-3,Banned2,Easy, cpp,MISRA-C++-2023,RULE-10-2-3,Yes,Required,Decidable,Single Translation Unit,The numeric value of an unscoped enumeration with no fixed underlying type shall not be used,A4-5-1,Banned3,Easy, From 578a35f7ea7b0de6902cabee23492e01f6ce38ec Mon Sep 17 00:00:00 2001 From: Kristen Newbury Date: Wed, 1 Apr 2026 16:20:21 -0400 Subject: [PATCH 2/2] Fix accidental inclusion of git merge syntax in ql file --- .../src/codingstandards/cpp/exclusions/cpp/RuleMetadata.qll | 4 ---- 1 file changed, 4 deletions(-) diff --git a/cpp/common/src/codingstandards/cpp/exclusions/cpp/RuleMetadata.qll b/cpp/common/src/codingstandards/cpp/exclusions/cpp/RuleMetadata.qll index bf93da4b1..3132da1e4 100644 --- a/cpp/common/src/codingstandards/cpp/exclusions/cpp/RuleMetadata.qll +++ b/cpp/common/src/codingstandards/cpp/exclusions/cpp/RuleMetadata.qll @@ -33,11 +33,7 @@ import DeadCode8 import DeadCode9 import Declarations import Declarations1 -<<<<<<< HEAD -======= -import Declarations3 import Declarations4 ->>>>>>> bc0278c3c (Add RULE-10-1-2) import ExceptionSafety import Exceptions1 import Exceptions2