From b81ea86530dfd9dff69815b099ba10be274830ea Mon Sep 17 00:00:00 2001 From: Michael Woerister Date: Fri, 23 Aug 2013 18:45:02 +0200 Subject: debuginfo: Support for variables captured in closures and closure type descriptions. --- src/rustllvm/RustWrapper.cpp | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'src/rustllvm/RustWrapper.cpp') diff --git a/src/rustllvm/RustWrapper.cpp b/src/rustllvm/RustWrapper.cpp index 54af6fe7e73..376adf24e25 100644 --- a/src/rustllvm/RustWrapper.cpp +++ b/src/rustllvm/RustWrapper.cpp @@ -724,3 +724,39 @@ extern "C" LLVMValueRef LLVMDIBuilderCreateTemplateTypeParameter( LineNo, ColumnNo)); } + +extern "C" LLVMValueRef LLVMDIBuilderCreateOpDeref(LLVMTypeRef IntTy) +{ + return LLVMConstInt(IntTy, DIBuilder::OpDeref, true); +} + +extern "C" LLVMValueRef LLVMDIBuilderCreateOpPlus(LLVMTypeRef IntTy) +{ + return LLVMConstInt(IntTy, DIBuilder::OpPlus, true); +} + +extern "C" LLVMValueRef LLVMDIBuilderCreateComplexVariable( + DIBuilderRef Builder, + unsigned Tag, + LLVMValueRef Scope, + const char *Name, + LLVMValueRef File, + unsigned LineNo, + LLVMValueRef Ty, + LLVMValueRef* AddrOps, + unsigned AddrOpsCount, + unsigned ArgNo) +{ + llvm::ArrayRef addr_ops((llvm::Value**)AddrOps, AddrOpsCount); + + return wrap(Builder->createComplexVariable( + Tag, + unwrapDI(Scope), + Name, + unwrapDI(File), + LineNo, + unwrapDI(Ty), + addr_ops, + ArgNo + )); +} -- cgit 1.4.1-3-g733a5