diff options
| author | bors <bors@rust-lang.org> | 2021-08-03 10:42:30 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-08-03 10:42:30 +0000 |
| commit | 2939249f294dd54a9ce78a8ee1f2922a44e7fb7c (patch) | |
| tree | 215f7fbbdcd75b81227c37b506c3e4fccbdc7985 /src | |
| parent | 3354a44d2fa8d5ba6b8d6b40d2596de2c8292ec1 (diff) | |
| parent | 331e78d80422ca779c71b19d9273f5d8ee737643 (diff) | |
Auto merge of #87725 - JohnTitor:rollup-2ywcpuk, r=JohnTitor
Rollup of 8 pull requests Successful merges: - #87645 (Properly find owner of closure in THIR unsafeck) - #87646 (Fix a parser ICE on invalid `fn` body) - #87652 (Validate that naked functions are never inlined) - #87685 (Write docs for SyncOnceCell From and Default impl) - #87693 (Add `aarch64-apple-ios-sim` as a possible target to the manifest) - #87708 (Add convenience method for handling ipv4-mapped addresses by canonicalizing them) - #87711 (Correct typo) - #87716 (Allow generic SIMD array element type) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'src')
| -rw-r--r-- | src/doc/unstable-book/src/library-features/asm.md | 2 | ||||
| -rw-r--r-- | src/test/ui/asm/naked-functions.rs | 43 | ||||
| -rw-r--r-- | src/test/ui/asm/naked-functions.stderr | 56 | ||||
| -rw-r--r-- | src/test/ui/parser/issue-87635.rs | 9 | ||||
| -rw-r--r-- | src/test/ui/parser/issue-87635.stderr | 19 | ||||
| -rw-r--r-- | src/test/ui/simd/simd-generics.rs | 58 | ||||
| -rw-r--r-- | src/test/ui/simd/simd-type-generic-monomorphisation-non-primitive.rs | 14 | ||||
| -rw-r--r-- | src/test/ui/simd/simd-type-generic-monomorphisation-non-primitive.stderr | 4 | ||||
| -rw-r--r-- | src/test/ui/unsafe/issue-87414-query-cycle.rs | 15 | ||||
| -rw-r--r-- | src/tools/build-manifest/src/main.rs | 1 |
10 files changed, 204 insertions, 17 deletions
diff --git a/src/doc/unstable-book/src/library-features/asm.md b/src/doc/unstable-book/src/library-features/asm.md index e950891ef92..8ff600d5334 100644 --- a/src/doc/unstable-book/src/library-features/asm.md +++ b/src/doc/unstable-book/src/library-features/asm.md @@ -402,7 +402,7 @@ assert_eq!(a, 5); This will decrement the `{0}` register value from 10 to 3, then add 2 and store it in `a`. -This example show a few thing: +This example shows a few things: First that the same number can be used as a label multiple times in the same inline block. diff --git a/src/test/ui/asm/naked-functions.rs b/src/test/ui/asm/naked-functions.rs index a46ca4544a6..7075995c2cf 100644 --- a/src/test/ui/asm/naked-functions.rs +++ b/src/test/ui/asm/naked-functions.rs @@ -167,3 +167,46 @@ pub unsafe extern "C" fn valid_c() { pub unsafe extern "C" fn valid_att_syntax() { asm!("", options(noreturn, att_syntax)); } + +#[naked] +pub unsafe extern "C" fn inline_none() { + asm!("", options(noreturn)); +} + +#[naked] +#[inline] +//~^ WARN naked functions cannot be inlined +//~| WARN this was previously accepted +pub unsafe extern "C" fn inline_hint() { + asm!("", options(noreturn)); +} + +#[naked] +#[inline(always)] +//~^ WARN naked functions cannot be inlined +//~| WARN this was previously accepted +pub unsafe extern "C" fn inline_always() { + asm!("", options(noreturn)); +} + +#[naked] +#[inline(never)] +//~^ WARN naked functions cannot be inlined +//~| WARN this was previously accepted +pub unsafe extern "C" fn inline_never() { + asm!("", options(noreturn)); +} + +#[naked] +#[inline] +//~^ WARN naked functions cannot be inlined +//~| WARN this was previously accepted +#[inline(always)] +//~^ WARN naked functions cannot be inlined +//~| WARN this was previously accepted +#[inline(never)] +//~^ WARN naked functions cannot be inlined +//~| WARN this was previously accepted +pub unsafe extern "C" fn inline_all() { + asm!("", options(noreturn)); +} diff --git a/src/test/ui/asm/naked-functions.stderr b/src/test/ui/asm/naked-functions.stderr index 9a82da8d90d..2a186a69ff4 100644 --- a/src/test/ui/asm/naked-functions.stderr +++ b/src/test/ui/asm/naked-functions.stderr @@ -296,5 +296,59 @@ LL | pub unsafe extern "Rust" fn rust_abi() { = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! = note: for more information, see issue #32408 <https://github.com/rust-lang/rust/issues/32408> -error: aborting due to 8 previous errors; 19 warnings emitted +warning: naked functions cannot be inlined + --> $DIR/naked-functions.rs:177:1 + | +LL | #[inline] + | ^^^^^^^^^ + | + = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! + = note: for more information, see issue #32408 <https://github.com/rust-lang/rust/issues/32408> + +warning: naked functions cannot be inlined + --> $DIR/naked-functions.rs:185:1 + | +LL | #[inline(always)] + | ^^^^^^^^^^^^^^^^^ + | + = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! + = note: for more information, see issue #32408 <https://github.com/rust-lang/rust/issues/32408> + +warning: naked functions cannot be inlined + --> $DIR/naked-functions.rs:193:1 + | +LL | #[inline(never)] + | ^^^^^^^^^^^^^^^^ + | + = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! + = note: for more information, see issue #32408 <https://github.com/rust-lang/rust/issues/32408> + +warning: naked functions cannot be inlined + --> $DIR/naked-functions.rs:201:1 + | +LL | #[inline] + | ^^^^^^^^^ + | + = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! + = note: for more information, see issue #32408 <https://github.com/rust-lang/rust/issues/32408> + +warning: naked functions cannot be inlined + --> $DIR/naked-functions.rs:204:1 + | +LL | #[inline(always)] + | ^^^^^^^^^^^^^^^^^ + | + = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! + = note: for more information, see issue #32408 <https://github.com/rust-lang/rust/issues/32408> + +warning: naked functions cannot be inlined + --> $DIR/naked-functions.rs:207:1 + | +LL | #[inline(never)] + | ^^^^^^^^^^^^^^^^ + | + = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! + = note: for more information, see issue #32408 <https://github.com/rust-lang/rust/issues/32408> + +error: aborting due to 8 previous errors; 25 warnings emitted diff --git a/src/test/ui/parser/issue-87635.rs b/src/test/ui/parser/issue-87635.rs new file mode 100644 index 00000000000..da74c1877b1 --- /dev/null +++ b/src/test/ui/parser/issue-87635.rs @@ -0,0 +1,9 @@ +struct Foo {} + +impl Foo { + pub fn bar() + //~^ ERROR: expected `;`, found `}` + //~| ERROR: associated function in `impl` without body +} + +fn main() {} diff --git a/src/test/ui/parser/issue-87635.stderr b/src/test/ui/parser/issue-87635.stderr new file mode 100644 index 00000000000..920a9f937dd --- /dev/null +++ b/src/test/ui/parser/issue-87635.stderr @@ -0,0 +1,19 @@ +error: expected `;`, found `}` + --> $DIR/issue-87635.rs:4:17 + | +LL | pub fn bar() + | ^ help: add `;` here +... +LL | } + | - unexpected token + +error: associated function in `impl` without body + --> $DIR/issue-87635.rs:4:5 + | +LL | pub fn bar() + | ^^^^^^^^^^^- + | | + | help: provide a definition for the function: `{ <body> }` + +error: aborting due to 2 previous errors + diff --git a/src/test/ui/simd/simd-generics.rs b/src/test/ui/simd/simd-generics.rs index 50a4bfd9f51..fa9d35ee4df 100644 --- a/src/test/ui/simd/simd-generics.rs +++ b/src/test/ui/simd/simd-generics.rs @@ -10,7 +10,15 @@ struct f32x4(f32, f32, f32, f32); #[repr(simd)] #[derive(Copy, Clone)] -struct S<const N: usize>([f32; N]); +struct A<const N: usize>([f32; N]); + +#[repr(simd)] +#[derive(Copy, Clone)] +struct B<T>([T; 4]); + +#[repr(simd)] +#[derive(Copy, Clone)] +struct C<T, const N: usize>([T; N]); extern "platform-intrinsic" { @@ -29,7 +37,23 @@ impl ops::Add for f32x4 { } } -impl ops::Add for S<4> { +impl ops::Add for A<4> { + type Output = Self; + + fn add(self, rhs: Self) -> Self { + unsafe { simd_add(self, rhs) } + } +} + +impl ops::Add for B<f32> { + type Output = Self; + + fn add(self, rhs: Self) -> Self { + unsafe { simd_add(self, rhs) } + } +} + +impl ops::Add for C<f32, 4> { type Output = Self; fn add(self, rhs: Self) -> Self { @@ -39,19 +63,23 @@ impl ops::Add for S<4> { pub fn main() { - let lr = f32x4(1.0f32, 2.0f32, 3.0f32, 4.0f32); + let x = [1.0f32, 2.0f32, 3.0f32, 4.0f32]; + let y = [2.0f32, 4.0f32, 6.0f32, 8.0f32]; // lame-o - let f32x4(x, y, z, w) = add(lr, lr); - assert_eq!(x, 2.0f32); - assert_eq!(y, 4.0f32); - assert_eq!(z, 6.0f32); - assert_eq!(w, 8.0f32); - - let lr2 = S::<4>([1.0f32, 2.0f32, 3.0f32, 4.0f32]); - let [x, y, z, w] = add(lr2, lr2).0; - assert_eq!(x, 2.0f32); - assert_eq!(y, 4.0f32); - assert_eq!(z, 6.0f32); - assert_eq!(w, 8.0f32); + let a = f32x4(1.0f32, 2.0f32, 3.0f32, 4.0f32); + let f32x4(a0, a1, a2, a3) = add(a, a); + assert_eq!(a0, 2.0f32); + assert_eq!(a1, 4.0f32); + assert_eq!(a2, 6.0f32); + assert_eq!(a3, 8.0f32); + + let a = A(x); + assert_eq!(add(a, a).0, y); + + let b = B(x); + assert_eq!(add(b, b).0, y); + + let c = C(x); + assert_eq!(add(c, c).0, y); } diff --git a/src/test/ui/simd/simd-type-generic-monomorphisation-non-primitive.rs b/src/test/ui/simd/simd-type-generic-monomorphisation-non-primitive.rs new file mode 100644 index 00000000000..0bc73b15580 --- /dev/null +++ b/src/test/ui/simd/simd-type-generic-monomorphisation-non-primitive.rs @@ -0,0 +1,14 @@ +// build-fail + +#![feature(repr_simd)] + +struct E; + +// error-pattern:monomorphising SIMD type `S<E>` with a non-primitive-scalar (integer/float/pointer) element type `E` + +#[repr(simd)] +struct S<T>([T; 4]); + +fn main() { + let _v: Option<S<E>> = None; +} diff --git a/src/test/ui/simd/simd-type-generic-monomorphisation-non-primitive.stderr b/src/test/ui/simd/simd-type-generic-monomorphisation-non-primitive.stderr new file mode 100644 index 00000000000..9e8f06b824c --- /dev/null +++ b/src/test/ui/simd/simd-type-generic-monomorphisation-non-primitive.stderr @@ -0,0 +1,4 @@ +error: monomorphising SIMD type `S<E>` with a non-primitive-scalar (integer/float/pointer) element type `E` + +error: aborting due to previous error + diff --git a/src/test/ui/unsafe/issue-87414-query-cycle.rs b/src/test/ui/unsafe/issue-87414-query-cycle.rs new file mode 100644 index 00000000000..99e40ba4b4c --- /dev/null +++ b/src/test/ui/unsafe/issue-87414-query-cycle.rs @@ -0,0 +1,15 @@ +// Regression test for #87414. + +// check-pass +// compile-flags: -Zthir-unsafeck + +fn bad<T>() -> Box<dyn Iterator<Item = [(); { |x: u32| { x }; 4 }]>> { todo!() } + +fn foo() -> [(); { |x: u32| { x }; 4 }] { todo!() } +fn bar() { let _: [(); { |x: u32| { x }; 4 }]; } + +// This one should not cause any errors either: +unsafe fn unsf() {} +fn bad2<T>() -> Box<dyn Iterator<Item = [(); { unsafe { || { unsf() } }; 4 }]>> { todo!() } + +fn main() {} diff --git a/src/tools/build-manifest/src/main.rs b/src/tools/build-manifest/src/main.rs index 1e19b7b21d8..ab63a9e2dfa 100644 --- a/src/tools/build-manifest/src/main.rs +++ b/src/tools/build-manifest/src/main.rs @@ -54,6 +54,7 @@ static HOSTS: &[&str] = &[ static TARGETS: &[&str] = &[ "aarch64-apple-darwin", "aarch64-apple-ios", + "aarch64-apple-ios-sim", "aarch64-fuchsia", "aarch64-linux-android", "aarch64-pc-windows-msvc", |
