diff --git a/src/interpreter/mod.rs b/src/interpreter/mod.rs index 15fa4cdd3b842..6c0d58f1c47e7 100644 --- a/src/interpreter/mod.rs +++ b/src/interpreter/mod.rs @@ -1189,7 +1189,7 @@ impl<'a, 'b, 'mir, 'tcx> FnEvalContext<'a, 'b, 'mir, 'tcx> { match *literal { Value { ref value } => Ok(self.const_to_ptr(value)?), Item { def_id, substs } => { - if ty.is_fn() { + if let ty::TyFnDef(..) = ty.sty { Err(EvalError::Unimplemented("unimplemented: mentions of function items".to_string())) } else { let cid = ConstantId { diff --git a/src/interpreter/stepper.rs b/src/interpreter/stepper.rs index 587239fdf068d..db7b129eee601 100644 --- a/src/interpreter/stepper.rs +++ b/src/interpreter/stepper.rs @@ -8,7 +8,7 @@ use super::{ }; use error::EvalResult; use rustc::mir::repr as mir; -use rustc::ty::subst; +use rustc::ty::{subst, self}; use rustc::hir::def_id::DefId; use rustc::mir::visit::{Visitor, LvalueContext}; use syntax::codemap::Span; @@ -151,7 +151,7 @@ impl<'a, 'b, 'mir, 'tcx> Visitor<'tcx> for ConstantExtractor<'a, 'b, 'mir, 'tcx> // already computed by rustc mir::Literal::Value { .. } => {} mir::Literal::Item { def_id, substs } => { - if constant.ty.is_fn() { + if let ty::TyFnDef(..) = constant.ty.sty { // No need to do anything here, even if function pointers are implemented, // because the type is the actual function, not the signature of the function. // Thus we can simply create a zero sized allocation in `evaluate_operand`