From f6f9cbe56011debeb4d6df9ad71139bc8a87d653 Mon Sep 17 00:00:00 2001 From: Seiichi Uchida Date: Tue, 26 Dec 2017 18:41:56 +0900 Subject: [PATCH] Add tests to fixed ICEs Closes #27078. Closes #27985. Closes #39848. Closes #42164. Closes #42479. Closes #45152. Closes #45662. Closes #45876. Closes #45965. --- src/test/compile-fail/E0532.rs | 24 ++++++++++++++++ src/test/compile-fail/issue-27078.rs | 21 ++++++++++++++ src/test/compile-fail/issue-39848.rs | 20 +++++++++++++ src/test/compile-fail/issue-45965.rs | 14 +++++++++ src/test/run-pass/align-with-extern-c-fn.rs | 23 +++++++++++++++ src/test/run-pass/impl-trait/issue-42479.rs | 27 +++++++++++++++++ src/test/run-pass/issue-45152.rs | 31 ++++++++++++++++++++ src/test/run-pass/macro-nested_expr.rs | 32 +++++++++++++++++++++ 8 files changed, 192 insertions(+) create mode 100644 src/test/compile-fail/E0532.rs create mode 100644 src/test/compile-fail/issue-27078.rs create mode 100644 src/test/compile-fail/issue-39848.rs create mode 100644 src/test/compile-fail/issue-45965.rs create mode 100644 src/test/run-pass/align-with-extern-c-fn.rs create mode 100644 src/test/run-pass/impl-trait/issue-42479.rs create mode 100644 src/test/run-pass/issue-45152.rs create mode 100644 src/test/run-pass/macro-nested_expr.rs diff --git a/src/test/compile-fail/E0532.rs b/src/test/compile-fail/E0532.rs new file mode 100644 index 0000000000000..5dc3b5f94f386 --- /dev/null +++ b/src/test/compile-fail/E0532.rs @@ -0,0 +1,24 @@ +// Copyright 2017 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +fn main() { + let value = 1; + + match SomeStruct(value) { + StructConst1(_) => { }, + //~^ ERROR expected tuple struct/variant, found constant `StructConst1` + _ => { }, + } + + struct SomeStruct(u8); + + const StructConst1 : SomeStruct = SomeStruct(1); + const StructConst2 : SomeStruct = SomeStruct(2); +} diff --git a/src/test/compile-fail/issue-27078.rs b/src/test/compile-fail/issue-27078.rs new file mode 100644 index 0000000000000..f34bef6224900 --- /dev/null +++ b/src/test/compile-fail/issue-27078.rs @@ -0,0 +1,21 @@ +// Copyright 2017 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(associated_consts)] + +trait Foo { + const BAR: i32; + fn foo(self) -> &'static i32 { + //~^ ERROR the trait bound `Self: std::marker::Sized` is not satisfied + &::BAR + } +} + +fn main() {} diff --git a/src/test/compile-fail/issue-39848.rs b/src/test/compile-fail/issue-39848.rs new file mode 100644 index 0000000000000..d5ca009d310f7 --- /dev/null +++ b/src/test/compile-fail/issue-39848.rs @@ -0,0 +1,20 @@ +// Copyright 2017 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +macro_rules! get_opt { + ($tgt:expr, $field:ident) => { + if $tgt.has_$field() {} + } +} + +fn main() { + get_opt!(bar, foo); + //~^ ERROR expected `{`, found `foo` +} diff --git a/src/test/compile-fail/issue-45965.rs b/src/test/compile-fail/issue-45965.rs new file mode 100644 index 0000000000000..0b82f2b32ffb9 --- /dev/null +++ b/src/test/compile-fail/issue-45965.rs @@ -0,0 +1,14 @@ +// Copyright 2017 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +fn main() { + let a = |r: f64| if r != 0.0(r != 0.0) { 1.0 } else { 0.0 }; + //~^ ERROR expected function, found `{float}` +} diff --git a/src/test/run-pass/align-with-extern-c-fn.rs b/src/test/run-pass/align-with-extern-c-fn.rs new file mode 100644 index 0000000000000..db25960df4c87 --- /dev/null +++ b/src/test/run-pass/align-with-extern-c-fn.rs @@ -0,0 +1,23 @@ +// Copyright 2017 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// #45662 + +#![feature(repr_align)] +#![feature(attr_literals)] + +#[repr(align(16))] +pub struct A { + y: i64, +} + +pub extern "C" fn foo(x: A) {} + +fn main() {} diff --git a/src/test/run-pass/impl-trait/issue-42479.rs b/src/test/run-pass/impl-trait/issue-42479.rs new file mode 100644 index 0000000000000..629948a5dc4a8 --- /dev/null +++ b/src/test/run-pass/impl-trait/issue-42479.rs @@ -0,0 +1,27 @@ +// Copyright 2017 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(conservative_impl_trait)] + +use std::iter::once; + +struct Foo { + x: i32, +} + +impl Foo { + fn inside(&self) -> impl Iterator { + once(&self.x) + } +} + +fn main() { + println!("hi"); +} diff --git a/src/test/run-pass/issue-45152.rs b/src/test/run-pass/issue-45152.rs new file mode 100644 index 0000000000000..a5c349adb8d20 --- /dev/null +++ b/src/test/run-pass/issue-45152.rs @@ -0,0 +1,31 @@ +// Copyright 2017 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +#![feature(unsize, coerce_unsized)] + +#[repr(packed)] +struct UnalignedPtr<'a, T: ?Sized> + where T: 'a, +{ + data: &'a T, +} + +fn main() { + + impl<'a, T, U> std::ops::CoerceUnsized> for UnalignedPtr<'a, T> + where + T: std::marker::Unsize + ?Sized, + U: ?Sized, + { } + + let arr = [1, 2, 3]; + let arr_unaligned: UnalignedPtr<[i32; 3]> = UnalignedPtr { data: &arr }; + let arr_unaligned: UnalignedPtr<[i32]> = arr_unaligned; +} diff --git a/src/test/run-pass/macro-nested_expr.rs b/src/test/run-pass/macro-nested_expr.rs new file mode 100644 index 0000000000000..993ded60c3678 --- /dev/null +++ b/src/test/run-pass/macro-nested_expr.rs @@ -0,0 +1,32 @@ +// Copyright 2017 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// #42164 + +#![feature(decl_macro)] +#![allow(dead_code)] + +pub macro m($inner_str:expr) { + #[doc = $inner_str] + struct S; +} + +macro_rules! define_f { + ($name:expr) => { + #[export_name = $name] + fn f() {} + } +} + +fn main() { + define_f!(concat!("exported_", "f")); + m!(stringify!(foo)); +} +