1
Fork 0

make sure globals that yield function pointers aren't treated like functions

This commit is contained in:
Oliver Schneider 2016-06-09 11:27:02 +02:00
parent 225a6a272d
commit 040a501a68
No known key found for this signature in database
GPG key ID: 56D6EEA0FC67AC46
2 changed files with 3 additions and 3 deletions

View file

@ -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 {

View file

@ -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`