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

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


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

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


>From 138f3a2ff86467ab6213656cd0c6e3940ccfc9e4 Mon Sep 17 00:00:00 2001
From: Alexis Engelke <engelke at in.tum.de>
Date: Wed, 1 Apr 2026 09:18:23 +0000
Subject: [PATCH] [spr] initial version

Created using spr 1.3.8-wip
---
 llvm/lib/IR/Core.cpp            | 2 +-
 llvm/tools/llvm-c-test/echo.cpp | 5 +++++
 2 files changed, 6 insertions(+), 1 deletion(-)

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;
   }



More information about the llvm-commits mailing list