diff --git a/src/librustc/middle/trans/consts.rs b/src/librustc/middle/trans/consts.rs index e68e463ec347..39fcdf405bc9 100644 --- a/src/librustc/middle/trans/consts.rs +++ b/src/librustc/middle/trans/consts.rs @@ -352,10 +352,8 @@ pub fn const_expr(cx: @crate_ctxt, e: @ast::expr) -> ValueRef { } ast::expr_addr_of(ast::m_imm, sub) => { let cv = const_expr(cx, sub); - let subty = ty::expr_ty(cx.tcx, sub), - llty = type_of::type_of(cx, subty); let gv = do str::as_c_str("const") |name| { - llvm::LLVMAddGlobal(cx.llmod, llty, name) + llvm::LLVMAddGlobal(cx.llmod, val_ty(cv), name) }; llvm::LLVMSetInitializer(gv, cv); llvm::LLVMSetGlobalConstant(gv, True); diff --git a/src/test/run-pass/const-enum-ptr.rs b/src/test/run-pass/const-enum-ptr.rs new file mode 100644 index 000000000000..6ca27fb58b0c --- /dev/null +++ b/src/test/run-pass/const-enum-ptr.rs @@ -0,0 +1,19 @@ +// Copyright 2013 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +enum E { V0, V1(int) } +const C: &static/E = &V0; + +fn main() { + match *C { + V0 => (), + _ => die!() + } +}