about summary refs log tree commit diff
diff options
context:
space:
mode:
authorcsmoe <csmoe@msn.com>2021-06-01 22:05:04 +0800
committercsmoe <csmoe@msn.com>2021-06-02 10:19:57 +0800
commit521d9ab59a211030c71cc55399fc61882adbb0d6 (patch)
tree6c8c4cf85421967bbc121187feda8154fb2a972b
parent92839563506163bc1bfb9d137782649c8b527bb1 (diff)
downloadrust-521d9ab59a211030c71cc55399fc61882adbb0d6.tar.gz
rust-521d9ab59a211030c71cc55399fc61882adbb0d6.zip
convert Rvalue::threadlocalref assertion to delay bug
-rw-r--r--compiler/rustc_mir/src/transform/check_consts/validation.rs13
-rw-r--r--src/test/ui/thread-local-static.rs2
-rw-r--r--src/test/ui/thread-local-static.stderr13
3 files changed, 11 insertions, 17 deletions
diff --git a/compiler/rustc_mir/src/transform/check_consts/validation.rs b/compiler/rustc_mir/src/transform/check_consts/validation.rs
index 9538d2fdd4d..0ec022ccf82 100644
--- a/compiler/rustc_mir/src/transform/check_consts/validation.rs
+++ b/compiler/rustc_mir/src/transform/check_consts/validation.rs
@@ -356,10 +356,9 @@ impl Validator<'mir, 'tcx> {
     }
 
     fn check_static(&mut self, def_id: DefId, span: Span) {
-        assert!(
-            !self.tcx.is_thread_local_static(def_id),
-            "tls access is checked in `Rvalue::ThreadLocalRef"
-        );
+        if self.tcx.is_thread_local_static(def_id) {
+            self.tcx.sess.delay_span_bug(span, "tls access is checked in `Rvalue::ThreadLocalRef");
+        }
         self.check_op_spanned(ops::StaticAccess, span)
     }
 
@@ -732,11 +731,7 @@ impl Visitor<'tcx> for Validator<'mir, 'tcx> {
                     if proj_base.is_empty() {
                         if let (local, []) = (place_local, proj_base) {
                             let decl = &self.body.local_decls[local];
-                            if let Some(box LocalInfo::StaticRef {
-                                def_id,
-                                is_thread_local: false,
-                            }) = decl.local_info
-                            {
+                            if let Some(box LocalInfo::StaticRef { def_id, .. }) = decl.local_info {
                                 let span = decl.source_info.span;
                                 self.check_static(def_id, span);
                                 return;
diff --git a/src/test/ui/thread-local-static.rs b/src/test/ui/thread-local-static.rs
index 7f4ead36cd0..c7fee9e6b4c 100644
--- a/src/test/ui/thread-local-static.rs
+++ b/src/test/ui/thread-local-static.rs
@@ -8,9 +8,9 @@ const fn g(x: &mut [u32; 8]) {
     //~^ ERROR mutable references are not allowed
     std::mem::swap(x, &mut STATIC_VAR_2)
     //~^ ERROR thread-local statics cannot be accessed
-    //~| ERROR dereferencing raw pointers in constant
     //~| ERROR mutable references are not allowed
     //~| ERROR use of mutable static is unsafe
+    //~| constant functions cannot refer to statics
 }
 
 fn main() {}
diff --git a/src/test/ui/thread-local-static.stderr b/src/test/ui/thread-local-static.stderr
index ed461fcb7e2..08bf593a5a7 100644
--- a/src/test/ui/thread-local-static.stderr
+++ b/src/test/ui/thread-local-static.stderr
@@ -13,14 +13,13 @@ error[E0625]: thread-local statics cannot be accessed at compile-time
 LL |     std::mem::swap(x, &mut STATIC_VAR_2)
    |                            ^^^^^^^^^^^^
 
-error[E0658]: dereferencing raw pointers in constant functions is unstable
-  --> $DIR/thread-local-static.rs:9:23
+error[E0013]: constant functions cannot refer to statics
+  --> $DIR/thread-local-static.rs:9:28
    |
 LL |     std::mem::swap(x, &mut STATIC_VAR_2)
-   |                       ^^^^^^^^^^^^^^^^^
+   |                            ^^^^^^^^^^^^
    |
-   = note: see issue #51911 <https://github.com/rust-lang/rust/issues/51911> for more information
-   = help: add `#![feature(const_raw_ptr_deref)]` to the crate attributes to enable
+   = help: consider extracting the value of the `static` to a `const`, and referring to that
 
 error[E0658]: mutable references are not allowed in constant functions
   --> $DIR/thread-local-static.rs:9:23
@@ -41,5 +40,5 @@ LL |     std::mem::swap(x, &mut STATIC_VAR_2)
 
 error: aborting due to 5 previous errors
 
-Some errors have detailed explanations: E0133, E0658.
-For more information about an error, try `rustc --explain E0133`.
+Some errors have detailed explanations: E0013, E0133, E0658.
+For more information about an error, try `rustc --explain E0013`.