Skip to content

Commit 3eecfa0

Browse files
Update StdFunctionOrMacro with feedback
1 parent 1b2199f commit 3eecfa0

File tree

2 files changed

+15
-22
lines changed

2 files changed

+15
-22
lines changed

c/misra/src/rules/RULE-9-7/UninitializedAtomicObject.ql

+1-7
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,8 @@ class ThreadSpawningFunction extends Function {
3030
}
3131
}
3232

33-
private string atomicInit() { result = "atomic_init" }
34-
3533
class AtomicInitAddressOfExpr extends AddressOfExpr {
36-
AtomicInitAddressOfExpr() {
37-
exists(StdFunctionOrMacro<C11FunctionWrapperMacro, atomicInit/0>::Call c |
38-
this = c.getArgument(0)
39-
)
40-
}
34+
AtomicInitAddressOfExpr() { exists(AtomicInitCall c | this = c.getArgument(0)) }
4135
}
4236

4337
ControlFlowNode getARequiredInitializationPoint(LocalScopeVariable v) {

cpp/common/src/codingstandards/cpp/StdFunctionOrMacro.qll

+14-15
Original file line numberDiff line numberDiff line change
@@ -31,30 +31,28 @@
3131

3232
import cpp as cpp
3333

34+
private string atomicInit() { result = "atomic_init" }
35+
36+
class AtomicInitCall = StdFunctionOrMacro<C11FunctionWrapperMacro, atomicInit/0>::Call;
37+
3438
/** Specify the name of your function as a predicate */
35-
signature string getName();
39+
private signature string getName();
3640

3741
/** Signature module to implement custom argument resolution behavior in expanded macros */
38-
signature module InferMacroExpansionArguments {
42+
private signature module InferMacroExpansionArguments {
3943
bindingset[mi, argumentIdx]
4044
cpp::Expr inferArgument(cpp::MacroInvocation mi, int argumentIdx);
4145
}
4246

43-
/** Assume all subexpressions of an expanded macro may be the result of any ith argument */
44-
module NoMacroExpansionInference implements InferMacroExpansionArguments {
45-
bindingset[mi, argumentIdx]
46-
cpp::Expr inferArgument(cpp::MacroInvocation mi, int argumentIdx) {
47-
result.getParent*() = mi.getExpr()
48-
}
49-
}
50-
5147
/** Assume macro `f(x, y, ...)` expands to `__c11_f(x, y, ...)`. */
52-
module C11FunctionWrapperMacro implements InferMacroExpansionArguments {
48+
private module C11FunctionWrapperMacro implements InferMacroExpansionArguments {
5349
bindingset[mi, argumentIdx]
5450
cpp::Expr inferArgument(cpp::MacroInvocation mi, int argumentIdx) {
55-
if mi.getExpr().(cpp::FunctionCall).getTarget().hasName("__c11_" + mi.getMacroName())
56-
then result = mi.getExpr().(cpp::FunctionCall).getArgument(argumentIdx)
57-
else result = NoMacroExpansionInference::inferArgument(mi, argumentIdx)
51+
exists(cpp::FunctionCall fc |
52+
fc = mi.getExpr() and
53+
fc.getTarget().hasName("__c11_" + mi.getMacroName()) and
54+
result = mi.getExpr().(cpp::FunctionCall).getArgument(argumentIdx)
55+
)
5856
}
5957
}
6058

@@ -72,7 +70,8 @@ module C11FunctionWrapperMacro implements InferMacroExpansionArguments {
7270
* select c.getArgument(0)
7371
* ```
7472
*/
75-
module StdFunctionOrMacro<InferMacroExpansionArguments InferExpansion, getName/0 getStdName> {
73+
private module StdFunctionOrMacro<InferMacroExpansionArguments InferExpansion, getName/0 getStdName>
74+
{
7675
final private class Expr = cpp::Expr;
7776

7877
final private class FunctionCall = cpp::FunctionCall;

0 commit comments

Comments
 (0)