Skip to content

Commit 2af7978

Browse files
committed
---
yaml --- r: 46707 b: refs/heads/auto c: 514fd3e h: refs/heads/master i: 46705: d692347 46703: 15db339 v: v3
1 parent 273398f commit 2af7978

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,4 @@ refs/heads/try3: 9387340aab40a73e8424c48fd42f0c521a4875c0
1414
refs/tags/release-0.3.1: 495bae036dfe5ec6ceafd3312b4dca48741e845b
1515
refs/tags/release-0.4: e828ea2080499553b97dfe33b3f4d472b4562ad7
1616
refs/tags/release-0.5: 7e3bcfbf21278251ee936ad53e92e9b719702d73
17-
refs/heads/auto: 5f0a123f0d1c8718b015c973b3780bc9353e9159
17+
refs/heads/auto: 514fd3efecccdaf311ee4549c75d948348f6d319

branches/auto/src/librustc/middle/trans/consts.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ use middle::trans::expr;
2020
use middle::trans::machine;
2121
use middle::trans::type_of;
2222
use middle::ty;
23+
use util::ppaux::{expr_repr, ty_to_str};
2324

2425
use core::libc::c_uint;
2526
use syntax::{ast, ast_util, codemap, ast_map};
@@ -150,6 +151,24 @@ pub fn get_const_val(cx: @CrateContext, def_id: ast::def_id) -> ValueRef {
150151
}
151152

152153
pub fn const_expr(cx: @CrateContext, e: @ast::expr) -> ValueRef {
154+
let ety = ty::expr_ty_adjusted(cx.tcx, e);
155+
let llty = type_of::sizing_type_of(cx, ety);
156+
let llconst = const_expr_unchecked(cx, e);
157+
let csize = machine::llsize_of_alloc(cx, val_ty(llconst));
158+
let tsize = machine::llsize_of_alloc(cx, llty);
159+
if csize != tsize {
160+
unsafe {
161+
llvm::LLVMDumpValue(llconst);
162+
llvm::LLVMDumpValue(C_null(llty));
163+
}
164+
cx.sess.bug(fmt!("const %s of type %s has size %u instead of %u",
165+
expr_repr(cx.tcx, e), ty_to_str(cx.tcx, ety),
166+
csize, tsize));
167+
}
168+
llconst
169+
}
170+
171+
fn const_expr_unchecked(cx: @CrateContext, e: @ast::expr) -> ValueRef {
153172
unsafe {
154173
let _icx = cx.insn_ctxt("const_expr");
155174
return match /*bad*/copy e.node {

0 commit comments

Comments
 (0)