diff options
author | Chris Lattner <sabre@nondot.org> | 2004-05-23 21:16:51 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2004-05-23 21:16:51 +0000 |
commit | e899705c27719afb24d34d194b787d2fc496b39c (patch) | |
tree | a908c8fd399ecfb56e98cf9b00b019047df96f10 /lib/VMCore/Verifier.cpp | |
parent | 942ae1a07d94b44230b6a0ac78c862c214b14855 (diff) | |
download | external_llvm-e899705c27719afb24d34d194b787d2fc496b39c.zip external_llvm-e899705c27719afb24d34d194b787d2fc496b39c.tar.gz external_llvm-e899705c27719afb24d34d194b787d2fc496b39c.tar.bz2 |
Recognize and verify the new GC intrinsics.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13687 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/VMCore/Verifier.cpp')
-rw-r--r-- | lib/VMCore/Verifier.cpp | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/lib/VMCore/Verifier.cpp b/lib/VMCore/Verifier.cpp index b69511b..7d8f8ff 100644 --- a/lib/VMCore/Verifier.cpp +++ b/lib/VMCore/Verifier.cpp @@ -653,15 +653,14 @@ void Verifier::visitIntrinsicFunctionCall(Intrinsic::ID ID, CallInst &CI) { NumArgs = 1; break; - case Intrinsic:: readio: { - const Type * ParamType = FT->getParamType(0); - const Type * ReturnType = FT->getReturnType(); + case Intrinsic::readio: { + const PointerType *ParamType = dyn_cast<PointerType>(FT->getParamType(0)); + const Type *ReturnType = FT->getReturnType(); Assert1(FT->getNumParams() == 1, "Illegal # arguments for intrinsic function!", IF); - Assert1(isa<PointerType>(ParamType), - "First argument not a pointer!", IF); - Assert1(((cast<PointerType>(ParamType)->getElementType()) == ReturnType), + Assert1(ParamType, "First argument not a pointer!", IF); + Assert1(ParamType->getElementType() == ReturnType, "Pointer type doesn't match return type!", IF); NumArgs = 1; break; @@ -672,6 +671,17 @@ void Verifier::visitIntrinsicFunctionCall(Intrinsic::ID ID, CallInst &CI) { case Intrinsic::sigsetjmp: NumArgs = 2; break; case Intrinsic::siglongjmp: NumArgs = 2; break; + case Intrinsic::gcroot: + Assert1(FT->getNumParams() == 2, + "Illegal # arguments for intrinsic function!", IF); + Assert1(isa<Constant>(CI.getOperand(2)) || + isa<GlobalValue>(CI.getOperand(2)), + "Second argument to llvm.gcroot must be a constant!", &CI); + NumArgs = 2; + break; + case Intrinsic::gcread: NumArgs = 1; break; + case Intrinsic::gcwrite: NumArgs = 2; break; + case Intrinsic::dbg_stoppoint: NumArgs = 4; break; case Intrinsic::dbg_region_start:NumArgs = 1; break; case Intrinsic::dbg_region_end: NumArgs = 1; break; |