|
13 | 13 | \*===----------------------------------------------------------------------===*/
|
14 | 14 |
|
15 | 15 | #include "llvm-c-test.h"
|
| 16 | +#include "llvm-c/Types.h" |
16 | 17 |
|
17 | 18 | #include <assert.h>
|
18 | 19 | #include <string.h>
|
19 | 20 |
|
20 | 21 | int llvm_add_named_metadata_operand(void) {
|
21 |
| - LLVMModuleRef m = LLVMModuleCreateWithName("Mod"); |
22 |
| - LLVMValueRef values[] = { LLVMConstInt(LLVMInt32Type(), 0, 0) }; |
| 22 | + LLVMModuleRef M = LLVMModuleCreateWithName("Mod"); |
| 23 | + LLVMValueRef Int = LLVMConstInt(LLVMInt32Type(), 0, 0); |
23 | 24 |
|
24 | 25 | // This used to trigger an assertion
|
25 |
| - LLVMAddNamedMetadataOperand(m, "name", LLVMMDNode(values, 1)); |
| 26 | + LLVMAddNamedMetadataOperand(M, "name", LLVMMDNode(&Int, 1)); |
26 | 27 |
|
27 |
| - LLVMDisposeModule(m); |
| 28 | + LLVMDisposeModule(M); |
28 | 29 |
|
29 | 30 | return 0;
|
30 | 31 | }
|
31 | 32 |
|
32 | 33 | int llvm_set_metadata(void) {
|
33 |
| - LLVMBuilderRef b = LLVMCreateBuilder(); |
34 |
| - LLVMValueRef values[] = { LLVMConstInt(LLVMInt32Type(), 0, 0) }; |
| 34 | + LLVMBuilderRef Builder = LLVMCreateBuilder(); |
35 | 35 |
|
36 | 36 | // This used to trigger an assertion
|
37 |
| - LLVMValueRef ret = LLVMBuildRetVoid(b); |
38 |
| - LLVMSetMetadata(ret, LLVMGetMDKindID("kind", 4), LLVMMDNode(values, 1)); |
| 37 | + LLVMValueRef Return = LLVMBuildRetVoid(Builder); |
39 | 38 |
|
40 |
| - LLVMDisposeBuilder(b); |
41 |
| - LLVMDeleteInstruction(ret); |
| 39 | + const char Name[] = "kind"; |
| 40 | + LLVMValueRef Int = LLVMConstInt(LLVMInt32Type(), 0, 0); |
| 41 | + LLVMSetMetadata(Return, LLVMGetMDKindID(Name, strlen(Name)), |
| 42 | + LLVMMDNode(&Int, 1)); |
| 43 | + |
| 44 | + LLVMDisposeBuilder(Builder); |
| 45 | + LLVMDeleteInstruction(Return); |
42 | 46 |
|
43 | 47 | return 0;
|
44 | 48 | }
|
45 | 49 |
|
46 | 50 | int llvm_replace_md_operand(void) {
|
47 |
| - LLVMModuleRef m = LLVMModuleCreateWithName("Mod"); |
48 |
| - LLVMContextRef context = LLVMGetModuleContext(m); |
49 |
| - unsigned int tmp = 0; |
| 51 | + LLVMModuleRef M = LLVMModuleCreateWithName("Mod"); |
| 52 | + LLVMContextRef Context = LLVMGetModuleContext(M); |
| 53 | + |
| 54 | + const char String1[] = "foo"; |
| 55 | + LLVMMetadataRef String1MD = |
| 56 | + LLVMMDStringInContext2(Context, String1, strlen(String1)); |
| 57 | + LLVMMetadataRef NodeMD = LLVMMDNodeInContext2(Context, &String1MD, 1); |
| 58 | + LLVMValueRef Value = LLVMMetadataAsValue(Context, NodeMD); |
50 | 59 |
|
51 |
| - LLVMMetadataRef metas[] = {LLVMMDStringInContext2(context, "foo", 3)}; |
52 |
| - LLVMValueRef md = |
53 |
| - LLVMMetadataAsValue(context, LLVMMDNodeInContext2(context, metas, 1)); |
| 60 | + const char String2[] = "bar"; |
| 61 | + LLVMMetadataRef String2MD = |
| 62 | + LLVMMDStringInContext2(Context, String2, strlen(String2)); |
| 63 | + LLVMReplaceMDNodeOperandWith(Value, 0, String2MD); |
54 | 64 |
|
55 |
| - LLVMReplaceMDNodeOperandWith(md, 0, |
56 |
| - LLVMMDStringInContext2(context, "bar", 3)); |
| 65 | + LLVMValueRef Operand = LLVMGetOperand(Value, 0); |
57 | 66 |
|
58 |
| - assert(!strncmp(LLVMGetMDString(LLVMGetOperand(md, 0), &tmp), "bar", 0)); |
59 |
| - (void)tmp; |
| 67 | + unsigned int Len; |
| 68 | + const char *String = LLVMGetMDString(Operand, &Len); |
| 69 | + assert(Len == strlen(String2)); |
| 70 | + assert(strncmp(String, String2, Len) == 0); |
| 71 | + (void)String; |
60 | 72 |
|
61 |
| - LLVMDisposeModule(m); |
| 73 | + LLVMDisposeModule(M); |
62 | 74 |
|
63 | 75 | return 0;
|
64 | 76 | }
|
65 | 77 |
|
66 | 78 | int llvm_is_a_value_as_metadata(void) {
|
67 |
| - LLVMModuleRef m = LLVMModuleCreateWithName("Mod"); |
68 |
| - LLVMContextRef context = LLVMGetModuleContext(m); |
69 |
| - |
70 |
| - LLVMValueRef values[] = {LLVMConstInt(LLVMInt32Type(), 0, 0)}; |
71 |
| - LLVMValueRef md = LLVMMDNode(values, 1); |
72 |
| - assert(LLVMIsAValueAsMetadata(md) == md); |
73 |
| - (void)md; |
74 |
| - |
75 |
| - LLVMMetadataRef metas[] = {LLVMMDStringInContext2(context, "foo", 3)}; |
76 |
| - LLVMValueRef md2 = |
77 |
| - LLVMMetadataAsValue(context, LLVMMDNodeInContext2(context, metas, 1)); |
78 |
| - assert(LLVMIsAValueAsMetadata(md2) == NULL); |
79 |
| - (void)md2; |
| 79 | + LLVMModuleRef M = LLVMModuleCreateWithName("Mod"); |
| 80 | + LLVMContextRef Context = LLVMGetModuleContext(M); |
| 81 | + |
| 82 | + { |
| 83 | + LLVMValueRef Int = LLVMConstInt(LLVMInt32Type(), 0, 0); |
| 84 | + LLVMValueRef NodeMD = LLVMMDNode(&Int, 1); |
| 85 | + assert(LLVMIsAValueAsMetadata(NodeMD) == NodeMD); |
| 86 | + (void)NodeMD; |
| 87 | + } |
| 88 | + |
| 89 | + { |
| 90 | + const char String[] = "foo"; |
| 91 | + LLVMMetadataRef StringMD = |
| 92 | + LLVMMDStringInContext2(Context, String, strlen(String)); |
| 93 | + LLVMMetadataRef NodeMD = LLVMMDNodeInContext2(Context, &StringMD, 1); |
| 94 | + LLVMValueRef Value = LLVMMetadataAsValue(Context, NodeMD); |
| 95 | + assert(LLVMIsAValueAsMetadata(Value) == NULL); |
| 96 | + (void)Value; |
| 97 | + } |
80 | 98 |
|
81 | 99 | return 0;
|
82 | 100 | }
|
0 commit comments