about summary refs log tree commit diff
diff options
context:
space:
mode:
authorkennytm <kennytm@gmail.com>2018-05-09 17:25:53 +0800
committerkennytm <kennytm@gmail.com>2018-05-09 20:29:42 +0800
commit1f4718a5c1ae842d119b2a0399ce07a4ee78c28c (patch)
tree6c360ee03585f6a63746937ff64d49b75195c3ab
parentdea03f1239a5c9ce44daff36473c7d258c4aef1d (diff)
parent160063aad2206a35e6312bfaa159f0f4475af0ae (diff)
downloadrust-1f4718a5c1ae842d119b2a0399ce07a4ee78c28c.tar.gz
rust-1f4718a5c1ae842d119b2a0399ce07a4ee78c28c.zip
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`.
-rw-r--r--src/liballoc/lib.rs1
-rw-r--r--src/liballoc/string.rs3
-rw-r--r--src/test/run-pass/collections-const-new.rs (renamed from src/test/run-pass/vec-const-new.rs)7
3 files changed, 9 insertions, 2 deletions
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/vec-const-new.rs b/src/test/run-pass/collections-const-new.rs
index 62e2a36d7cc..4003c2ec4f7 100644
--- a/src/test/run-pass/vec-const-new.rs
+++ b/src/test/run-pass/collections-const-new.rs
@@ -8,10 +8,15 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-// Test that Vec::new() can be used for constants
+// 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<usize> = Vec::new();
 
+const MY_STRING: String = String::new();
+
 pub fn main() {}