]> git.lizzy.rs Git - rust.git/commitdiff
use the *adjusted* callee type in effect checking
authorAriel Ben-Yehuda <arielb1@mail.tau.ac.il>
Thu, 1 Oct 2015 13:06:50 +0000 (16:06 +0300)
committerAriel Ben-Yehuda <arielb1@mail.tau.ac.il>
Thu, 1 Oct 2015 13:06:50 +0000 (16:06 +0300)
Fixes #28776

src/librustc/lib.rs
src/librustc/middle/effect.rs
src/test/compile-fail/issue-28776.rs [new file with mode: 0644]

index cfeab976e24cb110d00a1dff96289c8b4f4a82e3..0bbb57afc278e0604e4e658787ef02ee3e7d4dcc 100644 (file)
@@ -105,6 +105,7 @@ pub mod front {
 }
 
 pub mod middle {
+    pub mod expr_use_visitor; // STAGE0: increase glitch immunity
     pub mod astconv_util;
     pub mod astencode;
     pub mod cfg;
@@ -122,7 +123,6 @@ pub mod middle {
     pub mod dependency_format;
     pub mod effect;
     pub mod entry;
-    pub mod expr_use_visitor;
     pub mod free_region;
     pub mod intrinsicck;
     pub mod infer;
index d1e1434dad8ad94da9c95a7e2de1adcdc60e37b6..8a206e3d88e4b5b9c69639519907351aed4c0aa5 100644 (file)
@@ -151,7 +151,7 @@ fn visit_expr(&mut self, expr: &hir::Expr) {
                 }
             }
             hir::ExprCall(ref base, _) => {
-                let base_type = self.tcx.node_id_to_type(base.id);
+                let base_type = self.tcx.expr_ty_adjusted(base);
                 debug!("effect: call case, base type is {:?}",
                         base_type);
                 if type_is_unsafe_function(base_type) {
@@ -159,7 +159,7 @@ fn visit_expr(&mut self, expr: &hir::Expr) {
                 }
             }
             hir::ExprUnary(hir::UnDeref, ref base) => {
-                let base_type = self.tcx.node_id_to_type(base.id);
+                let base_type = self.tcx.expr_ty_adjusted(base);
                 debug!("effect: unary case, base type is {:?}",
                         base_type);
                 if let ty::TyRawPtr(_) = base_type.sty {
diff --git a/src/test/compile-fail/issue-28776.rs b/src/test/compile-fail/issue-28776.rs
new file mode 100644 (file)
index 0000000..ce06c8b
--- /dev/null
@@ -0,0 +1,15 @@
+// Copyright 2015 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 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+use std::ptr;
+
+fn main() {
+    (&ptr::write)(1 as *mut _, 42); //~ ERROR E0133
+}