From: kennytm Date: Wed, 9 May 2018 09:25:53 +0000 (+0800) Subject: Rollup merge of #50460 - F001:const_string, r=kennytm X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=1f4718a5c1ae842d119b2a0399ce07a4ee78c28c;hp=dea03f1239a5c9ce44daff36473c7d258c4aef1d;p=rust.git Rollup merge of #50460 - F001:const_string, r=kennytm Make `String::new()` const Following the steps of https://github.com/rust-lang/rust/pull/50233 , make `String::new()` a `const fn`. --- diff --git a/src/liballoc/lib.rs b/src/liballoc/lib.rs index da4b76a4d52..bb78c14b905 100644 --- a/src/liballoc/lib.rs +++ b/src/liballoc/lib.rs @@ -125,6 +125,7 @@ #![feature(inclusive_range_methods)] #![cfg_attr(stage0, feature(generic_param_attrs))] #![feature(rustc_const_unstable)] +#![feature(const_vec_new)] #![cfg_attr(not(test), feature(fn_traits, i128))] #![cfg_attr(test, feature(test))] diff --git a/src/liballoc/string.rs b/src/liballoc/string.rs index 2f84d5f7f86..da9afdd2ca3 100644 --- a/src/liballoc/string.rs +++ b/src/liballoc/string.rs @@ -380,7 +380,8 @@ impl String { /// ``` #[inline] #[stable(feature = "rust1", since = "1.0.0")] - pub fn new() -> String { + #[rustc_const_unstable(feature = "const_string_new")] + pub const fn new() -> String { String { vec: Vec::new() } } diff --git a/src/test/run-pass/collections-const-new.rs b/src/test/run-pass/collections-const-new.rs new file mode 100644 index 00000000000..4003c2ec4f7 --- /dev/null +++ b/src/test/run-pass/collections-const-new.rs @@ -0,0 +1,22 @@ +// Copyright 2012 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. + +// Test several functions can be used for constants +// 1. Vec::new() +// 2. String::new() + +#![feature(const_vec_new)] +#![feature(const_string_new)] + +const MY_VEC: Vec = Vec::new(); + +const MY_STRING: String = String::new(); + +pub fn main() {} diff --git a/src/test/run-pass/vec-const-new.rs b/src/test/run-pass/vec-const-new.rs deleted file mode 100644 index 62e2a36d7cc..00000000000 --- a/src/test/run-pass/vec-const-new.rs +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright 2012 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. - -// Test that Vec::new() can be used for constants - -#![feature(const_vec_new)] - -const MY_VEC: Vec = Vec::new(); - -pub fn main() {}