[llvm] [IR] Fix C API after getTerminator() change (PR #189922)

via llvm-commits llvm-commits at lists.llvm.org
Wed Apr 1 02:19:36 PDT 2026


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-llvm-ir

Author: Alexis Engelke (aengelke)

<details>
<summary>Changes</summary>

The C API function LLVMGetBasicBlockTerminator should return NULL when
the basic block is not well-formed.


---
Full diff: https://github.com/llvm/llvm-project/pull/189922.diff


2 Files Affected:

- (modified) llvm/lib/IR/Core.cpp (+1-1) 
- (modified) llvm/tools/llvm-c-test/echo.cpp (+5) 


``````````diff
diff --git a/llvm/lib/IR/Core.cpp b/llvm/lib/IR/Core.cpp
index a4e03de7b615c..ba5d1c5c486d6 100644
--- a/llvm/lib/IR/Core.cpp
+++ b/llvm/lib/IR/Core.cpp
@@ -2880,7 +2880,7 @@ LLVMValueRef LLVMGetBasicBlockParent(LLVMBasicBlockRef BB) {
 }
 
 LLVMValueRef LLVMGetBasicBlockTerminator(LLVMBasicBlockRef BB) {
-  return wrap(unwrap(BB)->getTerminator());
+  return wrap(unwrap(BB)->getTerminatorOrNull());
 }
 
 unsigned LLVMCountBasicBlocks(LLVMValueRef FnRef) {
diff --git a/llvm/tools/llvm-c-test/echo.cpp b/llvm/tools/llvm-c-test/echo.cpp
index 7b045314207b8..5ed1eaa459d88 100644
--- a/llvm/tools/llvm-c-test/echo.cpp
+++ b/llvm/tools/llvm-c-test/echo.cpp
@@ -1119,6 +1119,8 @@ struct FunCloner {
 
     LLVMContextRef Ctx = LLVMGetModuleContext(M);
     LLVMBasicBlockRef BB = LLVMAppendBasicBlockInContext(Ctx, Fun, Name);
+    if (LLVMGetBasicBlockTerminator(BB) != nullptr)
+      report_fatal_error("Basic block must not have terminator");
     return BBMap[Src] = BB;
   }
 
@@ -1161,6 +1163,9 @@ struct FunCloner {
       Cur = Next;
     }
 
+    if (LLVMGetBasicBlockTerminator(BB) != LLVMGetLastInstruction(BB))
+      report_fatal_error("Basic block terminator mismatch");
+
     LLVMDisposeBuilder(Builder);
     return BB;
   }

``````````

</details>


https://github.com/llvm/llvm-project/pull/189922


More information about the llvm-commits mailing list