|
11 | 11 | |* *|
|
12 | 12 | \*===----------------------------------------------------------------------===*/
|
13 | 13 |
|
14 |
| -#include "llvm-c-test.h" |
15 | 14 | #include "llvm-c/DebugInfo.h"
|
| 15 | +#include "llvm-c-test.h" |
| 16 | +#include "llvm-c/Core.h" |
| 17 | +#include "llvm-c/Types.h" |
16 | 18 |
|
17 | 19 | #include <assert.h>
|
18 | 20 | #include <stdio.h>
|
@@ -172,11 +174,20 @@ int llvm_test_dibuilder(void) {
|
172 | 174 | LLVMDIBuilderCreateAutoVariable(DIB, FooLexicalBlock, "d", 1, File,
|
173 | 175 | 43, Int64Ty, true, 0, 0);
|
174 | 176 | LLVMValueRef FooVal1 = LLVMConstInt(LLVMInt64Type(), 0, false);
|
175 |
| - LLVMMetadataRef FooVarValueExpr = |
176 |
| - LLVMDIBuilderCreateConstantValueExpression(DIB, 0); |
| 177 | + LLVMMetadataRef FooVarValueExpr1 = |
| 178 | + LLVMDIBuilderCreateConstantValueExpression(DIB, 0); |
| 179 | + |
| 180 | + LLVMDIBuilderInsertDbgValueRecordAtEnd( |
| 181 | + DIB, FooVal1, FooVar1, FooVarValueExpr1, FooVarsLocation, FooVarBlock); |
177 | 182 |
|
178 |
| - LLVMDIBuilderInsertDbgValueRecordAtEnd(DIB, FooVal1, FooVar1, FooVarValueExpr, |
179 |
| - FooVarsLocation, FooVarBlock); |
| 183 | + LLVMMetadataRef FooVar2 = LLVMDIBuilderCreateAutoVariable( |
| 184 | + DIB, FooLexicalBlock, "e", 1, File, 44, Int64Ty, true, 0, 0); |
| 185 | + LLVMValueRef FooVal2 = LLVMConstInt(LLVMInt64Type(), 1, false); |
| 186 | + LLVMMetadataRef FooVarValueExpr2 = |
| 187 | + LLVMDIBuilderCreateConstantValueExpression(DIB, 1); |
| 188 | + |
| 189 | + LLVMDIBuilderInsertDbgValueRecordAtEnd( |
| 190 | + DIB, FooVal2, FooVar2, FooVarValueExpr2, FooVarsLocation, FooVarBlock); |
180 | 191 |
|
181 | 192 | LLVMMetadataRef MacroFile =
|
182 | 193 | LLVMDIBuilderCreateTempMacroFile(DIB, NULL, 0, File);
|
@@ -224,14 +235,28 @@ int llvm_test_dibuilder(void) {
|
224 | 235 | LLVMPositionBuilderBeforeInstrAndDbgRecords(Builder, InsertPos);
|
225 | 236 | LLVMValueRef Phi1 = LLVMBuildPhi(Builder, I64, "p1");
|
226 | 237 | LLVMAddIncoming(Phi1, &Zero, &FooEntryBlock, 1);
|
| 238 | + |
227 | 239 | // Do the same again using the other position-setting function.
|
228 | 240 | LLVMPositionBuilderBeforeDbgRecords(Builder, FooVarBlock, InsertPos);
|
229 | 241 | LLVMValueRef Phi2 = LLVMBuildPhi(Builder, I64, "p2");
|
230 | 242 | LLVMAddIncoming(Phi2, &Zero, &FooEntryBlock, 1);
|
| 243 | + |
231 | 244 | // Insert a non-phi before the `ret` but not before the debug records to
|
232 | 245 | // test that works as expected.
|
233 | 246 | LLVMPositionBuilder(Builder, FooVarBlock, Ret);
|
234 |
| - LLVMBuildAdd(Builder, Phi1, Phi2, "a"); |
| 247 | + LLVMValueRef Add = LLVMBuildAdd(Builder, Phi1, Phi2, "a"); |
| 248 | + |
| 249 | + // Iterate over debug records in the add instruction. There should be two. |
| 250 | + LLVMDbgRecordRef AddDbgRecordFirst = LLVMGetFirstDbgRecord(Add); |
| 251 | + assert(AddDbgRecordFirst != NULL); |
| 252 | + LLVMDbgRecordRef AddDbgRecordSecond = LLVMGetNextDbgRecord(AddDbgRecordFirst); |
| 253 | + assert(AddDbgRecordSecond != NULL); |
| 254 | + LLVMDbgRecordRef AddDbgRecordLast = LLVMGetLastDbgRecord(Add); |
| 255 | + assert(AddDbgRecordLast != NULL); |
| 256 | + assert(AddDbgRecordSecond == AddDbgRecordLast); |
| 257 | + LLVMDbgRecordRef AddDbgRecordOverTheRange = |
| 258 | + LLVMGetNextDbgRecord(AddDbgRecordSecond); |
| 259 | + assert(AddDbgRecordOverTheRange == NULL); |
235 | 260 |
|
236 | 261 | char *MStr = LLVMPrintModuleToString(M);
|
237 | 262 | puts(MStr);
|
|
0 commit comments