aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/IR/Verifier.cpp
diff options
context:
space:
mode:
authorMatthias Braun <matze@braunis.de>2024-04-08 17:47:57 -0700
committerGitHub <noreply@github.com>2024-04-08 17:47:57 -0700
commit4a812b5912d3149592cae195c9007b05649d9b41 (patch)
treed5d1b7283b39d3d8e07366c066ee37aa79408e15 /llvm/lib/IR/Verifier.cpp
parent064634406277e4786ce12caac94f7fa57ed5973e (diff)
downloadllvm-4a812b5912d3149592cae195c9007b05649d9b41.zip
llvm-4a812b5912d3149592cae195c9007b05649d9b41.tar.gz
llvm-4a812b5912d3149592cae195c9007b05649d9b41.tar.bz2
Verify threadlocal_address constraints (#87841)
Check invariants for `llvm.threadlocal.address` intrinsic in IR Verifier.
Diffstat (limited to 'llvm/lib/IR/Verifier.cpp')
-rw-r--r--llvm/lib/IR/Verifier.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cpp
index e63efe9..4092f0c 100644
--- a/llvm/lib/IR/Verifier.cpp
+++ b/llvm/lib/IR/Verifier.cpp
@@ -6224,6 +6224,14 @@ void Verifier::visitIntrinsicCall(Intrinsic::ID ID, CallBase &Call) {
&Call);
break;
}
+ case Intrinsic::threadlocal_address: {
+ const Value &Arg0 = *Call.getArgOperand(0);
+ Check(isa<GlobalVariable>(Arg0),
+ "llvm.threadlocal.address first argument must be a GlobalVariable");
+ Check(cast<GlobalVariable>(Arg0).isThreadLocal(),
+ "llvm.threadlocal.address operand isThreadLocal() must no be false");
+ break;
+ }
};
// Verify that there aren't any unmediated control transfers between funclets.