[Clang] Deprecate __is_referenceable (#123185)
[llvm-project.git] / llvm / test / Instrumentation / MemorySanitizer / attributes.ll
blobc0cfc7bf2da92bc1174b21c9b5225d0f0411f424
1 ; RUN: opt < %s -S -passes='module(msan)' 2>&1 | FileCheck %s
3 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
4 target triple = "x86_64-unknown-linux-gnu"
7 declare void @a_() sanitize_memory readnone
8 declare void @b_() sanitize_memory readonly
9 declare void @c_() sanitize_memory writeonly
10 declare void @d_(ptr %p) sanitize_memory writeonly argmemonly
11 declare void @e_() sanitize_memory speculatable
13 define void @a() sanitize_memory readnone {
14 entry:
15   call void @a_()
16   call void @a_() readnone
17   ret void
20 define void @b() sanitize_memory readonly {
21 entry:
22   call void @b_()
23   call void @b_() readonly
24   ret void
27 define void @c() sanitize_memory writeonly {
28 entry:
29   call void @c_()
30   call void @c_() writeonly
31   ret void
34 define void @d(ptr %p) sanitize_memory writeonly argmemonly {
35 entry:
36   call void @d_(ptr %p)
37   call void @d_(ptr %p) writeonly argmemonly
38   ret void
41 define void @e() sanitize_memory speculatable {
42 entry:
43   call void @e_()
44   ret void
47 ; CHECK-NOT: memory(
48 ; CHECK-NOT: speculatable
50 ; CHECK: Function Attrs: nocallback nofree nosync nounwind willreturn memory(none)
51 ; CHECK-NEXT: declare void @llvm.donothing