diff --git a/src/librustc/lib.rs b/src/librustc/lib.rs index cfeab976e24c..0bbb57afc278 100644 --- a/src/librustc/lib.rs +++ b/src/librustc/lib.rs @@ -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; diff --git a/src/librustc/middle/effect.rs b/src/librustc/middle/effect.rs index d1e1434dad8a..8a206e3d88e4 100644 --- a/src/librustc/middle/effect.rs +++ b/src/librustc/middle/effect.rs @@ -151,7 +151,7 @@ impl<'a, 'tcx, 'v> Visitor<'v> for EffectCheckVisitor<'a, 'tcx> { } } 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 @@ impl<'a, 'tcx, 'v> Visitor<'v> for EffectCheckVisitor<'a, 'tcx> { } } 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 index 000000000000..ce06c8bf220e --- /dev/null +++ b/src/test/compile-fail/issue-28776.rs @@ -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 or the MIT license +// , 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 +}