99// except according to those terms.
1010
1111#include " rustllvm.h"
12+ #include " llvm/IR/DebugInfoMetadata.h"
1213#include " llvm/IR/DiagnosticInfo.h"
1314#include " llvm/IR/DiagnosticPrinter.h"
1415#include " llvm/IR/Instructions.h"
@@ -594,7 +595,7 @@ extern "C" LLVMRustMetadataRef LLVMRustDIBuilderCreateStaticVariable(
594595 const char *LinkageName, LLVMRustMetadataRef File, unsigned LineNo,
595596 LLVMRustMetadataRef Ty, bool IsLocalToUnit, LLVMValueRef V,
596597 LLVMRustMetadataRef Decl = nullptr , uint32_t AlignInBits = 0 ) {
597- Constant *InitVal = cast<Constant >(unwrap (V));
598+ llvm::GlobalVariable *InitVal = cast<llvm::GlobalVariable >(unwrap (V));
598599
599600#if LLVM_VERSION_GE(4, 0)
600601 llvm::DIExpression *InitExpr = nullptr ;
@@ -606,26 +607,21 @@ extern "C" LLVMRustMetadataRef LLVMRustDIBuilderCreateStaticVariable(
606607 InitExpr = Builder->createConstantValueExpression (
607608 FPVal->getValueAPF ().bitcastToAPInt ().getZExtValue ());
608609 }
609- #endif
610610
611- #if LLVM_VERSION_GE(4, 0)
612- return wrap (Builder->createGlobalVariableExpression (
611+ llvm::DIGlobalVariableExpression *VarExpr = Builder->createGlobalVariableExpression (
612+ unwrapDI<DIDescriptor>(Context), Name, LinkageName,
613+ unwrapDI<DIFile>(File), LineNo, unwrapDI<DIType>(Ty), IsLocalToUnit,
614+ InitExpr, unwrapDIPtr<MDNode>(Decl), AlignInBits);
615+
616+ InitVal->setMetadata (" dbg" , VarExpr);
617+
618+ return wrap (VarExpr);
613619#else
614620 return wrap (Builder->createGlobalVariable (
615- #endif
616621 unwrapDI<DIDescriptor>(Context), Name, LinkageName,
617622 unwrapDI<DIFile>(File), LineNo, unwrapDI<DIType>(Ty), IsLocalToUnit,
618- #if LLVM_VERSION_GE(4, 0)
619- InitExpr,
620- #else
621- InitVal,
622- #endif
623- unwrapDIPtr<MDNode>(Decl)
624- #if LLVM_VERSION_GE(4, 0)
625- ,
626- AlignInBits
623+ InitVal, unwrapDIPtr<MDNode>(Decl)));
627624#endif
628- ));
629625}
630626
631627extern " C" LLVMRustMetadataRef LLVMRustDIBuilderCreateVariable (
0 commit comments