parent
05d8767289
commit
7fb8208758
@ -71,8 +71,10 @@ pub fn simplify_type(tcx: &ty::ctxt,
|
||||
}
|
||||
ty::TyBox(_) => {
|
||||
// treat like we would treat `Box`
|
||||
let def_id = tcx.lang_items.owned_box().unwrap();
|
||||
Some(StructSimplifiedType(def_id))
|
||||
match tcx.lang_items.require_owned_box() {
|
||||
Ok(def_id) => Some(StructSimplifiedType(def_id)),
|
||||
Err(msg) => tcx.sess.fatal(&msg),
|
||||
}
|
||||
}
|
||||
ty::TyClosure(def_id, _) => {
|
||||
Some(ClosureSimplifiedType(def_id))
|
||||
|
@ -90,6 +90,10 @@ impl LanguageItems {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn require_owned_box(&self) -> Result<ast::DefId, String> {
|
||||
self.require(OwnedBoxLangItem)
|
||||
}
|
||||
|
||||
pub fn from_builtin_kind(&self, bound: ty::BuiltinBound)
|
||||
-> Result<ast::DefId, String>
|
||||
{
|
||||
|
@ -77,7 +77,10 @@ impl<'cx, 'tcx> OrphanChecker<'cx, 'tcx> {
|
||||
self.check_def_id(item, data.principal_def_id());
|
||||
}
|
||||
ty::TyBox(..) => {
|
||||
self.check_def_id(item, self.tcx.lang_items.owned_box().unwrap());
|
||||
match self.tcx.lang_items.require_owned_box() {
|
||||
Ok(trait_id) => self.check_def_id(item, trait_id),
|
||||
Err(msg) => self.tcx.sess.span_fatal(item.span, &msg),
|
||||
}
|
||||
}
|
||||
ty::TyChar => {
|
||||
self.check_primitive_impl(def_id,
|
||||
|
26
src/test/compile-fail/no_owned_box_lang_item.rs
Normal file
26
src/test/compile-fail/no_owned_box_lang_item.rs
Normal file
@ -0,0 +1,26 @@
|
||||
// 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.
|
||||
|
||||
// Test that we don't ICE when we are missing the owned_box lang item.
|
||||
|
||||
// error-pattern: requires `owned_box` lang_item
|
||||
|
||||
#![no_std]
|
||||
#![feature(lang_items, no_std, box_syntax)]
|
||||
|
||||
extern crate core;
|
||||
|
||||
fn main() {
|
||||
let x = box 1i32;
|
||||
}
|
||||
|
||||
#[lang = "stack_exhausted"] extern fn stack_exhausted() {}
|
||||
#[lang = "eh_personality"] extern fn eh_personality() {}
|
||||
#[lang = "panic_fmt"] fn panic_fmt() -> ! { loop {} }
|
Loading…
x
Reference in New Issue
Block a user