mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
Merge pull request #19024 from github/aibaars/mut-borrow
Rust: SSA: restrict mutablyBorrowed to variables with a 'mut' modifier
This commit is contained in:
@@ -212,7 +212,8 @@ predicate capturedCallWrite(Expr call, BasicBlock bb, int i, Variable v) {
|
||||
/** Holds if `v` may be mutably borrowed in `e`. */
|
||||
private predicate mutablyBorrows(Expr e, Variable v) {
|
||||
e = any(MethodCallExpr mc).getReceiver() and
|
||||
e.(VariableAccess).getVariable() = v
|
||||
e.(VariableAccess).getVariable() = v and
|
||||
v.isMutable()
|
||||
or
|
||||
exists(RefExpr re | re = e and re.isMut() and re.getExpr().(VariableAccess).getVariable() = v)
|
||||
}
|
||||
|
||||
@@ -161,7 +161,7 @@ module Impl {
|
||||
}
|
||||
|
||||
/** Hold is this variable is mutable. */
|
||||
predicate isMutable() { this.getPat().isMut() }
|
||||
predicate isMutable() { this.getPat().isMut() or this.getSelfParam().isMut() }
|
||||
|
||||
/** Hold is this variable is immutable. */
|
||||
predicate isImmutable() { not this.isMutable() }
|
||||
|
||||
@@ -316,7 +316,6 @@ localStep
|
||||
| main.rs:263:9:263:10 | i1 | main.rs:263:9:263:10 | i1 |
|
||||
| main.rs:263:14:263:16 | TryExpr | main.rs:263:9:263:10 | i1 |
|
||||
| main.rs:266:5:266:11 | Some(...) | main.rs:260:41:267:1 | { ... } |
|
||||
| main.rs:270:9:270:10 | [SSA] r1 | main.rs:271:29:271:30 | [SSA] r1 |
|
||||
| main.rs:270:9:270:10 | [SSA] r1 | main.rs:271:29:271:30 | r1 |
|
||||
| main.rs:270:9:270:10 | r1 | main.rs:270:9:270:10 | [SSA] r1 |
|
||||
| main.rs:270:9:270:10 | r1 | main.rs:270:9:270:10 | r1 |
|
||||
@@ -324,7 +323,6 @@ localStep
|
||||
| main.rs:271:9:271:11 | [SSA] o1a | main.rs:273:10:273:12 | o1a |
|
||||
| main.rs:271:9:271:11 | o1a | main.rs:271:9:271:11 | [SSA] o1a |
|
||||
| main.rs:271:9:271:11 | o1a | main.rs:271:9:271:11 | o1a |
|
||||
| main.rs:271:29:271:30 | [SSA] r1 | main.rs:272:29:272:30 | r1 |
|
||||
| main.rs:271:29:271:30 | [post] r1 | main.rs:272:29:272:30 | r1 |
|
||||
| main.rs:271:29:271:30 | [post] receiver for r1 | main.rs:271:29:271:30 | [post] r1 |
|
||||
| main.rs:271:29:271:30 | r1 | main.rs:271:29:271:30 | receiver for r1 |
|
||||
@@ -340,7 +338,6 @@ localStep
|
||||
| main.rs:273:10:273:12 | o1a | main.rs:273:10:273:12 | receiver for o1a |
|
||||
| main.rs:274:10:274:12 | [post] receiver for o1b | main.rs:274:10:274:12 | [post] o1b |
|
||||
| main.rs:274:10:274:12 | o1b | main.rs:274:10:274:12 | receiver for o1b |
|
||||
| main.rs:276:9:276:10 | [SSA] r2 | main.rs:277:29:277:30 | [SSA] r2 |
|
||||
| main.rs:276:9:276:10 | [SSA] r2 | main.rs:277:29:277:30 | r2 |
|
||||
| main.rs:276:9:276:10 | r2 | main.rs:276:9:276:10 | [SSA] r2 |
|
||||
| main.rs:276:9:276:10 | r2 | main.rs:276:9:276:10 | r2 |
|
||||
@@ -348,7 +345,6 @@ localStep
|
||||
| main.rs:277:9:277:11 | [SSA] o2a | main.rs:279:10:279:12 | o2a |
|
||||
| main.rs:277:9:277:11 | o2a | main.rs:277:9:277:11 | [SSA] o2a |
|
||||
| main.rs:277:9:277:11 | o2a | main.rs:277:9:277:11 | o2a |
|
||||
| main.rs:277:29:277:30 | [SSA] r2 | main.rs:278:29:278:30 | r2 |
|
||||
| main.rs:277:29:277:30 | [post] r2 | main.rs:278:29:278:30 | r2 |
|
||||
| main.rs:277:29:277:30 | [post] receiver for r2 | main.rs:277:29:277:30 | [post] r2 |
|
||||
| main.rs:277:29:277:30 | r2 | main.rs:277:29:277:30 | receiver for r2 |
|
||||
@@ -389,24 +385,20 @@ localStep
|
||||
| main.rs:291:9:291:10 | i3 | main.rs:291:9:291:10 | i3 |
|
||||
| main.rs:291:14:291:16 | TryExpr | main.rs:291:9:291:10 | i3 |
|
||||
| main.rs:293:5:293:9 | Ok(...) | main.rs:283:46:294:1 | { ... } |
|
||||
| main.rs:297:9:297:10 | [SSA] s1 | main.rs:298:10:298:11 | [SSA] s1 |
|
||||
| main.rs:297:9:297:10 | [SSA] s1 | main.rs:298:10:298:11 | s1 |
|
||||
| main.rs:297:9:297:10 | s1 | main.rs:297:9:297:10 | [SSA] s1 |
|
||||
| main.rs:297:9:297:10 | s1 | main.rs:297:9:297:10 | s1 |
|
||||
| main.rs:297:32:297:45 | Ok(...) | main.rs:297:9:297:10 | s1 |
|
||||
| main.rs:298:10:298:11 | [SSA] s1 | main.rs:299:10:299:11 | s1 |
|
||||
| main.rs:298:10:298:11 | [post] receiver for s1 | main.rs:298:10:298:11 | [post] s1 |
|
||||
| main.rs:298:10:298:11 | [post] s1 | main.rs:299:10:299:11 | s1 |
|
||||
| main.rs:298:10:298:11 | s1 | main.rs:298:10:298:11 | receiver for s1 |
|
||||
| main.rs:298:10:298:11 | s1 | main.rs:299:10:299:11 | s1 |
|
||||
| main.rs:299:10:299:11 | [post] receiver for s1 | main.rs:299:10:299:11 | [post] s1 |
|
||||
| main.rs:299:10:299:11 | s1 | main.rs:299:10:299:11 | receiver for s1 |
|
||||
| main.rs:301:9:301:10 | [SSA] s2 | main.rs:302:10:302:11 | [SSA] s2 |
|
||||
| main.rs:301:9:301:10 | [SSA] s2 | main.rs:302:10:302:11 | s2 |
|
||||
| main.rs:301:9:301:10 | s2 | main.rs:301:9:301:10 | [SSA] s2 |
|
||||
| main.rs:301:9:301:10 | s2 | main.rs:301:9:301:10 | s2 |
|
||||
| main.rs:301:32:301:46 | Err(...) | main.rs:301:9:301:10 | s2 |
|
||||
| main.rs:302:10:302:11 | [SSA] s2 | main.rs:303:10:303:11 | s2 |
|
||||
| main.rs:302:10:302:11 | [post] receiver for s2 | main.rs:302:10:302:11 | [post] s2 |
|
||||
| main.rs:302:10:302:11 | [post] s2 | main.rs:303:10:303:11 | s2 |
|
||||
| main.rs:302:10:302:11 | s2 | main.rs:302:10:302:11 | receiver for s2 |
|
||||
@@ -698,16 +690,13 @@ localStep
|
||||
| main.rs:462:16:462:16 | s | main.rs:462:16:462:16 | s |
|
||||
| main.rs:462:16:462:24 | ...: String | main.rs:462:16:462:16 | s |
|
||||
| main.rs:463:14:463:20 | FormatArgsExpr | main.rs:463:14:463:20 | MacroExpr |
|
||||
| main.rs:467:9:467:9 | [SSA] a | main.rs:468:13:468:13 | [SSA] a |
|
||||
| main.rs:467:9:467:9 | [SSA] a | main.rs:468:13:468:13 | a |
|
||||
| main.rs:467:9:467:9 | a | main.rs:467:9:467:9 | [SSA] a |
|
||||
| main.rs:467:9:467:9 | a | main.rs:467:9:467:9 | a |
|
||||
| main.rs:467:13:467:22 | source(...) | main.rs:467:9:467:9 | a |
|
||||
| main.rs:468:9:468:9 | [SSA] b | main.rs:469:13:469:13 | [SSA] b |
|
||||
| main.rs:468:9:468:9 | [SSA] b | main.rs:469:13:469:13 | b |
|
||||
| main.rs:468:9:468:9 | b | main.rs:468:9:468:9 | [SSA] b |
|
||||
| main.rs:468:9:468:9 | b | main.rs:468:9:468:9 | b |
|
||||
| main.rs:468:13:468:13 | [SSA] a | main.rs:472:10:472:10 | a |
|
||||
| main.rs:468:13:468:13 | [post] a | main.rs:472:10:472:10 | a |
|
||||
| main.rs:468:13:468:13 | [post] receiver for a | main.rs:468:13:468:13 | [post] a |
|
||||
| main.rs:468:13:468:13 | a | main.rs:468:13:468:13 | receiver for a |
|
||||
@@ -716,13 +705,9 @@ localStep
|
||||
| main.rs:469:9:469:9 | [SSA] c | main.rs:474:10:474:10 | c |
|
||||
| main.rs:469:9:469:9 | c | main.rs:469:9:469:9 | [SSA] c |
|
||||
| main.rs:469:9:469:9 | c | main.rs:469:9:469:9 | c |
|
||||
| main.rs:469:13:469:13 | [SSA] b | main.rs:470:19:470:19 | [SSA] b |
|
||||
| main.rs:469:13:469:13 | [SSA] b | main.rs:470:19:470:19 | b |
|
||||
| main.rs:469:13:469:13 | [post] b | main.rs:470:19:470:19 | [SSA] b |
|
||||
| main.rs:469:13:469:13 | [post] b | main.rs:470:19:470:19 | b |
|
||||
| main.rs:469:13:469:13 | [post] receiver for b | main.rs:469:13:469:13 | [post] b |
|
||||
| main.rs:469:13:469:13 | b | main.rs:469:13:469:13 | receiver for b |
|
||||
| main.rs:469:13:469:13 | b | main.rs:470:19:470:19 | [SSA] b |
|
||||
| main.rs:469:13:469:13 | b | main.rs:470:19:470:19 | b |
|
||||
| main.rs:469:13:469:28 | [post] receiver for b.parse(...) | main.rs:469:13:469:28 | [post] b.parse(...) |
|
||||
| main.rs:469:13:469:28 | b.parse(...) | main.rs:469:13:469:28 | receiver for b.parse(...) |
|
||||
@@ -730,7 +715,6 @@ localStep
|
||||
| main.rs:470:9:470:9 | [SSA] d | main.rs:475:10:475:10 | d |
|
||||
| main.rs:470:9:470:9 | d | main.rs:470:9:470:9 | [SSA] d |
|
||||
| main.rs:470:9:470:9 | d | main.rs:470:9:470:9 | d |
|
||||
| main.rs:470:19:470:19 | [SSA] b | main.rs:473:17:473:17 | b |
|
||||
| main.rs:470:19:470:19 | [post] b | main.rs:473:17:473:17 | b |
|
||||
| main.rs:470:19:470:19 | [post] receiver for b | main.rs:470:19:470:19 | [post] b |
|
||||
| main.rs:470:19:470:19 | b | main.rs:470:19:470:19 | receiver for b |
|
||||
@@ -742,23 +726,16 @@ localStep
|
||||
| main.rs:479:9:479:10 | vs | main.rs:479:9:479:10 | [SSA] vs |
|
||||
| main.rs:479:9:479:10 | vs | main.rs:479:9:479:10 | vs |
|
||||
| main.rs:479:14:479:34 | [...] | main.rs:479:9:479:10 | vs |
|
||||
| main.rs:481:10:481:11 | [post] vs | main.rs:482:11:482:12 | [SSA] vs |
|
||||
| main.rs:481:10:481:11 | [post] vs | main.rs:482:11:482:12 | vs |
|
||||
| main.rs:481:10:481:11 | vs | main.rs:482:11:482:12 | [SSA] vs |
|
||||
| main.rs:481:10:481:11 | vs | main.rs:482:11:482:12 | vs |
|
||||
| main.rs:482:11:482:12 | [SSA] vs | main.rs:483:11:483:12 | [SSA] vs |
|
||||
| main.rs:482:11:482:12 | [SSA] vs | main.rs:483:11:483:12 | vs |
|
||||
| main.rs:482:11:482:12 | [post] receiver for vs | main.rs:482:11:482:12 | [post] vs |
|
||||
| main.rs:482:11:482:12 | [post] vs | main.rs:483:11:483:12 | [SSA] vs |
|
||||
| main.rs:482:11:482:12 | [post] vs | main.rs:483:11:483:12 | vs |
|
||||
| main.rs:482:11:482:12 | vs | main.rs:482:11:482:12 | receiver for vs |
|
||||
| main.rs:482:11:482:12 | vs | main.rs:483:11:483:12 | [SSA] vs |
|
||||
| main.rs:482:11:482:12 | vs | main.rs:483:11:483:12 | vs |
|
||||
| main.rs:482:11:482:19 | [post] receiver for vs.iter(...) | main.rs:482:11:482:19 | [post] vs.iter(...) |
|
||||
| main.rs:482:11:482:19 | vs.iter(...) | main.rs:482:11:482:19 | receiver for vs.iter(...) |
|
||||
| main.rs:482:11:482:26 | ... .next(...) | main.rs:482:11:482:26 | receiver for ... .next(...) |
|
||||
| main.rs:482:11:482:26 | [post] receiver for ... .next(...) | main.rs:482:11:482:26 | [post] ... .next(...) |
|
||||
| main.rs:483:11:483:12 | [SSA] vs | main.rs:485:14:485:15 | vs |
|
||||
| main.rs:483:11:483:12 | [post] receiver for vs | main.rs:483:11:483:12 | [post] vs |
|
||||
| main.rs:483:11:483:12 | [post] vs | main.rs:485:14:485:15 | vs |
|
||||
| main.rs:483:11:483:12 | vs | main.rs:483:11:483:12 | receiver for vs |
|
||||
@@ -770,29 +747,20 @@ localStep
|
||||
| main.rs:485:9:485:9 | [SSA] v | main.rs:486:14:486:14 | v |
|
||||
| main.rs:485:9:485:9 | v | main.rs:485:9:485:9 | [SSA] v |
|
||||
| main.rs:485:9:485:9 | v | main.rs:485:9:485:9 | v |
|
||||
| main.rs:485:14:485:15 | vs | main.rs:488:15:488:16 | [SSA] vs |
|
||||
| main.rs:485:14:485:15 | vs | main.rs:488:15:488:16 | vs |
|
||||
| main.rs:488:10:488:10 | [SSA] v | main.rs:489:14:489:14 | v |
|
||||
| main.rs:488:10:488:10 | v | main.rs:488:10:488:10 | [SSA] v |
|
||||
| main.rs:488:10:488:10 | v | main.rs:488:10:488:10 | v |
|
||||
| main.rs:488:15:488:16 | [SSA] vs | main.rs:492:27:492:28 | [SSA] vs |
|
||||
| main.rs:488:15:488:16 | [SSA] vs | main.rs:492:27:492:28 | vs |
|
||||
| main.rs:488:15:488:16 | [post] receiver for vs | main.rs:488:15:488:16 | [post] vs |
|
||||
| main.rs:488:15:488:16 | [post] vs | main.rs:492:27:492:28 | [SSA] vs |
|
||||
| main.rs:488:15:488:16 | [post] vs | main.rs:492:27:492:28 | vs |
|
||||
| main.rs:488:15:488:16 | vs | main.rs:488:15:488:16 | receiver for vs |
|
||||
| main.rs:488:15:488:16 | vs | main.rs:492:27:492:28 | [SSA] vs |
|
||||
| main.rs:488:15:488:16 | vs | main.rs:492:27:492:28 | vs |
|
||||
| main.rs:492:9:492:11 | [SSA] vs2 | main.rs:493:15:493:17 | vs2 |
|
||||
| main.rs:492:9:492:11 | vs2 | main.rs:492:9:492:11 | [SSA] vs2 |
|
||||
| main.rs:492:9:492:11 | vs2 | main.rs:492:9:492:11 | vs2 |
|
||||
| main.rs:492:27:492:28 | [SSA] vs | main.rs:497:5:497:6 | [SSA] vs |
|
||||
| main.rs:492:27:492:28 | [SSA] vs | main.rs:497:5:497:6 | vs |
|
||||
| main.rs:492:27:492:28 | [post] receiver for vs | main.rs:492:27:492:28 | [post] vs |
|
||||
| main.rs:492:27:492:28 | [post] vs | main.rs:497:5:497:6 | [SSA] vs |
|
||||
| main.rs:492:27:492:28 | [post] vs | main.rs:497:5:497:6 | vs |
|
||||
| main.rs:492:27:492:28 | vs | main.rs:492:27:492:28 | receiver for vs |
|
||||
| main.rs:492:27:492:28 | vs | main.rs:497:5:497:6 | [SSA] vs |
|
||||
| main.rs:492:27:492:28 | vs | main.rs:497:5:497:6 | vs |
|
||||
| main.rs:492:27:492:35 | [post] receiver for vs.iter(...) | main.rs:492:27:492:35 | [post] vs.iter(...) |
|
||||
| main.rs:492:27:492:35 | vs.iter(...) | main.rs:492:27:492:35 | receiver for vs.iter(...) |
|
||||
@@ -800,13 +768,9 @@ localStep
|
||||
| main.rs:493:10:493:10 | [SSA] v | main.rs:494:14:494:14 | v |
|
||||
| main.rs:493:10:493:10 | v | main.rs:493:10:493:10 | [SSA] v |
|
||||
| main.rs:493:10:493:10 | v | main.rs:493:10:493:10 | v |
|
||||
| main.rs:497:5:497:6 | [SSA] vs | main.rs:498:5:498:6 | [SSA] vs |
|
||||
| main.rs:497:5:497:6 | [SSA] vs | main.rs:498:5:498:6 | vs |
|
||||
| main.rs:497:5:497:6 | [post] receiver for vs | main.rs:497:5:497:6 | [post] vs |
|
||||
| main.rs:497:5:497:6 | [post] vs | main.rs:498:5:498:6 | [SSA] vs |
|
||||
| main.rs:497:5:497:6 | [post] vs | main.rs:498:5:498:6 | vs |
|
||||
| main.rs:497:5:497:6 | vs | main.rs:497:5:497:6 | receiver for vs |
|
||||
| main.rs:497:5:497:6 | vs | main.rs:498:5:498:6 | [SSA] vs |
|
||||
| main.rs:497:5:497:6 | vs | main.rs:498:5:498:6 | vs |
|
||||
| main.rs:497:5:497:13 | [post] receiver for vs.iter(...) | main.rs:497:5:497:13 | [post] vs.iter(...) |
|
||||
| main.rs:497:5:497:13 | vs.iter(...) | main.rs:497:5:497:13 | receiver for vs.iter(...) |
|
||||
@@ -814,7 +778,6 @@ localStep
|
||||
| main.rs:497:20:497:20 | [SSA] x | main.rs:497:29:497:29 | x |
|
||||
| main.rs:497:20:497:20 | x | main.rs:497:20:497:20 | [SSA] x |
|
||||
| main.rs:497:20:497:20 | x | main.rs:497:20:497:20 | x |
|
||||
| main.rs:498:5:498:6 | [SSA] vs | main.rs:500:14:500:15 | vs |
|
||||
| main.rs:498:5:498:6 | [post] receiver for vs | main.rs:498:5:498:6 | [post] vs |
|
||||
| main.rs:498:5:498:6 | [post] vs | main.rs:500:14:500:15 | vs |
|
||||
| main.rs:498:5:498:6 | vs | main.rs:498:5:498:6 | receiver for vs |
|
||||
|
||||
Reference in New Issue
Block a user