forked from OSchip/llvm-project
Teach the verifier to reject all non-constant arguments to the second
argument of the cttz and ctlz intrinsics. llvm-svn: 146360
This commit is contained in:
parent
a31b95cacf
commit
026cc37e48
|
@ -1688,6 +1688,12 @@ void Verifier::visitIntrinsicFunctionCall(Intrinsic::ID ID, CallInst &CI) {
|
|||
switch (ID) {
|
||||
default:
|
||||
break;
|
||||
case Intrinsic::ctlz: // llvm.ctlz
|
||||
case Intrinsic::cttz: // llvm.cttz
|
||||
Assert1(isa<ConstantInt>(CI.getArgOperand(1)),
|
||||
"is_zero_undef argument of bit counting intrinsics must be a "
|
||||
"constant int", &CI);
|
||||
break;
|
||||
case Intrinsic::dbg_declare: { // llvm.dbg.declare
|
||||
Assert1(CI.getArgOperand(0) && isa<MDNode>(CI.getArgOperand(0)),
|
||||
"invalid llvm.dbg.declare intrinsic call 1", &CI);
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
; RUN: not llvm-as < %s -o /dev/null |& FileCheck %s
|
||||
|
||||
declare i32 @llvm.ctlz.i32(i32, i1)
|
||||
declare i32 @llvm.cttz.i32(i32, i1)
|
||||
|
||||
define void @f(i32 %x, i1 %is_not_zero) {
|
||||
entry:
|
||||
; CHECK: is_zero_undef argument of bit counting intrinsics must be a constant int
|
||||
; CHECK-NEXT: @llvm.ctlz.i32
|
||||
call i32 @llvm.ctlz.i32(i32 %x, i1 %is_not_zero)
|
||||
|
||||
; CHECK: is_zero_undef argument of bit counting intrinsics must be a constant int
|
||||
; CHECK-NEXT: @llvm.cttz.i32
|
||||
call i32 @llvm.cttz.i32(i32 %x, i1 %is_not_zero)
|
||||
ret void
|
||||
}
|
Loading…
Reference in New Issue