Verify that the alignment argument to llvm.memcpy is a constant

integer, PR2318.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@55228 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2008-08-23 05:31:10 +00:00
parent dbf7aa5b4b
commit 259f88e3c9
2 changed files with 21 additions and 0 deletions

View File

@ -1273,6 +1273,16 @@ void Verifier::visitIntrinsicFunctionCall(Intrinsic::ID ID, CallInst &CI) {
switch (ID) {
default:
break;
case Intrinsic::memcpy_i32:
case Intrinsic::memcpy_i64:
case Intrinsic::memmove_i32:
case Intrinsic::memmove_i64:
case Intrinsic::memset_i32:
case Intrinsic::memset_i64:
Assert1(isa<ConstantInt>(CI.getOperand(4)),
"alignment argument of memory intrinsics must be a constant int",
&CI);
break;
case Intrinsic::init_trampoline:
Assert1(isa<Function>(CI.getOperand(2)->stripPointerCasts()),
"llvm.init_trampoline parameter #2 must resolve to a function.",

View File

@ -0,0 +1,11 @@
; RUN: not llvm-as -f %s -o /dev/null |& grep {alignment argument of memory intrinsics must be a constant int}
; PR2318
define void @x(i8* %a, i8* %src, i64 %len, i32 %align) nounwind {
entry:
tail call void @llvm.memcpy.i64( i8* %a, i8* %src, i64 %len, i32 %align) nounwind
ret void
}
declare void @llvm.memcpy.i64( i8* %a, i8* %src, i64 %len, i32)