Commit b6fd3cf
committed
Thread Safety Analysis: Very basic capability alias-analysis
Add a simple form of alias analysis for capabilities by substituting
local pointer variables with their initializers if they are `const` or
never reassigned.
For example, the analysis will no longer generate false positives for
cases such as:
void testNestedAccess(Container *c) {
Foo *ptr = &c->foo;
ptr->mu.Lock();
c->foo.data = 42; // OK - no false positive
ptr->mu.Unlock();
}
void testNestedAcquire(Container *c) EXCLUSIVE_LOCK_FUNCTION(&c->foo.mu) {
Foo *buf = &c->foo;
buf->mu.Lock(); // OK - no false positive warning
}
This implementation would satisfy the basic needs of addressing the
concerns for Linux kernel application [1].
Current limitations:
* The analysis does not handle pointers that are reassigned; it
conservatively assumes they could point to anything after the
reassignment.
* Aliases created through complex control flow are not tracked.
Link: https://lore.kernel.org/all/CANpmjNPquO=W1JAh1FNQb8pMQjgeZAKCPQUAd7qUg=5pjJ6x=Q@mail.gmail.com/ [1]1 parent 497d177 commit b6fd3cf
File tree
5 files changed
+310
-22
lines changed- clang
- include/clang/Analysis/Analyses
- lib/Analysis
- test
- SemaCXX
- Sema
5 files changed
+310
-22
lines changedLines changed: 16 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
31 | 31 | | |
32 | 32 | | |
33 | 33 | | |
| 34 | + | |
34 | 35 | | |
35 | 36 | | |
36 | 37 | | |
37 | 38 | | |
| 39 | + | |
38 | 40 | | |
39 | 41 | | |
40 | 42 | | |
| |||
386 | 388 | | |
387 | 389 | | |
388 | 390 | | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
| 394 | + | |
| 395 | + | |
389 | 396 | | |
390 | 397 | | |
391 | 398 | | |
| |||
394 | 401 | | |
395 | 402 | | |
396 | 403 | | |
397 | | - | |
398 | | - | |
| 404 | + | |
| 405 | + | |
399 | 406 | | |
400 | 407 | | |
401 | 408 | | |
| |||
445 | 452 | | |
446 | 453 | | |
447 | 454 | | |
| 455 | + | |
448 | 456 | | |
449 | 457 | | |
450 | 458 | | |
| |||
501 | 509 | | |
502 | 510 | | |
503 | 511 | | |
| 512 | + | |
| 513 | + | |
| 514 | + | |
504 | 515 | | |
505 | 516 | | |
506 | 517 | | |
| |||
531 | 542 | | |
532 | 543 | | |
533 | 544 | | |
| 545 | + | |
| 546 | + | |
| 547 | + | |
534 | 548 | | |
535 | 549 | | |
536 | 550 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1141 | 1141 | | |
1142 | 1142 | | |
1143 | 1143 | | |
1144 | | - | |
| 1144 | + | |
1145 | 1145 | | |
1146 | 1146 | | |
1147 | | - | |
1148 | | - | |
| 1147 | + | |
1149 | 1148 | | |
1150 | 1149 | | |
1151 | 1150 | | |
| |||
1599 | 1598 | | |
1600 | 1599 | | |
1601 | 1600 | | |
1602 | | - | |
| 1601 | + | |
1603 | 1602 | | |
1604 | 1603 | | |
1605 | 1604 | | |
| |||
1629 | 1628 | | |
1630 | 1629 | | |
1631 | 1630 | | |
1632 | | - | |
| 1631 | + | |
1633 | 1632 | | |
1634 | 1633 | | |
1635 | 1634 | | |
| |||
1688 | 1687 | | |
1689 | 1688 | | |
1690 | 1689 | | |
1691 | | - | |
1692 | | - | |
| 1690 | + | |
1693 | 1691 | | |
1694 | 1692 | | |
1695 | 1693 | | |
| |||
1857 | 1855 | | |
1858 | 1856 | | |
1859 | 1857 | | |
1860 | | - | |
| 1858 | + | |
1861 | 1859 | | |
1862 | 1860 | | |
1863 | 1861 | | |
| |||
1869 | 1867 | | |
1870 | 1868 | | |
1871 | 1869 | | |
1872 | | - | |
| 1870 | + | |
1873 | 1871 | | |
1874 | 1872 | | |
1875 | 1873 | | |
| |||
2545 | 2543 | | |
2546 | 2544 | | |
2547 | 2545 | | |
2548 | | - | |
| 2546 | + | |
| 2547 | + | |
2549 | 2548 | | |
2550 | 2549 | | |
2551 | 2550 | | |
| |||
2662 | 2661 | | |
2663 | 2662 | | |
2664 | 2663 | | |
2665 | | - | |
2666 | | - | |
2667 | | - | |
| 2664 | + | |
| 2665 | + | |
| 2666 | + | |
| 2667 | + | |
2668 | 2668 | | |
2669 | 2669 | | |
2670 | 2670 | | |
2671 | 2671 | | |
2672 | 2672 | | |
2673 | | - | |
2674 | | - | |
2675 | | - | |
| 2673 | + | |
| 2674 | + | |
| 2675 | + | |
| 2676 | + | |
2676 | 2677 | | |
2677 | 2678 | | |
2678 | 2679 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
19 | 19 | | |
20 | 20 | | |
21 | 21 | | |
| 22 | + | |
22 | 23 | | |
23 | 24 | | |
24 | 25 | | |
| |||
241 | 242 | | |
242 | 243 | | |
243 | 244 | | |
244 | | - | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
245 | 256 | | |
246 | 257 | | |
247 | 258 | | |
| |||
313 | 324 | | |
314 | 325 | | |
315 | 326 | | |
| 327 | + | |
| 328 | + | |
316 | 329 | | |
317 | 330 | | |
318 | 331 | | |
| |||
353 | 366 | | |
354 | 367 | | |
355 | 368 | | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
356 | 372 | | |
357 | 373 | | |
358 | 374 | | |
| |||
691 | 707 | | |
692 | 708 | | |
693 | 709 | | |
| 710 | + | |
| 711 | + | |
| 712 | + | |
| 713 | + | |
| 714 | + | |
| 715 | + | |
| 716 | + | |
| 717 | + | |
| 718 | + | |
694 | 719 | | |
695 | 720 | | |
696 | 721 | | |
| |||
1012 | 1037 | | |
1013 | 1038 | | |
1014 | 1039 | | |
| 1040 | + | |
| 1041 | + | |
| 1042 | + | |
| 1043 | + | |
| 1044 | + | |
| 1045 | + | |
| 1046 | + | |
| 1047 | + | |
| 1048 | + | |
| 1049 | + | |
| 1050 | + | |
| 1051 | + | |
| 1052 | + | |
| 1053 | + | |
| 1054 | + | |
| 1055 | + | |
| 1056 | + | |
| 1057 | + | |
| 1058 | + | |
| 1059 | + | |
| 1060 | + | |
| 1061 | + | |
| 1062 | + | |
| 1063 | + | |
| 1064 | + | |
| 1065 | + | |
| 1066 | + | |
| 1067 | + | |
| 1068 | + | |
| 1069 | + | |
| 1070 | + | |
| 1071 | + | |
| 1072 | + | |
| 1073 | + | |
| 1074 | + | |
| 1075 | + | |
| 1076 | + | |
| 1077 | + | |
| 1078 | + | |
| 1079 | + | |
| 1080 | + | |
| 1081 | + | |
| 1082 | + | |
| 1083 | + | |
| 1084 | + | |
| 1085 | + | |
| 1086 | + | |
| 1087 | + | |
| 1088 | + | |
| 1089 | + | |
| 1090 | + | |
| 1091 | + | |
| 1092 | + | |
| 1093 | + | |
| 1094 | + | |
| 1095 | + | |
| 1096 | + | |
| 1097 | + | |
| 1098 | + | |
| 1099 | + | |
| 1100 | + | |
| 1101 | + | |
| 1102 | + | |
| 1103 | + | |
| 1104 | + | |
| 1105 | + | |
| 1106 | + | |
| 1107 | + | |
| 1108 | + | |
| 1109 | + | |
| 1110 | + | |
| 1111 | + | |
| 1112 | + | |
| 1113 | + | |
| 1114 | + | |
| 1115 | + | |
| 1116 | + | |
| 1117 | + | |
| 1118 | + | |
| 1119 | + | |
| 1120 | + | |
| 1121 | + | |
| 1122 | + | |
| 1123 | + | |
| 1124 | + | |
| 1125 | + | |
| 1126 | + | |
| 1127 | + | |
| 1128 | + | |
| 1129 | + | |
| 1130 | + | |
| 1131 | + | |
| 1132 | + | |
| 1133 | + | |
1015 | 1134 | | |
1016 | 1135 | | |
1017 | 1136 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
184 | 184 | | |
185 | 185 | | |
186 | 186 | | |
187 | | - | |
| 187 | + | |
188 | 188 | | |
189 | 189 | | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
190 | 194 | | |
191 | 195 | | |
192 | 196 | | |
| |||
0 commit comments