xref: /llvm-project/llvm/test/Instrumentation/MemorySanitizer/attributes.ll (revision 21c3df4b858476bbc9b2b5af96cfef41f5715715)
1e7bac3b9SVitaly Buka; RUN: opt < %s -S -passes='module(msan)' 2>&1 | FileCheck %s
203e88205SEvgenii Stepanov
303e88205SEvgenii Stepanovtarget 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"
403e88205SEvgenii Stepanovtarget triple = "x86_64-unknown-linux-gnu"
503e88205SEvgenii Stepanov
603e88205SEvgenii Stepanov
703e88205SEvgenii Stepanovdeclare void @a_() sanitize_memory readnone
803e88205SEvgenii Stepanovdeclare void @b_() sanitize_memory readonly
903e88205SEvgenii Stepanovdeclare void @c_() sanitize_memory writeonly
10*21c3df4bSMatt Arsenaultdeclare void @d_(ptr %p) sanitize_memory writeonly argmemonly
1103e88205SEvgenii Stepanovdeclare void @e_() sanitize_memory speculatable
1203e88205SEvgenii Stepanov
1303e88205SEvgenii Stepanovdefine void @a() sanitize_memory readnone {
1403e88205SEvgenii Stepanoventry:
1503e88205SEvgenii Stepanov  call void @a_()
16f2c04239SEvgenii Stepanov  call void @a_() readnone
1703e88205SEvgenii Stepanov  ret void
1803e88205SEvgenii Stepanov}
1903e88205SEvgenii Stepanov
2003e88205SEvgenii Stepanovdefine void @b() sanitize_memory readonly {
2103e88205SEvgenii Stepanoventry:
2203e88205SEvgenii Stepanov  call void @b_()
23f2c04239SEvgenii Stepanov  call void @b_() readonly
2403e88205SEvgenii Stepanov  ret void
2503e88205SEvgenii Stepanov}
2603e88205SEvgenii Stepanov
2703e88205SEvgenii Stepanovdefine void @c() sanitize_memory writeonly {
2803e88205SEvgenii Stepanoventry:
2903e88205SEvgenii Stepanov  call void @c_()
30f2c04239SEvgenii Stepanov  call void @c_() writeonly
3103e88205SEvgenii Stepanov  ret void
3203e88205SEvgenii Stepanov}
3303e88205SEvgenii Stepanov
34*21c3df4bSMatt Arsenaultdefine void @d(ptr %p) sanitize_memory writeonly argmemonly {
3503e88205SEvgenii Stepanoventry:
36*21c3df4bSMatt Arsenault  call void @d_(ptr %p)
37*21c3df4bSMatt Arsenault  call void @d_(ptr %p) writeonly argmemonly
3803e88205SEvgenii Stepanov  ret void
3903e88205SEvgenii Stepanov}
4003e88205SEvgenii Stepanov
4103e88205SEvgenii Stepanovdefine void @e() sanitize_memory speculatable {
4203e88205SEvgenii Stepanoventry:
4303e88205SEvgenii Stepanov  call void @e_()
4403e88205SEvgenii Stepanov  ret void
4503e88205SEvgenii Stepanov}
4603e88205SEvgenii Stepanov
47304f1d59SNikita Popov; CHECK-NOT: memory(
4803e88205SEvgenii Stepanov; CHECK-NOT: speculatable
4905e3ab41SGui Andrade
50304f1d59SNikita Popov; CHECK: Function Attrs: nocallback nofree nosync nounwind willreturn memory(none)
5105e3ab41SGui Andrade; CHECK-NEXT: declare void @llvm.donothing
52