diff options
| author | Jed Davis <jld@panix.com> | 2013-04-07 22:35:26 -0700 |
|---|---|---|
| committer | Jed Davis <jld@panix.com> | 2013-04-08 01:03:42 -0700 |
| commit | e9a52f5af576ffd517284813858b6d06910460ea (patch) | |
| tree | 6610c4b14fc2a37db27ebebcb2dc3e9c4b6a50cb | |
| parent | 04b2c26f39782ba30ad8868f971d5d8a606fcf88 (diff) | |
| download | rust-e9a52f5af576ffd517284813858b6d06910460ea.tar.gz rust-e9a52f5af576ffd517284813858b6d06910460ea.zip | |
Make intrinsic::Opaque more opaque
| -rw-r--r-- | src/librustc/front/intrinsic.rs | 3 | ||||
| -rw-r--r-- | src/librustc/middle/trans/reflect.rs | 5 |
2 files changed, 5 insertions, 3 deletions
diff --git a/src/librustc/front/intrinsic.rs b/src/librustc/front/intrinsic.rs index ccb7e3ffd55..dcf300bd31d 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 e64914afd88..596c55a68f8 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 { |
