about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJed Davis <jld@panix.com>2013-04-07 22:35:26 -0700
committerJed Davis <jld@panix.com>2013-04-08 01:03:42 -0700
commite9a52f5af576ffd517284813858b6d06910460ea (patch)
tree6610c4b14fc2a37db27ebebcb2dc3e9c4b6a50cb
parent04b2c26f39782ba30ad8868f971d5d8a606fcf88 (diff)
downloadrust-e9a52f5af576ffd517284813858b6d06910460ea.tar.gz
rust-e9a52f5af576ffd517284813858b6d06910460ea.zip
Make intrinsic::Opaque more opaque
-rw-r--r--src/librustc/front/intrinsic.rs3
-rw-r--r--src/librustc/middle/trans/reflect.rs5
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 {