mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 06:44:35 +00:00
Add ui test.
This commit is contained in:
parent
39f2657d11
commit
be758ef5ab
@ -30,6 +30,20 @@ fn let_wild_gets_unsafe_field() {
|
||||
let (_,) = (&u2.a,); //~ ERROR [E0133]
|
||||
}
|
||||
|
||||
fn let_ascribe_gets_unsafe_field() {
|
||||
let u1 = U { a: I(0) };
|
||||
let u2 = U { a: I(1) };
|
||||
let p = P { a: &2, b: &3 };
|
||||
let _: _ = &p.b; //~ ERROR reference to packed field
|
||||
let _: _ = u1.a; //~ ERROR [E0133]
|
||||
let _: _ = &u2.a; //~ ERROR [E0133]
|
||||
|
||||
// variation on above with `_` in substructure
|
||||
let (_,): _ = (&p.b,); //~ ERROR reference to packed field
|
||||
let (_,): _ = (u1.a,); //~ ERROR [E0133]
|
||||
let (_,): _ = (&u2.a,); //~ ERROR [E0133]
|
||||
}
|
||||
|
||||
fn match_unsafe_field_to_wild() {
|
||||
let u1 = U { a: I(0) };
|
||||
let u2 = U { a: I(1) };
|
||||
|
@ -17,7 +17,25 @@ LL | let (_,) = (&p.b,);
|
||||
= help: copy the field contents to a local variable, or replace the reference with a raw pointer and use `read_unaligned`/`write_unaligned` (loads and stores via `*p` must be properly aligned even when using raw pointers)
|
||||
|
||||
error[E0793]: reference to packed field is unaligned
|
||||
--> $DIR/issue-53114-safety-checks.rs:37:11
|
||||
--> $DIR/issue-53114-safety-checks.rs:37:16
|
||||
|
|
||||
LL | let _: _ = &p.b;
|
||||
| ^^^^
|
||||
|
|
||||
= note: fields of packed structs are not properly aligned, and creating a misaligned reference is undefined behavior (even if that reference is never dereferenced)
|
||||
= help: copy the field contents to a local variable, or replace the reference with a raw pointer and use `read_unaligned`/`write_unaligned` (loads and stores via `*p` must be properly aligned even when using raw pointers)
|
||||
|
||||
error[E0793]: reference to packed field is unaligned
|
||||
--> $DIR/issue-53114-safety-checks.rs:42:20
|
||||
|
|
||||
LL | let (_,): _ = (&p.b,);
|
||||
| ^^^^
|
||||
|
|
||||
= note: fields of packed structs are not properly aligned, and creating a misaligned reference is undefined behavior (even if that reference is never dereferenced)
|
||||
= help: copy the field contents to a local variable, or replace the reference with a raw pointer and use `read_unaligned`/`write_unaligned` (loads and stores via `*p` must be properly aligned even when using raw pointers)
|
||||
|
||||
error[E0793]: reference to packed field is unaligned
|
||||
--> $DIR/issue-53114-safety-checks.rs:51:11
|
||||
|
|
||||
LL | match &p.b { _ => { } }
|
||||
| ^^^^
|
||||
@ -26,7 +44,7 @@ LL | match &p.b { _ => { } }
|
||||
= help: copy the field contents to a local variable, or replace the reference with a raw pointer and use `read_unaligned`/`write_unaligned` (loads and stores via `*p` must be properly aligned even when using raw pointers)
|
||||
|
||||
error[E0793]: reference to packed field is unaligned
|
||||
--> $DIR/issue-53114-safety-checks.rs:42:12
|
||||
--> $DIR/issue-53114-safety-checks.rs:56:12
|
||||
|
|
||||
LL | match (&p.b,) { (_,) => { } }
|
||||
| ^^^^
|
||||
@ -59,7 +77,39 @@ LL | let (_,) = (&u2.a,);
|
||||
= note: the field may not be properly initialized: using uninitialized data will cause undefined behavior
|
||||
|
||||
error[E0133]: access to union field is unsafe and requires unsafe function or block
|
||||
--> $DIR/issue-53114-safety-checks.rs:38:11
|
||||
--> $DIR/issue-53114-safety-checks.rs:38:12
|
||||
|
|
||||
LL | let _: _ = u1.a;
|
||||
| ^ access to union field
|
||||
|
|
||||
= note: the field may not be properly initialized: using uninitialized data will cause undefined behavior
|
||||
|
||||
error[E0133]: access to union field is unsafe and requires unsafe function or block
|
||||
--> $DIR/issue-53114-safety-checks.rs:39:16
|
||||
|
|
||||
LL | let _: _ = &u2.a;
|
||||
| ^^^^^ access to union field
|
||||
|
|
||||
= note: the field may not be properly initialized: using uninitialized data will cause undefined behavior
|
||||
|
||||
error[E0133]: access to union field is unsafe and requires unsafe function or block
|
||||
--> $DIR/issue-53114-safety-checks.rs:43:20
|
||||
|
|
||||
LL | let (_,): _ = (u1.a,);
|
||||
| ^^^^ access to union field
|
||||
|
|
||||
= note: the field may not be properly initialized: using uninitialized data will cause undefined behavior
|
||||
|
||||
error[E0133]: access to union field is unsafe and requires unsafe function or block
|
||||
--> $DIR/issue-53114-safety-checks.rs:44:20
|
||||
|
|
||||
LL | let (_,): _ = (&u2.a,);
|
||||
| ^^^^^ access to union field
|
||||
|
|
||||
= note: the field may not be properly initialized: using uninitialized data will cause undefined behavior
|
||||
|
||||
error[E0133]: access to union field is unsafe and requires unsafe function or block
|
||||
--> $DIR/issue-53114-safety-checks.rs:52:11
|
||||
|
|
||||
LL | match u1.a { _ => { } }
|
||||
| ^^^^ access to union field
|
||||
@ -67,7 +117,7 @@ LL | match u1.a { _ => { } }
|
||||
= note: the field may not be properly initialized: using uninitialized data will cause undefined behavior
|
||||
|
||||
error[E0133]: access to union field is unsafe and requires unsafe function or block
|
||||
--> $DIR/issue-53114-safety-checks.rs:39:11
|
||||
--> $DIR/issue-53114-safety-checks.rs:53:11
|
||||
|
|
||||
LL | match &u2.a { _ => { } }
|
||||
| ^^^^^ access to union field
|
||||
@ -75,7 +125,7 @@ LL | match &u2.a { _ => { } }
|
||||
= note: the field may not be properly initialized: using uninitialized data will cause undefined behavior
|
||||
|
||||
error[E0133]: access to union field is unsafe and requires unsafe function or block
|
||||
--> $DIR/issue-53114-safety-checks.rs:43:12
|
||||
--> $DIR/issue-53114-safety-checks.rs:57:12
|
||||
|
|
||||
LL | match (u1.a,) { (_,) => { } }
|
||||
| ^^^^ access to union field
|
||||
@ -83,14 +133,14 @@ LL | match (u1.a,) { (_,) => { } }
|
||||
= note: the field may not be properly initialized: using uninitialized data will cause undefined behavior
|
||||
|
||||
error[E0133]: access to union field is unsafe and requires unsafe function or block
|
||||
--> $DIR/issue-53114-safety-checks.rs:44:12
|
||||
--> $DIR/issue-53114-safety-checks.rs:58:12
|
||||
|
|
||||
LL | match (&u2.a,) { (_,) => { } }
|
||||
| ^^^^^ access to union field
|
||||
|
|
||||
= note: the field may not be properly initialized: using uninitialized data will cause undefined behavior
|
||||
|
||||
error: aborting due to 11 previous errors
|
||||
error: aborting due to 17 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0133, E0793.
|
||||
For more information about an error, try `rustc --explain E0133`.
|
||||
|
27
tests/ui/borrowck/let_underscore_temporary.rs
Normal file
27
tests/ui/borrowck/let_underscore_temporary.rs
Normal file
@ -0,0 +1,27 @@
|
||||
// check-pass
|
||||
|
||||
fn let_underscore(string: &Option<&str>, mut num: Option<i32>) {
|
||||
let _ = if let Some(s) = *string { s.len() } else { 0 };
|
||||
let _ = if let Some(s) = &num { s } else { &0 };
|
||||
let _ = if let Some(s) = &mut num {
|
||||
*s += 1;
|
||||
s
|
||||
} else {
|
||||
&mut 0
|
||||
};
|
||||
let _ = if let Some(ref s) = num { s } else { &0 };
|
||||
let _ = if let Some(mut s) = num {
|
||||
s += 1;
|
||||
s
|
||||
} else {
|
||||
0
|
||||
};
|
||||
let _ = if let Some(ref mut s) = num {
|
||||
*s += 1;
|
||||
s
|
||||
} else {
|
||||
&mut 0
|
||||
};
|
||||
}
|
||||
|
||||
fn main() {}
|
@ -1,11 +1,19 @@
|
||||
error[E0133]: dereference of raw pointer is unsafe and requires unsafe function or block
|
||||
--> $DIR/unsafe-fn-deref-ptr.rs:5:12
|
||||
--> $DIR/unsafe-fn-deref-ptr.rs:6:12
|
||||
|
|
||||
LL | let _: u8 = *p;
|
||||
| ^^ dereference of raw pointer
|
||||
|
|
||||
= note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
|
||||
|
||||
error[E0133]: dereference of raw pointer is unsafe and requires unsafe function or block
|
||||
--> $DIR/unsafe-fn-deref-ptr.rs:7:12
|
||||
|
|
||||
LL | return *p;
|
||||
| ^^ dereference of raw pointer
|
||||
|
|
||||
= note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
|
||||
|
||||
error: aborting due to previous error
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0133`.
|
||||
|
@ -2,6 +2,8 @@
|
||||
// [thir]compile-flags: -Z thir-unsafeck
|
||||
|
||||
fn f(p: *const u8) -> u8 {
|
||||
let _ = *p; //[thir]~ ERROR dereference of raw pointer is unsafe
|
||||
let _: u8 = *p; //~ ERROR dereference of raw pointer is unsafe
|
||||
return *p; //~ ERROR dereference of raw pointer is unsafe
|
||||
}
|
||||
|
||||
|
@ -1,11 +1,27 @@
|
||||
error[E0133]: dereference of raw pointer is unsafe and requires unsafe function or block
|
||||
--> $DIR/unsafe-fn-deref-ptr.rs:5:12
|
||||
--> $DIR/unsafe-fn-deref-ptr.rs:5:13
|
||||
|
|
||||
LL | let _ = *p;
|
||||
| ^^ dereference of raw pointer
|
||||
|
|
||||
= note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
|
||||
|
||||
error[E0133]: dereference of raw pointer is unsafe and requires unsafe function or block
|
||||
--> $DIR/unsafe-fn-deref-ptr.rs:6:17
|
||||
|
|
||||
LL | let _: u8 = *p;
|
||||
| ^^ dereference of raw pointer
|
||||
|
|
||||
= note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
|
||||
|
||||
error[E0133]: dereference of raw pointer is unsafe and requires unsafe function or block
|
||||
--> $DIR/unsafe-fn-deref-ptr.rs:7:12
|
||||
|
|
||||
LL | return *p;
|
||||
| ^^ dereference of raw pointer
|
||||
|
|
||||
= note: raw pointers may be null, dangling or unaligned; they can violate aliasing rules and cause data races: all of these are undefined behavior
|
||||
|
||||
error: aborting due to previous error
|
||||
error: aborting due to 3 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0133`.
|
||||
|
Loading…
Reference in New Issue
Block a user