about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPaul Stansifer <paul.stansifer@gmail.com>2011-08-01 18:43:46 -0700
committerPaul Stansifer <paul.stansifer@gmail.com>2011-08-01 18:51:56 -0700
commitfcc32797ded7d5ed155ddcdf11904b06e7d0e11a (patch)
treecf7e1e57c5bc25684e452a09a69203060aeed030
parent286be2d94e8904765e1ef0f5fcc2899f8501a654 (diff)
downloadrust-fcc32797ded7d5ed155ddcdf11904b06e7d0e11a.tar.gz
rust-fcc32797ded7d5ed155ddcdf11904b06e7d0e11a.zip
Fix incorrect uses of str::buf()
-rw-r--r--src/comp/middle/trans.rs29
1 files changed, 18 insertions, 11 deletions
diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs
index a7f7d0c220f..db06a6ca6cd 100644
--- a/src/comp/middle/trans.rs
+++ b/src/comp/middle/trans.rs
@@ -5993,9 +5993,11 @@ fn new_block_ctxt(cx: &@fn_ctxt, parent: &block_parent, kind: block_kind,
                   name: &str) -> @block_ctxt {
     let cleanups: cleanup[] = ~[];
     let s = str::buf("");
+    let held_name; //HACK for str::buf, which doesn't keep its value alive
     if cx.lcx.ccx.sess.get_opts().save_temps ||
            cx.lcx.ccx.sess.get_opts().debuginfo {
-        s = str::buf(cx.lcx.ccx.names.next(name));
+        held_name = cx.lcx.ccx.names.next(name);
+        s = str::buf(held_name);
     }
     let llbb: BasicBlockRef = llvm::LLVMAppendBasicBlock(cx.llfn, s);
     ret @{llbb: llbb,
@@ -8001,11 +8003,14 @@ fn make_common_glue(sess: &session::session, output: &str) {
     let llmod =
         llvm::LLVMModuleCreateWithNameInContext(str::buf("rust_out"),
                                                 llvm::LLVMGetGlobalContext());
-    llvm::LLVMSetDataLayout(llmod, str::buf(x86::get_data_layout()));
-    llvm::LLVMSetTarget(llmod, str::buf(x86::get_target_triple()));
+    let dat_layt = x86::get_data_layout(); //HACK (buf lifetime issue)
+    llvm::LLVMSetDataLayout(llmod, str::buf(dat_layt));
+    let targ_trip = x86::get_target_triple(); //HACK (buf lifetime issue)
+    llvm::LLVMSetTarget(llmod, str::buf(targ_trip));
     mk_target_data(x86::get_data_layout());
     declare_intrinsics(llmod);
-    llvm::LLVMSetModuleInlineAsm(llmod, str::buf(x86::get_module_asm()));
+    let modl_asm = x86::get_module_asm(); //HACK (buf lifetime issue)
+    llvm::LLVMSetModuleInlineAsm(llmod, str::buf(modl_asm));
     make_glues(llmod, taskptr_type);
     link::write::run_passes(sess, llmod, output);
 }
@@ -8035,10 +8040,9 @@ fn create_crate_map(ccx: &@crate_ctxt) -> ValueRef {
     let i = 1;
     let cstore = ccx.sess.get_cstore();
     while cstore::have_crate_data(cstore, i) {
-        let name = cstore::get_crate_data(cstore, i).name;
+        let nm = "_rust_crate_map_" + cstore::get_crate_data(cstore, i).name;
         let cr =
-            llvm::LLVMAddGlobal(ccx.llmod, T_int(),
-                                str::buf("_rust_crate_map_" + name));
+            llvm::LLVMAddGlobal(ccx.llmod, T_int(), str::buf(nm));
         subcrates += ~[p2i(cr)];
         i += 1;
     }
@@ -8067,7 +8071,8 @@ fn write_metadata(cx: &@crate_ctxt, crate: &@ast::crate) {
         llvm::LLVMAddGlobal(cx.llmod, val_ty(llconst),
                             str::buf("rust_metadata"));
     llvm::LLVMSetInitializer(llglobal, llconst);
-    llvm::LLVMSetSection(llglobal, str::buf(x86::get_meta_sect_name()));
+    let met_sct_nm = x86::get_meta_sect_name(); //HACK (buf lifetime issue)
+    llvm::LLVMSetSection(llglobal, str::buf(met_sct_nm));
     llvm::LLVMSetLinkage(llglobal,
                          lib::llvm::LLVMInternalLinkage as llvm::Linkage);
 
@@ -8086,9 +8091,11 @@ fn trans_crate(sess: &session::session, crate: &@ast::crate, tcx: &ty::ctxt,
     let llmod =
         llvm::LLVMModuleCreateWithNameInContext(str::buf("rust_out"),
                                                 llvm::LLVMGetGlobalContext());
-    llvm::LLVMSetDataLayout(llmod, str::buf(x86::get_data_layout()));
-    llvm::LLVMSetTarget(llmod, str::buf(x86::get_target_triple()));
-    let td = mk_target_data(x86::get_data_layout());
+    let dat_layt = x86::get_data_layout(); //HACK (buf lifetime issue)
+    llvm::LLVMSetDataLayout(llmod, str::buf(dat_layt));
+    let targ_trip = x86::get_target_triple(); //HACK (buf lifetime issue)
+    llvm::LLVMSetTarget(llmod, str::buf(targ_trip));
+    let td = mk_target_data(dat_layt);
     let tn = mk_type_names();
     let intrinsics = declare_intrinsics(llmod);
     let task_type = T_task();