// except according to those terms.
#include "rustllvm.h"
+#include "llvm/IR/DebugInfoMetadata.h"
#include "llvm/IR/DiagnosticInfo.h"
#include "llvm/IR/DiagnosticPrinter.h"
#include "llvm/IR/Instructions.h"
HasSideEffects, IsAlignStack, fromRust(Dialect)));
}
+extern "C" void LLVMRustAppendModuleInlineAsm(LLVMModuleRef M, const char *Asm) {
+ unwrap(M)->appendModuleInlineAsm(StringRef(Asm));
+}
+
typedef DIBuilder *LLVMRustDIBuilderRef;
typedef struct LLVMOpaqueMetadata *LLVMRustMetadataRef;
}
extern "C" LLVMRustMetadataRef LLVMRustDIBuilderCreateCompileUnit(
- LLVMRustDIBuilderRef Builder, unsigned Lang, const char *File,
- const char *Dir, const char *Producer, bool isOptimized, const char *Flags,
+ LLVMRustDIBuilderRef Builder, unsigned Lang, LLVMRustMetadataRef FileRef,
+ const char *Producer, bool isOptimized, const char *Flags,
unsigned RuntimeVer, const char *SplitName) {
- return wrap(Builder->createCompileUnit(Lang, File, Dir, Producer, isOptimized,
+ auto *File = unwrapDI<DIFile>(FileRef);
+
+#if LLVM_VERSION_GE(4, 0)
+ return wrap(Builder->createCompileUnit(Lang, File, Producer, isOptimized,
Flags, RuntimeVer, SplitName));
+#else
+ return wrap(Builder->createCompileUnit(Lang, File->getFilename(),
+ File->getDirectory(), Producer, isOptimized,
+ Flags, RuntimeVer, SplitName));
+#endif
}
extern "C" LLVMRustMetadataRef
const char *LinkageName, LLVMRustMetadataRef File, unsigned LineNo,
LLVMRustMetadataRef Ty, bool IsLocalToUnit, LLVMValueRef V,
LLVMRustMetadataRef Decl = nullptr, uint32_t AlignInBits = 0) {
- Constant *InitVal = cast<Constant>(unwrap(V));
+ llvm::GlobalVariable *InitVal = cast<llvm::GlobalVariable>(unwrap(V));
#if LLVM_VERSION_GE(4, 0)
llvm::DIExpression *InitExpr = nullptr;
InitExpr = Builder->createConstantValueExpression(
FPVal->getValueAPF().bitcastToAPInt().getZExtValue());
}
-#endif
-#if LLVM_VERSION_GE(4, 0)
- return wrap(Builder->createGlobalVariableExpression(
+ llvm::DIGlobalVariableExpression *VarExpr = Builder->createGlobalVariableExpression(
+ unwrapDI<DIDescriptor>(Context), Name, LinkageName,
+ unwrapDI<DIFile>(File), LineNo, unwrapDI<DIType>(Ty), IsLocalToUnit,
+ InitExpr, unwrapDIPtr<MDNode>(Decl), AlignInBits);
+
+ InitVal->setMetadata("dbg", VarExpr);
+
+ return wrap(VarExpr);
#else
return wrap(Builder->createGlobalVariable(
-#endif
unwrapDI<DIDescriptor>(Context), Name, LinkageName,
unwrapDI<DIFile>(File), LineNo, unwrapDI<DIType>(Ty), IsLocalToUnit,
-#if LLVM_VERSION_GE(4, 0)
- InitExpr,
-#else
- InitVal,
+ InitVal, unwrapDIPtr<MDNode>(Decl)));
#endif
- unwrapDIPtr<MDNode>(Decl)
-#if LLVM_VERSION_GE(4, 0)
- ,
- AlignInBits
-#endif
- ));
}
extern "C" LLVMRustMetadataRef LLVMRustDIBuilderCreateVariable(