From c71dc77dac5c8d477fc7df86607f98f2ee784f0f Mon Sep 17 00:00:00 2001 From: Erick Tryzelaar Date: Fri, 28 Sep 2012 23:03:29 -0700 Subject: [PATCH] rustc: uniquely mangle expr_fn names two closures in the same function body can end up having the same mangled name. This small patch uses gensym to uniquely name each closure body so there won't be conflicts. --- src/rustc/middle/trans/closure.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rustc/middle/trans/closure.rs b/src/rustc/middle/trans/closure.rs index 95c98126966..1ab25a18329 100644 --- a/src/rustc/middle/trans/closure.rs +++ b/src/rustc/middle/trans/closure.rs @@ -363,7 +363,7 @@ fn trans_expr_fn(bcx: block, let llfnty = type_of_fn_from_ty(ccx, fty); let sub_path = vec::append_one(bcx.fcx.path, path_name(special_idents::anon)); - let s = mangle_internal_name_by_path(ccx, sub_path); + let s = mangle_internal_name_by_path_and_seq(ccx, sub_path, ~"expr_fn"); let llfn = decl_internal_cdecl_fn(ccx.llmod, s, llfnty); let trans_closure_env = fn@(ck: ty::closure_kind) -> Result {