about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2019-09-24 10:58:41 +0000
committerbors <bors@rust-lang.org>2019-09-24 10:58:41 +0000
commit6ef275e6c3cb1384ec78128eceeb4963ff788dca (patch)
treee2e776a76307c183bb2a762a2b1f630b71339b68 /src/test
parent7fdea7a72abb9f5a58fdc19c0a298042291c53b2 (diff)
parent7767e7fb165d527f1991175809a361f2d2313b80 (diff)
downloadrust-6ef275e6c3cb1384ec78128eceeb4963ff788dca.tar.gz
rust-6ef275e6c3cb1384ec78128eceeb4963ff788dca.zip
Auto merge of #63770 - oli-obk:allow_internal_unstable, r=Centril
Stabilize `str::len`, `[T]::len` and `str::as_bytes` as const fn

r? @Centril

cc @RalfJung

This also introduces a scheme for making certain feature gates legal in stabilized const fns
Diffstat (limited to 'src/test')
-rw-r--r--src/test/ui/consts/const-eval/strlen.rs12
-rw-r--r--src/test/ui/consts/min_const_fn/min_const_fn_unsafe_bad.rs2
-rw-r--r--src/test/ui/consts/min_const_fn/min_const_fn_unsafe_bad.stderr8
-rw-r--r--src/test/ui/issues/issue-52060.rs1
-rw-r--r--src/test/ui/issues/issue-52060.stderr10
5 files changed, 16 insertions, 17 deletions
diff --git a/src/test/ui/consts/const-eval/strlen.rs b/src/test/ui/consts/const-eval/strlen.rs
index 6a5cad82c3a..7b14a523543 100644
--- a/src/test/ui/consts/const-eval/strlen.rs
+++ b/src/test/ui/consts/const-eval/strlen.rs
@@ -1,9 +1,11 @@
 // run-pass
 
-#![feature(const_str_len, const_str_as_bytes)]
-
 const S: &str = "foo";
 pub const B: &[u8] = S.as_bytes();
+pub const C: usize = B.len();
+pub const D: bool = B.is_empty();
+pub const E: bool = S.is_empty();
+pub const F: usize = S.len();
 
 pub fn foo() -> [u8; S.len()] {
     let mut buf = [0; S.len()];
@@ -20,4 +22,10 @@ fn main() {
     assert_eq!(LEN, S.len());
     assert_eq!(B, foo());
     assert_eq!(B, b"foo");
+    assert_eq!(C, 3);
+    assert_eq!(F, 3);
+    assert!(!D);
+    assert!(!E);
+    const EMPTY: bool = "".is_empty();
+    assert!(EMPTY);
 }
diff --git a/src/test/ui/consts/min_const_fn/min_const_fn_unsafe_bad.rs b/src/test/ui/consts/min_const_fn/min_const_fn_unsafe_bad.rs
index 4281874a031..0b1ab1c34ff 100644
--- a/src/test/ui/consts/min_const_fn/min_const_fn_unsafe_bad.rs
+++ b/src/test/ui/consts/min_const_fn/min_const_fn_unsafe_bad.rs
@@ -12,5 +12,5 @@ fn main() {}
 const unsafe fn no_union() {
     union Foo { x: (), y: () }
     Foo { x: () }.y
-    //~^ unions in const fn
+    //~^ accessing union fields is unstable
 }
diff --git a/src/test/ui/consts/min_const_fn/min_const_fn_unsafe_bad.stderr b/src/test/ui/consts/min_const_fn/min_const_fn_unsafe_bad.stderr
index 9de0e732f33..2a4c627438d 100644
--- a/src/test/ui/consts/min_const_fn/min_const_fn_unsafe_bad.stderr
+++ b/src/test/ui/consts/min_const_fn/min_const_fn_unsafe_bad.stderr
@@ -25,14 +25,14 @@ LL | const unsafe fn bad_const_unsafe_deref_raw_ref(x: *mut usize) -> &'static u
    = note: for more information, see https://github.com/rust-lang/rust/issues/51911
    = help: add `#![feature(const_raw_ptr_deref)]` to the crate attributes to enable
 
-error[E0658]: unions in const fn are unstable
+error[E0723]: accessing union fields is unstable
   --> $DIR/min_const_fn_unsafe_bad.rs:14:5
    |
 LL |     Foo { x: () }.y
    |     ^^^^^^^^^^^^^^^
    |
-   = note: for more information, see https://github.com/rust-lang/rust/issues/51909
-   = help: add `#![feature(const_fn_union)]` to the crate attributes to enable
+   = note: for more information, see issue https://github.com/rust-lang/rust/issues/57563
+   = help: add `#![feature(const_fn)]` to the crate attributes to enable
 
 error[E0133]: dereference of raw pointer is unsafe and requires unsafe function or block
   --> $DIR/min_const_fn_unsafe_bad.rs:1:77
@@ -44,5 +44,5 @@ LL | const fn bad_const_fn_deref_raw(x: *mut usize) -> &'static usize { unsafe {
 
 error: aborting due to 5 previous errors
 
-Some errors have detailed explanations: E0133, E0658.
+Some errors have detailed explanations: E0133, E0658, E0723.
 For more information about an error, try `rustc --explain E0133`.
diff --git a/src/test/ui/issues/issue-52060.rs b/src/test/ui/issues/issue-52060.rs
index 54eff228934..13b914c0331 100644
--- a/src/test/ui/issues/issue-52060.rs
+++ b/src/test/ui/issues/issue-52060.rs
@@ -3,6 +3,5 @@
 static A: &'static [u32] = &[1];
 static B: [u32; 1] = [0; A.len()];
 //~^ ERROR [E0013]
-//~| ERROR `core::slice::<impl [T]>::len` is not yet stable as a const fn
 
 fn main() {}
diff --git a/src/test/ui/issues/issue-52060.stderr b/src/test/ui/issues/issue-52060.stderr
index 7c3f7695549..2f90f7f9e03 100644
--- a/src/test/ui/issues/issue-52060.stderr
+++ b/src/test/ui/issues/issue-52060.stderr
@@ -4,14 +4,6 @@ error[E0013]: constants cannot refer to statics, use a constant instead
 LL | static B: [u32; 1] = [0; A.len()];
    |                          ^
 
-error: `core::slice::<impl [T]>::len` is not yet stable as a const fn
-  --> $DIR/issue-52060.rs:4:26
-   |
-LL | static B: [u32; 1] = [0; A.len()];
-   |                          ^^^^^^^
-   |
-   = help: add `#![feature(const_slice_len)]` to the crate attributes to enable
-
-error: aborting due to 2 previous errors
+error: aborting due to previous error
 
 For more information about this error, try `rustc --explain E0013`.