about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--library/core/src/panic/location.rs9
-rw-r--r--library/core/tests/lib.rs3
-rw-r--r--library/core/tests/panic.rs1
-rw-r--r--library/core/tests/panic/location.rs31
4 files changed, 41 insertions, 3 deletions
diff --git a/library/core/src/panic/location.rs b/library/core/src/panic/location.rs
index 8eefd9ff20d..6dcf23dde87 100644
--- a/library/core/src/panic/location.rs
+++ b/library/core/src/panic/location.rs
@@ -123,8 +123,9 @@ impl<'a> Location<'a> {
     /// ```
     #[must_use]
     #[stable(feature = "panic_hooks", since = "1.10.0")]
+    #[rustc_const_unstable(feature = "const_location_fields", issue = "102911")]
     #[inline]
-    pub fn file(&self) -> &str {
+    pub const fn file(&self) -> &str {
         self.file
     }
 
@@ -147,8 +148,9 @@ impl<'a> Location<'a> {
     /// ```
     #[must_use]
     #[stable(feature = "panic_hooks", since = "1.10.0")]
+    #[rustc_const_unstable(feature = "const_location_fields", issue = "102911")]
     #[inline]
-    pub fn line(&self) -> u32 {
+    pub const fn line(&self) -> u32 {
         self.line
     }
 
@@ -171,8 +173,9 @@ impl<'a> Location<'a> {
     /// ```
     #[must_use]
     #[stable(feature = "panic_col", since = "1.25.0")]
+    #[rustc_const_unstable(feature = "const_location_fields", issue = "102911")]
     #[inline]
-    pub fn column(&self) -> u32 {
+    pub const fn column(&self) -> u32 {
         self.col
     }
 }
diff --git a/library/core/tests/lib.rs b/library/core/tests/lib.rs
index 525a495903d..b5c34f5df3b 100644
--- a/library/core/tests/lib.rs
+++ b/library/core/tests/lib.rs
@@ -7,6 +7,7 @@
 #![feature(const_assume)]
 #![feature(const_black_box)]
 #![feature(const_bool_to_option)]
+#![feature(const_caller_location)]
 #![feature(const_cell_into_inner)]
 #![feature(const_convert)]
 #![feature(const_heap)]
@@ -20,6 +21,7 @@
 #![feature(const_ptr_write)]
 #![feature(const_trait_impl)]
 #![feature(const_likely)]
+#![feature(const_location_fields)]
 #![feature(core_intrinsics)]
 #![feature(core_private_bignum)]
 #![feature(core_private_diy_float)]
@@ -132,6 +134,7 @@ mod nonzero;
 mod num;
 mod ops;
 mod option;
+mod panic;
 mod pattern;
 mod pin;
 mod pin_macro;
diff --git a/library/core/tests/panic.rs b/library/core/tests/panic.rs
new file mode 100644
index 00000000000..24b6c56b356
--- /dev/null
+++ b/library/core/tests/panic.rs
@@ -0,0 +1 @@
+mod location;
diff --git a/library/core/tests/panic/location.rs b/library/core/tests/panic/location.rs
new file mode 100644
index 00000000000..d20241d8380
--- /dev/null
+++ b/library/core/tests/panic/location.rs
@@ -0,0 +1,31 @@
+use core::panic::Location;
+
+// Note: Some of the following tests depend on the source location,
+// so please be careful when editing this file.
+
+#[test]
+fn location_const_caller() {
+    const _CALLER_REFERENCE: &Location<'static> = Location::caller();
+    const _CALLER: Location<'static> = *Location::caller();
+}
+
+#[test]
+fn location_const_file() {
+    const CALLER: &Location<'static> = Location::caller();
+    const FILE: &str = CALLER.file();
+    assert_eq!(FILE, file!());
+}
+
+#[test]
+fn location_const_line() {
+    const CALLER: &Location<'static> = Location::caller();
+    const LINE: u32 = CALLER.line();
+    assert_eq!(LINE, 21);
+}
+
+#[test]
+fn location_const_column() {
+    const CALLER: &Location<'static> = Location::caller();
+    const COLUMN: u32 = CALLER.column();
+    assert_eq!(COLUMN, 40);
+}