57 lines · plain
1; RUN: opt -passes=lint -disable-output < %s 2>&1 | FileCheck %s2 3declare void @llvm.memcpy.p0.p0.i32(ptr nocapture writeonly, ptr nocapture readonly, i32, i1) nounwind argmemonly4 5define void @f_memcpy() {6entry:7 %dst = alloca [1000 x i8], align 28 %src = alloca [1000 x i8], align 49; CHECK: Undefined behavior: Memory reference address is misaligned10; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 8 %dst, ptr align 4 %src, i32 200, i1 false)11 call void @llvm.memcpy.p0.p0.i32(ptr align 8 %dst, ptr align 4 %src, i32 200, i1 false)12; CHECK: Undefined behavior: Memory reference address is misaligned13; CHECK-NEXT: call void @llvm.memcpy.p0.p0.i32(ptr align 2 %dst, ptr align 8 %src, i32 200, i1 false)14 call void @llvm.memcpy.p0.p0.i32(ptr align 2 %dst, ptr align 8 %src, i32 200, i1 false)15; CHECK-NOT: @llvm.memcpy.p0.p0.i3216 call void @llvm.memcpy.p0.p0.i32(ptr align 1 %dst, ptr align 4 %src, i32 200, i1 false)17 call void @llvm.memcpy.p0.p0.i32(ptr align 2 %dst, ptr align 2 %src, i32 200, i1 false)18 call void @llvm.memcpy.p0.p0.i32(ptr align 2 %dst, ptr align 4 %src, i32 200, i1 false)19 20 ret void21}22 23declare void @llvm.memmove.p0.p0.i32(ptr nocapture writeonly, ptr nocapture readonly, i32, i1) nounwind argmemonly24 25define void @f_memmove() {26entry:27 %dst = alloca [1000 x i8], align 228 %src = alloca [1000 x i8], align 429; CHECK: Undefined behavior: Memory reference address is misaligned30; CHECK-NEXT: call void @llvm.memmove.p0.p0.i32(ptr align 4 %dst, ptr align 4 %src, i32 200, i1 false)31 call void @llvm.memmove.p0.p0.i32(ptr align 4 %dst, ptr align 4 %src, i32 200, i1 false)32; CHECK: Undefined behavior: Memory reference address is misaligned33; CHECK-NEXT: call void @llvm.memmove.p0.p0.i32(ptr align 2 %dst, ptr align 8 %src, i32 200, i1 false)34 call void @llvm.memmove.p0.p0.i32(ptr align 2 %dst, ptr align 8 %src, i32 200, i1 false)35; CHECK-NOT: @llvm.memmove.p0.p0.i3236 call void @llvm.memmove.p0.p0.i32(ptr align 1 %dst, ptr align 4 %src, i32 200, i1 false)37 call void @llvm.memmove.p0.p0.i32(ptr align 2 %dst, ptr align 2 %src, i32 200, i1 false)38 call void @llvm.memmove.p0.p0.i32(ptr align 2 %dst, ptr align 4 %src, i32 200, i1 false)39 40 ret void41}42 43declare void @llvm.memset.p0.i32(ptr nocapture writeonly, i8, i32, i1) nounwind argmemonly44 45define void @f_memset() {46entry:47 %dst = alloca [1000 x i8], align 248; CHECK: Undefined behavior: Memory reference address is misaligned49; CHECK-NEXT: call void @llvm.memset.p0.i32(ptr align 4 %dst, i8 55, i32 200, i1 false)50 call void @llvm.memset.p0.i32(ptr align 4 %dst, i8 55, i32 200, i1 false)51; CHECK-NOT: @llvm.memset.p0.i3252 call void @llvm.memset.p0.i32(ptr align 1 %dst, i8 55, i32 200, i1 false)53 call void @llvm.memset.p0.i32(ptr align 2 %dst, i8 55, i32 200, i1 false)54 55 ret void56}57