diff options
| author | 2019-01-27 16:42:12 +0000 | |
|---|---|---|
| committer | 2019-01-27 16:42:12 +0000 | |
| commit | b773203fb58f3ef282fb69c832d8710cab5bc82d (patch) | |
| tree | e75913f147570fbd75169647b144df85b88a038c /gnu/llvm/tools/llvm-c-test/debuginfo.c | |
| parent | tweak errno in previous (diff) | |
| download | wireguard-openbsd-b773203fb58f3ef282fb69c832d8710cab5bc82d.tar.xz wireguard-openbsd-b773203fb58f3ef282fb69c832d8710cab5bc82d.zip | |
Import LLVM 7.0.1 release including clang, lld and lldb.
Diffstat (limited to 'gnu/llvm/tools/llvm-c-test/debuginfo.c')
| -rw-r--r-- | gnu/llvm/tools/llvm-c-test/debuginfo.c | 161 |
1 files changed, 155 insertions, 6 deletions
diff --git a/gnu/llvm/tools/llvm-c-test/debuginfo.c b/gnu/llvm/tools/llvm-c-test/debuginfo.c index c88c74167b6..74d215ea818 100644 --- a/gnu/llvm/tools/llvm-c-test/debuginfo.c +++ b/gnu/llvm/tools/llvm-c-test/debuginfo.c @@ -11,19 +11,168 @@ |* *| \*===----------------------------------------------------------------------===*/ +#include "llvm-c-test.h" +#include "llvm-c/Core.h" #include "llvm-c/DebugInfo.h" #include <stdio.h> +#include <string.h> + +static LLVMMetadataRef +declare_objc_class(LLVMDIBuilderRef DIB, LLVMMetadataRef File) { + LLVMMetadataRef Decl = LLVMDIBuilderCreateStructType(DIB, File, "TestClass", 9, File, 42, 64, 0, LLVMDIFlagObjcClassComplete, NULL, NULL, 0, 0, NULL, NULL, 0); + LLVMMetadataRef SuperDecl = LLVMDIBuilderCreateStructType(DIB, File, "TestSuperClass", 14, File, 42, 64, 0, LLVMDIFlagObjcClassComplete, NULL, NULL, 0, 0, NULL, NULL, 0); + LLVMDIBuilderCreateInheritance(DIB, Decl, SuperDecl, 0, 0, 0); + LLVMMetadataRef TestProperty = + LLVMDIBuilderCreateObjCProperty(DIB, "test", 4, File, 42, "getTest", 7, "setTest", 7, 0x20 /*copy*/ | 0x40 /*nonatomic*/, SuperDecl); + LLVMDIBuilderCreateObjCIVar(DIB, "_test", 5, File, 42, 64, 0, 64, LLVMDIFlagPublic, SuperDecl, TestProperty); + return Decl; +} int llvm_test_dibuilder(void) { - LLVMModuleRef M = LLVMModuleCreateWithName("debuginfo.c"); + const char *Filename = "debuginfo.c"; + LLVMModuleRef M = LLVMModuleCreateWithName(Filename); LLVMDIBuilderRef DIB = LLVMCreateDIBuilder(M); - LLVMMetadataRef File = LLVMDIBuilderCreateFile(DIB, "debuginfo.c", 12, - ".", 1); + LLVMMetadataRef File = LLVMDIBuilderCreateFile(DIB, Filename, + strlen(Filename), ".", 1); + + LLVMMetadataRef CompileUnit = LLVMDIBuilderCreateCompileUnit(DIB, + LLVMDWARFSourceLanguageC, File, "llvm-c-test", 11, 0, NULL, 0, 0, + NULL, 0, LLVMDWARFEmissionFull, 0, 0, 0); + + LLVMMetadataRef Module = + LLVMDIBuilderCreateModule(DIB, CompileUnit, + "llvm-c-test", 11, + "", 0, + "/test/include/llvm-c-test.h", 27, + "", 0); + + LLVMMetadataRef OtherModule = + LLVMDIBuilderCreateModule(DIB, CompileUnit, + "llvm-c-test-import", 18, + "", 0, + "/test/include/llvm-c-test-import.h", 34, + "", 0); + LLVMMetadataRef ImportedModule = + LLVMDIBuilderCreateImportedModuleFromModule(DIB, Module, OtherModule, + File, 42); + LLVMDIBuilderCreateImportedModuleFromAlias(DIB, Module, ImportedModule, + File, 42); + + LLVMMetadataRef ClassTy = declare_objc_class(DIB, File); + LLVMMetadataRef GlobalClassValueExpr = + LLVMDIBuilderCreateConstantValueExpression(DIB, 0); + LLVMDIBuilderCreateGlobalVariableExpression(DIB, Module, "globalClass", 11, + "", 0, File, 1, ClassTy, + true, GlobalClassValueExpr, + NULL, 0); + + LLVMMetadataRef Int64Ty = + LLVMDIBuilderCreateBasicType(DIB, "Int64", 5, 64, 0); + LLVMMetadataRef Int64TypeDef = + LLVMDIBuilderCreateTypedef(DIB, Int64Ty, "int64_t", 7, File, 42, File); + + LLVMMetadataRef GlobalVarValueExpr = + LLVMDIBuilderCreateConstantValueExpression(DIB, 0); + LLVMDIBuilderCreateGlobalVariableExpression(DIB, Module, "global", 6, + "", 0, File, 1, Int64TypeDef, + true, GlobalVarValueExpr, + NULL, 0); + + LLVMMetadataRef NameSpace = + LLVMDIBuilderCreateNameSpace(DIB, Module, "NameSpace", 9, false); + + LLVMMetadataRef StructDbgElts[] = {Int64Ty, Int64Ty, Int64Ty}; + LLVMMetadataRef StructDbgTy = + LLVMDIBuilderCreateStructType(DIB, NameSpace, "MyStruct", + 8, File, 0, 192, 0, 0, NULL, StructDbgElts, 3, + LLVMDWARFSourceLanguageC, NULL, "MyStruct", 8); + + LLVMMetadataRef StructDbgPtrTy = + LLVMDIBuilderCreatePointerType(DIB, StructDbgTy, 192, 0, 0, "", 0); + + LLVMAddNamedMetadataOperand(M, "FooType", + LLVMMetadataAsValue(LLVMGetModuleContext(M), StructDbgPtrTy)); + + + LLVMTypeRef FooParamTys[] = { + LLVMInt64Type(), + LLVMInt64Type(), + LLVMVectorType(LLVMInt64Type(), 10), + }; + LLVMTypeRef FooFuncTy = LLVMFunctionType(LLVMInt64Type(), FooParamTys, 3, 0); + LLVMValueRef FooFunction = LLVMAddFunction(M, "foo", FooFuncTy); + LLVMBasicBlockRef FooEntryBlock = LLVMAppendBasicBlock(FooFunction, "entry"); + + LLVMMetadataRef Subscripts[] = { + LLVMDIBuilderGetOrCreateSubrange(DIB, 0, 10), + }; + LLVMMetadataRef VectorTy = + LLVMDIBuilderCreateVectorType(DIB, 64 * 10, 0, + Int64Ty, Subscripts, 1); + + + LLVMMetadataRef ParamTypes[] = {Int64Ty, Int64Ty, VectorTy}; + LLVMMetadataRef FunctionTy = + LLVMDIBuilderCreateSubroutineType(DIB, File, ParamTypes, 3, 0); + + LLVMMetadataRef ReplaceableFunctionMetadata = + LLVMDIBuilderCreateReplaceableCompositeType(DIB, 0x15, "foo", 3, + File, File, 42, + 0, 0, 0, + LLVMDIFlagFwdDecl, + "", 0); + + LLVMMetadataRef FooParamLocation = + LLVMDIBuilderCreateDebugLocation(LLVMGetGlobalContext(), 42, 0, + ReplaceableFunctionMetadata, NULL); + LLVMMetadataRef FunctionMetadata = + LLVMDIBuilderCreateFunction(DIB, File, "foo", 3, "foo", 3, + File, 42, FunctionTy, true, true, + 42, 0, false); + LLVMMetadataReplaceAllUsesWith(ReplaceableFunctionMetadata, FunctionMetadata); + + LLVMMetadataRef FooParamExpression = + LLVMDIBuilderCreateExpression(DIB, NULL, 0); + LLVMMetadataRef FooParamVar1 = + LLVMDIBuilderCreateParameterVariable(DIB, FunctionMetadata, "a", 1, 1, File, + 42, Int64Ty, true, 0); + LLVMDIBuilderInsertDeclareAtEnd(DIB, LLVMConstInt(LLVMInt64Type(), 0, false), + FooParamVar1, FooParamExpression, + FooParamLocation, FooEntryBlock); + LLVMMetadataRef FooParamVar2 = + LLVMDIBuilderCreateParameterVariable(DIB, FunctionMetadata, "b", 1, 2, File, + 42, Int64Ty, true, 0); + LLVMDIBuilderInsertDeclareAtEnd(DIB, LLVMConstInt(LLVMInt64Type(), 0, false), + FooParamVar2, FooParamExpression, + FooParamLocation, FooEntryBlock); + LLVMMetadataRef FooParamVar3 = + LLVMDIBuilderCreateParameterVariable(DIB, FunctionMetadata, "c", 1, 3, File, + 42, VectorTy, true, 0); + LLVMDIBuilderInsertDeclareAtEnd(DIB, LLVMConstInt(LLVMInt64Type(), 0, false), + FooParamVar3, FooParamExpression, + FooParamLocation, FooEntryBlock); + + LLVMSetSubprogram(FooFunction, FunctionMetadata); + + LLVMMetadataRef FooLexicalBlock = + LLVMDIBuilderCreateLexicalBlock(DIB, FunctionMetadata, File, 42, 0); + + LLVMBasicBlockRef FooVarBlock = LLVMAppendBasicBlock(FooFunction, "vars"); + LLVMMetadataRef FooVarsLocation = + LLVMDIBuilderCreateDebugLocation(LLVMGetGlobalContext(), 43, 0, + FunctionMetadata, NULL); + LLVMMetadataRef FooVar1 = + LLVMDIBuilderCreateAutoVariable(DIB, FooLexicalBlock, "d", 1, File, + 43, Int64Ty, true, 0, 0); + LLVMValueRef FooVal1 = LLVMConstInt(LLVMInt64Type(), 0, false); + LLVMMetadataRef FooVarValueExpr = + LLVMDIBuilderCreateConstantValueExpression(DIB, 0); + + LLVMDIBuilderInsertDbgValueAtEnd(DIB, FooVal1, FooVar1, FooVarValueExpr, + FooVarsLocation, FooVarBlock); - LLVMDIBuilderCreateCompileUnit(DIB, - LLVMDWARFSourceLanguageC, File,"llvm-c-test", 11, 0, NULL, 0, 0, - NULL, 0, LLVMDWARFEmissionFull, 0, 0, 0); + LLVMDIBuilderFinalize(DIB); char *MStr = LLVMPrintModuleToString(M); puts(MStr); |
