Index: bindings/go/llvm/DIBuilderBindings.h =================================================================== --- bindings/go/llvm/DIBuilderBindings.h +++ bindings/go/llvm/DIBuilderBindings.h @@ -57,10 +57,16 @@ LLVMMetadataRef CompositeType, int IsLocalToUnit, int IsDefinition, unsigned ScopeLine, unsigned Flags, int IsOptimized, LLVMValueRef Function); -LLVMMetadataRef LLVMDIBuilderCreateLocalVariable( - LLVMDIBuilderRef D, unsigned Tag, LLVMMetadataRef Scope, const char *Name, +LLVMMetadataRef +LLVMDIBuilderCreateAutoVariable(LLVMDIBuilderRef D, LLVMMetadataRef Scope, + const char *Name, LLVMMetadataRef File, + unsigned Line, LLVMMetadataRef Ty, + int AlwaysPreserve, unsigned Flags); + +LLVMMetadataRef LLVMDIBuilderCreateParameterVariable( + LLVMDIBuilderRef D, LLVMMetadataRef Scope, const char *Name, unsigned ArgNo, LLVMMetadataRef File, unsigned Line, LLVMMetadataRef Ty, int AlwaysPreserve, - unsigned Flags, unsigned ArgNo); + unsigned Flags); LLVMMetadataRef LLVMDIBuilderCreateBasicType(LLVMDIBuilderRef D, const char *Name, Index: bindings/go/llvm/DIBuilderBindings.cpp =================================================================== --- bindings/go/llvm/DIBuilderBindings.cpp +++ bindings/go/llvm/DIBuilderBindings.cpp @@ -83,21 +83,27 @@ IsOptimized, unwrap(Func))); } -LLVMMetadataRef LLVMDIBuilderCreateLocalVariable( - LLVMDIBuilderRef Dref, unsigned, LLVMMetadataRef Scope, - const char *Name, LLVMMetadataRef File, unsigned Line, LLVMMetadataRef Ty, - int AlwaysPreserve, unsigned Flags, unsigned ArgNo) { - DIBuilder *D = unwrap(Dref); - // FIXME: Update the Go bindings to match the DIBuilder API. - if (ArgNo) - return wrap(D->createParameterVariable( - unwrap(Scope), Name, ArgNo, unwrap(File), Line, - unwrap(Ty), AlwaysPreserve, Flags)); +LLVMMetadataRef +LLVMDIBuilderCreateAutoVariable(LLVMDIBuilderRef Dref, LLVMMetadataRef Scope, + const char *Name, LLVMMetadataRef File, + unsigned Line, LLVMMetadataRef Ty, + int AlwaysPreserve, unsigned Flags) { + DIBuilder *D = unwrap(Dref); return wrap(D->createAutoVariable(unwrap(Scope), Name, unwrap(File), Line, unwrap(Ty), AlwaysPreserve, Flags)); } +LLVMMetadataRef LLVMDIBuilderCreateParameterVariable( + LLVMDIBuilderRef Dref, LLVMMetadataRef Scope, const char *Name, + unsigned ArgNo, LLVMMetadataRef File, unsigned Line, LLVMMetadataRef Ty, + int AlwaysPreserve, unsigned Flags) { + DIBuilder *D = unwrap(Dref); + return wrap(D->createParameterVariable( + unwrap(Scope), Name, ArgNo, unwrap(File), Line, + unwrap(Ty), AlwaysPreserve, Flags)); +} + LLVMMetadataRef LLVMDIBuilderCreateBasicType(LLVMDIBuilderRef Dref, const char *Name, uint64_t SizeInBits, Index: bindings/go/llvm/dibuilder.go =================================================================== --- bindings/go/llvm/dibuilder.go +++ bindings/go/llvm/dibuilder.go @@ -216,9 +216,35 @@ return Metadata{C: result} } -// DILocalVariable holds the values for creating local variable debug metadata. -type DILocalVariable struct { - Tag dwarf.Tag +// DIAutoVariable holds the values for creating auto variable debug metadata. +type DIAutoVariable struct { + Name string + File Metadata + Line int + Type Metadata + AlwaysPreserve bool + Flags int +} + +// CreateAutoVariable creates local variable debug metadata. +func (d *DIBuilder) CreateAutoVariable(scope Metadata, v DIAutoVariable) Metadata { + name := C.CString(v.Name) + defer C.free(unsafe.Pointer(name)) + result := C.LLVMDIBuilderCreateAutoVariable( + d.ref, + scope.C, + name, + v.File.C, + C.unsigned(v.Line), + v.Type.C, + boolToCInt(v.AlwaysPreserve), + C.unsigned(v.Flags), + ) + return Metadata{C: result} +} + +// DIParameterVariable holds the values for creating parameter variable debug metadata. +type DIParameterVariable struct { Name string File Metadata Line int @@ -227,25 +253,24 @@ Flags int // ArgNo is the 1-based index of the argument in the function's - // parameter list if it is an argument, or 0 otherwise. + // parameter list. ArgNo int } -// CreateLocalVariable creates local variable debug metadata. -func (d *DIBuilder) CreateLocalVariable(scope Metadata, v DILocalVariable) Metadata { +// CreateParameterVariable creates parameter variable debug metadata. +func (d *DIBuilder) CreateParameterVariable(scope Metadata, v DIParameterVariable) Metadata { name := C.CString(v.Name) defer C.free(unsafe.Pointer(name)) - result := C.LLVMDIBuilderCreateLocalVariable( + result := C.LLVMDIBuilderCreateParameterVariable( d.ref, - C.unsigned(v.Tag), scope.C, name, + C.unsigned(v.ArgNo), v.File.C, C.unsigned(v.Line), v.Type.C, boolToCInt(v.AlwaysPreserve), C.unsigned(v.Flags), - C.unsigned(v.ArgNo), ) return Metadata{C: result} }