Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitc42b4b6

Browse files
committed
Merge remote-tracking branch 'upstream/jsinglet/merge-queues' into jsinglet/merge-queues
2 parentscc44bd7 +bf4f151 commitc42b4b6

File tree

38 files changed

+536
-72
lines changed

38 files changed

+536
-72
lines changed

‎c/cert/src/rules/CON40-C/AtomicVariableTwiceInExpression.ql‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
import cpp
1616
import codingstandards.c.cert
17+
import codingstandards.cpp.Concurrency
1718

1819
fromMacroInvocationmi,Variablev,LocatablewhereFound
1920
where
@@ -22,13 +23,13 @@ where
2223
// There isn't a way to safely use this construct in a way that is also
2324
// possible the reliably detect so advise against using it.
2425
(
25-
mi.getMacroName()=["atomic_store","atomic_store_explicit"]
26+
miinstanceofAtomicStore
2627
or
2728
// This construct is generally safe, but must be used in a loop. To lower
2829
// the false positive rate we don't look at the conditions of the loop and
2930
// instead assume if it is found in a looping construct that it is likely
3031
// related to the safety property.
31-
mi.getMacroName()=["atomic_compare_exchange_weak","atomic_compare_exchange_weak_explicit"]and
32+
miinstanceofAtomicCompareExchangeand
3233
notexists(Loopl|mi.getAGeneratedElement().(Expr).getParent*()=l)
3334
)and
3435
whereFound=mi

‎c/cert/src/rules/CON41-C/WrapFunctionsThatCanFailSpuriouslyInLoop.ql‎

Lines changed: 14 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -12,28 +12,18 @@
1212
* external/cert/obligation/rule
1313
*/
1414

15-
import cpp
16-
import codingstandards.c.cert
15+
import cpp
16+
import codingstandards.c.cert
17+
import codingstandards.cpp.Concurrency
18+
1719

18-
/**
19-
* Models calls to routines in the `stdatomic` library. Note that these
20-
* are typically implemented as macros within Clang and GCC's standard
21-
* libraries.
22-
*/
23-
classSpuriouslyFailingFunctionCallTypeextendsMacroInvocation{
24-
SpuriouslyFailingFunctionCallType(){
25-
getMacroName()=["atomic_compare_exchange_weak","atomic_compare_exchange_weak_explicit"]
26-
}
27-
}
28-
29-
fromSpuriouslyFailingFunctionCallTypefc
30-
where
31-
notisExcluded(fc, Concurrency3Package::wrapFunctionsThatCanFailSpuriouslyInLoopQuery())and
32-
(
33-
exists(StmtParentsp|sp=fc.getStmt()andnotsp.(Stmt).getParentStmt*()instanceofLoop)
34-
or
35-
exists(StmtParentsp|
36-
sp=fc.getExpr()andnotsp.(Expr).getEnclosingStmt().getParentStmt*()instanceofLoop
37-
)
38-
)
39-
selectfc,"Function that can spuriously fail not wrapped in a loop."
20+
fromAtomicCompareExchangeace
21+
where
22+
notisExcluded(ace, Concurrency3Package::wrapFunctionsThatCanFailSpuriouslyInLoopQuery())and
23+
(
24+
forex(StmtParentsp|sp=ace.getStmt()|notsp.(Stmt).getParentStmt*()instanceofLoop)or
25+
forex(Expre|e=ace.getExpr()|note.getEnclosingStmt().getParentStmt*()
26+
instanceofLoop)
27+
)
28+
selectace,"Function that can spuriously fail not wrapped in a loop."
29+
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
| test.c:6:19:6:40 | ATOMIC_VAR_INIT(value) | Atomic variable possibly referred to twice in an $@. | test.c:32:3:32:10 | ... += ... | expression |
2-
| test.c:6:19:6:40 | ATOMIC_VAR_INIT(value) | Atomic variable possibly referred to twice in an $@. | test.c:33:3:33:13 | ... = ... | expression |
3-
| test.c:10:3:10:23 | atomic_store(a,b) | Atomic variable possibly referred to twice in an $@. | test.c:10:3:10:23 | atomic_store(a,b) | expression |
4-
| test.c:11:3:11:35 | atomic_store_explicit(a,b,c) | Atomic variable possibly referred to twice in an $@. | test.c:11:3:11:35 | atomic_store_explicit(a,b,c) | expression |
5-
| test.c:24:3:24:48 | atomic_compare_exchange_weak(a,b,c) | Atomic variable possibly referred to twice in an $@. | test.c:24:3:24:48 | atomic_compare_exchange_weak(a,b,c) | expression |
6-
| test.c:25:3:26:45 | atomic_compare_exchange_weak_explicit(a,b,c,d,e) | Atomic variable possibly referred to twice in an $@. | test.c:25:3:26:45 | atomic_compare_exchange_weak_explicit(a,b,c,d,e) | expression |
1+
| test.c:7:18:7:39 | ATOMIC_VAR_INIT(value) | Atomic variable possibly referred to twice in an $@. | test.c:33:3:33:10 | ... += ... | expression |
2+
| test.c:7:18:7:39 | ATOMIC_VAR_INIT(value) | Atomic variable possibly referred to twice in an $@. | test.c:34:3:34:13 | ... = ... | expression |
3+
| test.c:11:3:11:23 | atomic_store(a,b) | Atomic variable possibly referred to twice in an $@. | test.c:11:3:11:23 | atomic_store(a,b) | expression |
4+
| test.c:12:3:12:35 | atomic_store_explicit(a,b,c) | Atomic variable possibly referred to twice in an $@. | test.c:12:3:12:35 | atomic_store_explicit(a,b,c) | expression |
5+
| test.c:25:3:25:49 | atomic_compare_exchange_weak(a,b,c) | Atomic variable possibly referred to twice in an $@. | test.c:25:3:25:49 | atomic_compare_exchange_weak(a,b,c) | expression |
6+
| test.c:26:3:27:42 | atomic_compare_exchange_weak_explicit(a,b,c,d,e) | Atomic variable possibly referred to twice in an $@. | test.c:26:3:27:42 | atomic_compare_exchange_weak_explicit(a,b,c,d,e) | expression |
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
| test.c:7:18:7:39 | ATOMIC_VAR_INIT(value) | Atomic variable possibly referred to twice in an $@. | test.c:33:3:33:10 | ... += ... | expression |
2+
| test.c:7:18:7:39 | ATOMIC_VAR_INIT(value) | Atomic variable possibly referred to twice in an $@. | test.c:34:3:34:13 | ... = ... | expression |
3+
| test.c:11:3:11:23 | atomic_store(object,desired) | Atomic variable possibly referred to twice in an $@. | test.c:11:3:11:23 | atomic_store(object,desired) | expression |
4+
| test.c:12:3:12:23 | atomic_store_explicit | Atomic variable possibly referred to twice in an $@. | test.c:12:3:12:23 | atomic_store_explicit | expression |
5+
| test.c:25:3:25:49 | atomic_compare_exchange_weak(object,expected,desired) | Atomic variable possibly referred to twice in an $@. | test.c:25:3:25:49 | atomic_compare_exchange_weak(object,expected,desired) | expression |
6+
| test.c:26:3:26:39 | atomic_compare_exchange_weak_explicit | Atomic variable possibly referred to twice in an $@. | test.c:26:3:26:39 | atomic_compare_exchange_weak_explicit | expression |
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
| test.c:7:18:7:39 | ATOMIC_VAR_INIT(VALUE) | Atomic variable possibly referred to twice in an $@. | test.c:33:3:33:10 | ... += ... | expression |
2+
| test.c:7:18:7:39 | ATOMIC_VAR_INIT(VALUE) | Atomic variable possibly referred to twice in an $@. | test.c:34:3:34:13 | ... = ... | expression |
3+
| test.c:11:3:11:23 | atomic_store(PTR,VAL) | Atomic variable possibly referred to twice in an $@. | test.c:11:3:11:23 | atomic_store(PTR,VAL) | expression |
4+
| test.c:12:3:12:35 | atomic_store_explicit(PTR,VAL,MO) | Atomic variable possibly referred to twice in an $@. | test.c:12:3:12:35 | atomic_store_explicit(PTR,VAL,MO) | expression |
5+
| test.c:25:3:25:49 | atomic_compare_exchange_weak(PTR,VAL,DES) | Atomic variable possibly referred to twice in an $@. | test.c:25:3:25:49 | atomic_compare_exchange_weak(PTR,VAL,DES) | expression |
6+
| test.c:26:3:27:42 | atomic_compare_exchange_weak_explicit(PTR,VAL,DES,SUC,FAIL) | Atomic variable possibly referred to twice in an $@. | test.c:26:3:27:42 | atomic_compare_exchange_weak_explicit(PTR,VAL,DES,SUC,FAIL) | expression |

‎c/cert/test/rules/CON40-C/test.c‎

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
#include<stdatomic.h>
22
#include<stdbool.h>
33

4-
staticboolfl1=ATOMIC_VAR_INIT(false);
5-
staticboolfl2=ATOMIC_VAR_INIT(false);
6-
staticboolfl3=ATOMIC_VAR_INIT(false);
7-
staticboolfl4=ATOMIC_VAR_INIT(false);
4+
static _Atomicintfl1=ATOMIC_VAR_INIT(false);
5+
static _Atomicintfl2=ATOMIC_VAR_INIT(false);
6+
staticintfl2a=ATOMIC_VAR_INIT(false);
7+
staticintfl3=ATOMIC_VAR_INIT(false);
8+
staticintfl4=ATOMIC_VAR_INIT(false);
89

910
voidf1() {
1011
atomic_store(&fl1,0);// NON_COMPLIANT
@@ -13,17 +14,17 @@ void f1() {
1314

1415
voidf2() {
1516
do {
16-
}while (!atomic_compare_exchange_weak(&fl2,&fl2,&fl2));// COMPLIANT
17+
}while (!atomic_compare_exchange_weak(&fl2,&fl2a,fl2a));// COMPLIANT
1718

1819
do {
19-
}while (!atomic_compare_exchange_weak_explicit(&fl2,&fl2,&fl2,&fl2,
20-
&fl2));// COMPLIANT
20+
}while (!atomic_compare_exchange_weak_explicit(&fl2,&fl2a,fl2a,0,
21+
0));// COMPLIANT
2122
}
2223

2324
voidf3() {
24-
atomic_compare_exchange_weak(&fl2,&fl2,&fl2);// NON_COMPLIANT
25-
atomic_compare_exchange_weak_explicit(&fl2,&fl2,&fl2,&fl2,
26-
&fl2);// NON_COMPLIANT
25+
atomic_compare_exchange_weak(&fl2,&fl2a,fl2a);// NON_COMPLIANT
26+
atomic_compare_exchange_weak_explicit(&fl2,&fl2a,fl2a,0,
27+
0);// NON_COMPLIANT
2728
}
2829

2930
voidf4() {fl3 ^= true; }
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
| test.c:5:8:5:46 | atomic_compare_exchange_weak(a,b,c) | Function that can spuriously fail not wrapped in a loop. |
2-
| test.c:9:3:9:41 | atomic_compare_exchange_weak(a,b,c) | Function that can spuriously fail not wrapped in a loop. |
3-
| test.c:11:8:12:47 | atomic_compare_exchange_weak_explicit(a,b,c,d,e) | Function that can spuriously fail not wrapped in a loop. |
4-
| test.c:16:3:16:56 | atomic_compare_exchange_weak_explicit(a,b,c,d,e) | Function that can spuriously fail not wrapped in a loop. |
1+
| test.c:6:8:6:46 | atomic_compare_exchange_weak(a,b,c) | Function that can spuriously fail not wrapped in a loop. |
2+
| test.c:10:3:10:41 | atomic_compare_exchange_weak(a,b,c) | Function that can spuriously fail not wrapped in a loop. |
3+
| test.c:12:8:13:47 | atomic_compare_exchange_weak_explicit(a,b,c,d,e) | Function that can spuriously fail not wrapped in a loop. |
4+
| test.c:17:3:17:56 | atomic_compare_exchange_weak_explicit(a,b,c,d,e) | Function that can spuriously fail not wrapped in a loop. |
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
| test.c:6:8:6:46 | atomic_compare_exchange_weak(object,expected,desired) | Function that can spuriously fail not wrapped in a loop. |
2+
| test.c:10:3:10:41 | atomic_compare_exchange_weak(object,expected,desired) | Function that can spuriously fail not wrapped in a loop. |
3+
| test.c:12:8:12:44 | atomic_compare_exchange_weak_explicit | Function that can spuriously fail not wrapped in a loop. |
4+
| test.c:17:3:17:39 | atomic_compare_exchange_weak_explicit | Function that can spuriously fail not wrapped in a loop. |
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
| test.c:6:8:6:46 | atomic_compare_exchange_weak(PTR,VAL,DES) | Function that can spuriously fail not wrapped in a loop. |
2+
| test.c:10:3:10:41 | atomic_compare_exchange_weak(PTR,VAL,DES) | Function that can spuriously fail not wrapped in a loop. |
3+
| test.c:12:8:13:47 | atomic_compare_exchange_weak_explicit(PTR,VAL,DES,SUC,FAIL) | Function that can spuriously fail not wrapped in a loop. |
4+
| test.c:17:3:17:56 | atomic_compare_exchange_weak_explicit(PTR,VAL,DES,SUC,FAIL) | Function that can spuriously fail not wrapped in a loop. |

‎c/cert/test/rules/CON41-C/test.c‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
#include"stdatomic.h"
22

33
voidf1() {
4-
inta,b,c;
4+
_Atomicinta;
5+
intb,c;
56
if (!atomic_compare_exchange_weak(&a,&b,c)) {// NON_COMPLIANT
67
(void)0;/* no-op */
78
}
@@ -17,7 +18,8 @@ void f1() {
1718
}
1819

1920
voidf2() {
20-
inta,b,c;
21+
_Atomicinta;
22+
intb,c;
2123
while (1==1) {
2224
if (!atomic_compare_exchange_weak(&a,&b,c)) {// COMPLIANT
2325
(void)0;/* no-op */

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp