brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.7 KiB · 3d2b4a3 Raw
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