diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/VMCore/Function.cpp | 5 | ||||
-rw-r--r-- | lib/VMCore/Verifier.cpp | 22 |
2 files changed, 21 insertions, 6 deletions
diff --git a/lib/VMCore/Function.cpp b/lib/VMCore/Function.cpp index 5b2b054330..01339e1bb0 100644 --- a/lib/VMCore/Function.cpp +++ b/lib/VMCore/Function.cpp @@ -217,6 +217,11 @@ unsigned Function::getIntrinsicID() const { case 'f': if (getName() == "llvm.frameaddress") return Intrinsic::frameaddress; break; + case 'g': + if (getName() == "llvm.gcwrite") return Intrinsic::gcwrite; + if (getName() == "llvm.gcread") return Intrinsic::gcread; + if (getName() == "llvm.gcroot") return Intrinsic::gcroot; + break; case 'l': if (getName() == "llvm.longjmp") return Intrinsic::longjmp; break; diff --git a/lib/VMCore/Verifier.cpp b/lib/VMCore/Verifier.cpp index b69511bc24..7d8f8ff561 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; |