summaryrefslogtreecommitdiffstats
path: root/gnu/llvm/tools/llvm-c-test/debuginfo.c
diff options
context:
space:
mode:
authorpatrick <patrick@openbsd.org>2019-01-27 16:42:12 +0000
committerpatrick <patrick@openbsd.org>2019-01-27 16:42:12 +0000
commitb773203fb58f3ef282fb69c832d8710cab5bc82d (patch)
treee75913f147570fbd75169647b144df85b88a038c /gnu/llvm/tools/llvm-c-test/debuginfo.c
parenttweak errno in previous (diff)
downloadwireguard-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.c161
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);