mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-25 15:56:06 +00:00
llvm-c: Add LLVMDeleteInstruction to fix a test issue
Not deleting the loose instruction with metadata associated to it causes an assertion when the LLVMContext is destroyed. This was previously hidden by the fact that llvm-c-test does not call LLVMShutdown. The planned removal of ManagedStatic exposed this issue. Differential Revision: https://reviews.llvm.org/D129114
This commit is contained in:
parent
0f4339a835
commit
fdf7e437bf
@ -199,6 +199,9 @@ Changes to the C API
|
||||
* ``LLVMConstURem``
|
||||
* ``LLVMConstSRem``
|
||||
|
||||
* Add ``LLVMDeleteInstruction`` function which allows deleting instructions that
|
||||
are not inserted into a basic block.
|
||||
|
||||
Changes to the Go bindings
|
||||
--------------------------
|
||||
|
||||
|
@ -3228,7 +3228,7 @@ LLVMValueRef LLVMGetNextInstruction(LLVMValueRef Inst);
|
||||
LLVMValueRef LLVMGetPreviousInstruction(LLVMValueRef Inst);
|
||||
|
||||
/**
|
||||
* Remove and delete an instruction.
|
||||
* Remove an instruction.
|
||||
*
|
||||
* The instruction specified is removed from its containing building
|
||||
* block but is kept alive.
|
||||
@ -3247,6 +3247,16 @@ void LLVMInstructionRemoveFromParent(LLVMValueRef Inst);
|
||||
*/
|
||||
void LLVMInstructionEraseFromParent(LLVMValueRef Inst);
|
||||
|
||||
/**
|
||||
* Delete an instruction.
|
||||
*
|
||||
* The instruction specified is deleted. It must have previously been
|
||||
* removed from its containing building block.
|
||||
*
|
||||
* @see llvm::Value::deleteValue()
|
||||
*/
|
||||
void LLVMDeleteInstruction(LLVMValueRef Inst);
|
||||
|
||||
/**
|
||||
* Obtain the code opcode for an individual instruction.
|
||||
*
|
||||
|
@ -2803,6 +2803,10 @@ void LLVMInstructionEraseFromParent(LLVMValueRef Inst) {
|
||||
unwrap<Instruction>(Inst)->eraseFromParent();
|
||||
}
|
||||
|
||||
void LLVMDeleteInstruction(LLVMValueRef Inst) {
|
||||
unwrap<Instruction>(Inst)->deleteValue();
|
||||
}
|
||||
|
||||
LLVMIntPredicate LLVMGetICmpPredicate(LLVMValueRef Inst) {
|
||||
if (ICmpInst *I = dyn_cast<ICmpInst>(unwrap(Inst)))
|
||||
return (LLVMIntPredicate)I->getPredicate();
|
||||
|
@ -31,12 +31,11 @@ int llvm_set_metadata(void) {
|
||||
LLVMValueRef values[] = { LLVMConstInt(LLVMInt32Type(), 0, 0) };
|
||||
|
||||
// This used to trigger an assertion
|
||||
LLVMSetMetadata(
|
||||
LLVMBuildRetVoid(b),
|
||||
LLVMGetMDKindID("kind", 4),
|
||||
LLVMMDNode(values, 1));
|
||||
LLVMValueRef ret = LLVMBuildRetVoid(b);
|
||||
LLVMSetMetadata(ret, LLVMGetMDKindID("kind", 4), LLVMMDNode(values, 1));
|
||||
|
||||
LLVMDisposeBuilder(b);
|
||||
LLVMDeleteInstruction(ret);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user