diff --git a/src/librustc/front/intrinsic.rs b/src/librustc/front/intrinsic.rs index ccb7e3ffd55fc..dcf300bd31da6 100644 --- a/src/librustc/front/intrinsic.rs +++ b/src/librustc/front/intrinsic.rs @@ -28,8 +28,7 @@ pub mod intrinsic { // Remaining fields not listed } - // FIXME: make this a 0-variant enum; trans/reflect.rs has to match it. - pub type Opaque = (); + pub enum Opaque { } pub trait TyVisitor { fn visit_bot(&self) -> bool; diff --git a/src/librustc/middle/trans/reflect.rs b/src/librustc/middle/trans/reflect.rs index e64914afd88cc..596c55a68f872 100644 --- a/src/librustc/middle/trans/reflect.rs +++ b/src/librustc/middle/trans/reflect.rs @@ -274,12 +274,15 @@ pub impl Reflector { let repr = adt::represent_type(bcx.ccx(), t); let variants = ty::substd_enum_variants(ccx.tcx, did, substs); let llptrty = T_ptr(type_of(ccx, t)); + let (_, opaquety) = *(ccx.tcx.intrinsic_defs.find(&ccx.sess.ident_of(~"Opaque")) + .expect("Failed to resolve intrinsic::Opaque")); + let opaqueptrty = ty::mk_ptr(ccx.tcx, ty::mt { ty: opaquety, mutbl: ast::m_imm }); let make_get_disr = || { let sub_path = bcx.fcx.path + ~[path_name(special_idents::anon)]; let sym = mangle_internal_name_by_path_and_seq(ccx, sub_path, ~"get_disr"); let args = [ty::arg { mode: ast::expl(ast::by_copy), - ty: ty::mk_nil_ptr(ccx.tcx) }]; + ty: opaqueptrty }]; let llfty = type_of_fn(ccx, args, ty::mk_int(ccx.tcx)); let llfdecl = decl_internal_cdecl_fn(ccx.llmod, sym, llfty); let arg = unsafe {