mirror of
https://github.com/github/codeql.git
synced 2026-04-25 08:45:14 +02:00
Rust: Add tests for std::Pin.
This commit is contained in:
@@ -55,6 +55,12 @@ edges
|
||||
| main.rs:84:29:84:29 | [post] y [&ref] | main.rs:85:33:85:33 | y [&ref] | provenance | |
|
||||
| main.rs:84:32:84:41 | source(...) | main.rs:84:29:84:29 | [post] y [&ref] | provenance | MaD:7 |
|
||||
| main.rs:85:33:85:33 | y [&ref] | main.rs:85:18:85:34 | ...::read(...) | provenance | MaD:6 |
|
||||
| main.rs:100:13:100:17 | mut i | main.rs:105:14:105:14 | i | provenance | |
|
||||
| main.rs:100:21:100:30 | source(...) | main.rs:100:13:100:17 | mut i | provenance | |
|
||||
| main.rs:114:13:114:18 | mut ms [MyStruct] | main.rs:119:14:119:15 | ms [MyStruct] | provenance | |
|
||||
| main.rs:114:22:114:49 | MyStruct {...} [MyStruct] | main.rs:114:13:114:18 | mut ms [MyStruct] | provenance | |
|
||||
| main.rs:114:38:114:47 | source(...) | main.rs:114:22:114:49 | MyStruct {...} [MyStruct] | provenance | |
|
||||
| main.rs:119:14:119:15 | ms [MyStruct] | main.rs:119:14:119:19 | ms.val | provenance | |
|
||||
nodes
|
||||
| main.rs:12:9:12:9 | a [Some] | semmle.label | a [Some] |
|
||||
| main.rs:12:13:12:28 | Some(...) [Some] | semmle.label | Some(...) [Some] |
|
||||
@@ -108,6 +114,14 @@ nodes
|
||||
| main.rs:84:32:84:41 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:85:18:85:34 | ...::read(...) | semmle.label | ...::read(...) |
|
||||
| main.rs:85:33:85:33 | y [&ref] | semmle.label | y [&ref] |
|
||||
| main.rs:100:13:100:17 | mut i | semmle.label | mut i |
|
||||
| main.rs:100:21:100:30 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:105:14:105:14 | i | semmle.label | i |
|
||||
| main.rs:114:13:114:18 | mut ms [MyStruct] | semmle.label | mut ms [MyStruct] |
|
||||
| main.rs:114:22:114:49 | MyStruct {...} [MyStruct] | semmle.label | MyStruct {...} [MyStruct] |
|
||||
| main.rs:114:38:114:47 | source(...) | semmle.label | source(...) |
|
||||
| main.rs:119:14:119:15 | ms [MyStruct] | semmle.label | ms [MyStruct] |
|
||||
| main.rs:119:14:119:19 | ms.val | semmle.label | ms.val |
|
||||
subpaths
|
||||
testFailures
|
||||
#select
|
||||
@@ -121,3 +135,5 @@ testFailures
|
||||
| main.rs:47:38:47:38 | n | main.rs:41:30:41:39 | source(...) | main.rs:47:38:47:38 | n | $@ | main.rs:41:30:41:39 | source(...) | source(...) |
|
||||
| main.rs:63:22:63:22 | m | main.rs:58:22:58:31 | source(...) | main.rs:63:22:63:22 | m | $@ | main.rs:58:22:58:31 | source(...) | source(...) |
|
||||
| main.rs:85:18:85:34 | ...::read(...) | main.rs:84:32:84:41 | source(...) | main.rs:85:18:85:34 | ...::read(...) | $@ | main.rs:84:32:84:41 | source(...) | source(...) |
|
||||
| main.rs:105:14:105:14 | i | main.rs:100:21:100:30 | source(...) | main.rs:105:14:105:14 | i | $@ | main.rs:100:21:100:30 | source(...) | source(...) |
|
||||
| main.rs:119:14:119:19 | ms.val | main.rs:114:38:114:47 | source(...) | main.rs:119:14:119:19 | ms.val | $@ | main.rs:114:38:114:47 | source(...) | source(...) |
|
||||
|
||||
@@ -87,9 +87,64 @@ mod ptr {
|
||||
}
|
||||
}
|
||||
|
||||
use std::pin::Pin;
|
||||
use std::pin::pin;
|
||||
|
||||
#[derive(Clone)]
|
||||
struct MyStruct {
|
||||
val: i64,
|
||||
}
|
||||
|
||||
fn test_pin() {
|
||||
{
|
||||
let mut i = source(40);
|
||||
let mut pin1 = Pin::new(&i);
|
||||
let mut pin2 = Box::pin(i);
|
||||
let mut pin3 = Box::into_pin(Box::new(i));
|
||||
let mut pin4 = pin!(i);
|
||||
sink(i); // $ hasValueFlow=40
|
||||
sink(*pin1); // $ MISSING: hasValueFlow=40
|
||||
sink(*Pin::into_inner(pin1)); // $ MISSING: hasValueFlow=40
|
||||
sink(*pin2); // $ MISSING: hasValueFlow=40
|
||||
sink(*pin3); // $ MISSING: hasValueFlow=40
|
||||
sink(*pin4); // $ MISSING: hasValueFlow=40
|
||||
}
|
||||
|
||||
{
|
||||
let mut ms = MyStruct { val: source(41) };
|
||||
let mut pin1 = Pin::new(&ms);
|
||||
let mut pin2 = Box::pin(ms.clone());
|
||||
let mut pin3 = Box::into_pin(Box::new(ms.clone()));
|
||||
let mut pin4 = pin!(&ms);
|
||||
sink(ms.val); // $ hasValueFlow=41
|
||||
sink(pin1.val); // $ MISSING: hasValueFlow=41
|
||||
sink(Pin::into_inner(pin1).val); // $ MISSING: hasValueFlow=41
|
||||
sink(pin2.val); // $ MISSING: hasValueFlow=41
|
||||
sink(pin3.val); // $ MISSING: hasValueFlow=41
|
||||
sink(pin4.val); // $ MISSING: hasValueFlow=41
|
||||
}
|
||||
|
||||
unsafe {
|
||||
let mut ms = MyStruct { val: source(42) };
|
||||
let mut pin5 = Pin::new_unchecked(&ms);
|
||||
sink(pin5.val); // $ MISSING: hasValueFlow=42
|
||||
sink(Pin::into_inner_unchecked(pin5).val); // $ MISSING: hasValueFlow=40
|
||||
}
|
||||
|
||||
{
|
||||
let mut ms = MyStruct { val: source(43) };
|
||||
let mut ms2 = MyStruct { val: source(44) };
|
||||
let mut pin = Pin::new(&mut ms);
|
||||
sink(pin.val); // $ MISSING: hasValueFlow=43
|
||||
pin.set(ms2);
|
||||
sink(pin.val); // $ MISSING: hasValueFlow=44
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
option_clone();
|
||||
result_clone();
|
||||
i64_clone();
|
||||
my_clone::wrapper_clone();
|
||||
test_pin();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user