| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py |
| ; RUN: not opt -passes=verify < %s 2>&1 | FileCheck %s |
| |
| declare void @llvm.assume(i1) |
| |
| define void @func(ptr %P, i32 %P1, ptr %P2, ptr %P3) { |
| ; CHECK: tags must be valid attribute names |
| ; CHECK: "adazdazd" |
| call void @llvm.assume(i1 true) ["adazdazd"()] |
| ; CHECK: the second argument should be a constant integral value |
| call void @llvm.assume(i1 true) ["dereferenceable"(ptr %P, i32 %P1)] |
| ; CHECK: too many arguments |
| call void @llvm.assume(i1 true) ["dereferenceable"(ptr %P, i32 8, i32 8)] |
| ; CHECK: this attribute should have 2 arguments |
| call void @llvm.assume(i1 true) ["dereferenceable"(ptr %P)] |
| ; CHECK: this attribute has no argument |
| call void @llvm.assume(i1 true) ["dereferenceable"(ptr %P, i32 4), "cold"(ptr %P)] |
| ; CHECK: this attribute should have one argument |
| call void @llvm.assume(i1 true) ["noalias"()] |
| call void @llvm.assume(i1 true) ["align"(ptr %P, i32 %P1, i32 4)] |
| ; CHECK: alignment assumptions should have 2 or 3 arguments |
| call void @llvm.assume(i1 true) ["align"(ptr %P, i32 %P1, i32 4, i32 4)] |
| ; CHECK: second argument should be an integer |
| call void @llvm.assume(i1 true) ["align"(ptr %P, ptr %P2)] |
| ; CHECK: third argument should be an integer if present |
| call void @llvm.assume(i1 true) ["align"(ptr %P, i32 %P1, ptr %P2)] |
| ; CHECK: separate_storage assumptions should have 2 arguments |
| call void @llvm.assume(i1 true) ["separate_storage"(ptr %P)] |
| ; CHECK: arguments to separate_storage assumptions should be pointers |
| call void @llvm.assume(i1 true) ["separate_storage"(ptr %P, i32 123)] |
| ret void |
| } |