]> git.lizzy.rs Git - rust.git/commitdiff
Auto merge of #35174 - arielb1:llvm-type-audit, r=eddyb
authorbors <bors@rust-lang.org>
Wed, 3 Aug 2016 14:52:08 +0000 (07:52 -0700)
committerGitHub <noreply@github.com>
Wed, 3 Aug 2016 14:52:08 +0000 (07:52 -0700)
Audit C++ types in rustllvm

cc @eddyb

Fixes #35131

1  2 
src/librustc_trans/base.rs
src/librustc_trans/debuginfo/mod.rs

index 6d9ae4deb718e2bdbc413582a9ebca19bebd58f4,7fb19fefee2d1a2e9454e61b8d01973bbd950c35..1077cb296c1ac307e2e5a07535ed1eaf11166825
@@@ -1918,9 -1918,9 +1918,9 @@@ pub fn trans_closure<'a, 'tcx>(ccx: &Cr
  }
  
  pub fn trans_instance<'a, 'tcx>(ccx: &CrateContext<'a, 'tcx>, instance: Instance<'tcx>) {
 -    let instance = inline::maybe_inline_instance(ccx, instance);
 +    let local_instance = inline::maybe_inline_instance(ccx, instance);
  
 -    let fn_node_id = ccx.tcx().map.as_local_node_id(instance.def).unwrap();
 +    let fn_node_id = ccx.tcx().map.as_local_node_id(local_instance.def).unwrap();
  
      let _s = StatRecorder::new(ccx, ccx.tcx().node_path_str(fn_node_id));
      debug!("trans_instance(instance={:?})", instance);
      let sig = ccx.tcx().normalize_associated_type(&sig);
      let abi = fn_ty.fn_abi();
  
 -    let lldecl = match ccx.instances().borrow().get(&instance) {
 +    let lldecl = match ccx.instances().borrow().get(&local_instance) {
          Some(&val) => val,
          None => bug!("Instance `{:?}` not already declared", instance)
      };
@@@ -2347,8 -2347,9 +2347,9 @@@ fn internalize_symbols<'a, 'tcx>(sess: 
                      let has_fixed_linkage = linkage_fixed_explicitly.contains(&name_cow);
  
                      if !is_referenced_somewhere && !is_reachable && !has_fixed_linkage {
-                         llvm::SetLinkage(val, llvm::InternalLinkage);
-                         llvm::SetDLLStorageClass(val, llvm::DefaultStorageClass);
+                         llvm::LLVMSetLinkage(val, llvm::InternalLinkage);
+                         llvm::LLVMSetDLLStorageClass(val,
+                                                      llvm::DLLStorageClass::Default);
                          llvm::UnsetComdat(val);
                      }
                  }
@@@ -2393,7 -2394,7 +2394,7 @@@ fn create_imps(cx: &CrateContextList) 
                                                imp_name.as_ptr() as *const _);
                  let init = llvm::LLVMConstBitCast(val, i8p_ty.to_ref());
                  llvm::LLVMSetInitializer(imp, init);
-                 llvm::SetLinkage(imp, llvm::ExternalLinkage);
+                 llvm::LLVMSetLinkage(imp, llvm::ExternalLinkage);
              }
          }
      }
index 918935988a92f8a2a93aebe92226cba1c8feeb74,915999f07a1dee9c4966e9ab97b0006d95f416ea..464c32c3cc725b78992f1bc7ca1844fd6808b01c
@@@ -32,7 -32,6 +32,7 @@@ use rustc::hir
  
  use abi::Abi;
  use common::{NodeIdAndSpan, CrateContext, FunctionContext, Block, BlockAndBuilder};
 +use inline;
  use monomorphize::{self, Instance};
  use rustc::ty::{self, Ty};
  use session::config::{self, FullDebugInfo, LimitedDebugInfo, NoDebugInfo};
@@@ -89,7 -88,7 +89,7 @@@ pub struct CrateDebugContext<'tcx> 
  impl<'tcx> CrateDebugContext<'tcx> {
      pub fn new(llmod: ModuleRef) -> CrateDebugContext<'tcx> {
          debug!("CrateDebugContext::new");
-         let builder = unsafe { llvm::LLVMDIBuilderCreate(llmod) };
+         let builder = unsafe { llvm::LLVMRustDIBuilderCreate(llmod) };
          // DIBuilder inherits context from the module, so we'd better use the same one
          let llcontext = unsafe { llvm::LLVMGetModuleContext(llmod) };
          return CrateDebugContext {
@@@ -179,8 -178,8 +179,8 @@@ pub fn finalize(cx: &CrateContext) 
      }
  
      unsafe {
-         llvm::LLVMDIBuilderFinalize(DIB(cx));
-         llvm::LLVMDIBuilderDispose(DIB(cx));
+         llvm::LLVMRustDIBuilderFinalize(DIB(cx));
+         llvm::LLVMRustDIBuilderDispose(DIB(cx));
          // Debuginfo generation in LLVM by default uses a higher
          // version of dwarf than OS X currently understands. We can
          // instruct LLVM to emit an older version of dwarf, however,
@@@ -239,7 -238,6 +239,7 @@@ pub fn create_function_debug_context<'a
      // Do this here already, in case we do an early exit from this function.
      source_loc::set_debug_location(cx, None, UnknownLocation);
  
 +    let instance = inline::maybe_inline_instance(cx, instance);
      let (containing_scope, span) = get_containing_scope_and_span(cx, instance);
  
      // This can be the case for functions inlined from another crate
  
      let function_type_metadata = unsafe {
          let fn_signature = get_function_signature(cx, sig, abi);
-         llvm::LLVMDIBuilderCreateSubroutineType(DIB(cx), file_metadata, fn_signature)
+         llvm::LLVMRustDIBuilderCreateSubroutineType(DIB(cx), file_metadata, fn_signature)
      };
  
      // Find the enclosing function, in case this is a closure.
      let linkage_name = CString::new(linkage_name).unwrap();
  
      let fn_metadata = unsafe {
-         llvm::LLVMDIBuilderCreateFunction(
+         llvm::LLVMRustDIBuilderCreateFunction(
              DIB(cx),
              containing_scope,
              function_name.as_ptr(),
                  let actual_type_metadata = type_metadata(cx, actual_type, syntax_pos::DUMMY_SP);
                  let name = CString::new(param.name.as_str().as_bytes()).unwrap();
                  unsafe {
-                     llvm::LLVMDIBuilderCreateTemplateTypeParameter(
+                     llvm::LLVMRustDIBuilderCreateTemplateTypeParameter(
                          DIB(cx),
                          ptr::null_mut(),
                          name.as_ptr(),
@@@ -494,7 -492,7 +494,7 @@@ pub fn declare_local<'blk, 'tcx>(bcx: B
          (DirectVariable { alloca }, address_operations) |
          (IndirectVariable {alloca, address_operations}, _) => {
              let metadata = unsafe {
-                 llvm::LLVMDIBuilderCreateVariable(
+                 llvm::LLVMRustDIBuilderCreateVariable(
                      DIB(cx),
                      dwarf_tag,
                      scope_metadata,
                  InternalDebugLocation::new(scope_metadata, loc.line, loc.col.to_usize()));
              unsafe {
                  let debug_loc = llvm::LLVMGetCurrentDebugLocation(cx.raw_builder());
-                 let instr = llvm::LLVMDIBuilderInsertDeclareAtEnd(
+                 let instr = llvm::LLVMRustDIBuilderInsertDeclareAtEnd(
                      DIB(cx),
                      alloca,
                      metadata,