129 lines · plain
1; RUN: not llvm-as < %s -o /dev/null 2>&1 | FileCheck %s2 3declare ptr @foo()4 5define void @f1() {6entry:7 call ptr @foo(), !dereferenceable !{i64 2}8 ret void9}10; CHECK: dereferenceable, dereferenceable_or_null apply only to load and inttoptr instructions, use attributes for calls or invokes11; CHECK-NEXT: call ptr @foo()12 13define void @f2() {14entry:15 call ptr @foo(), !dereferenceable_or_null !{i64 2}16 ret void17}18; CHECK: dereferenceable, dereferenceable_or_null apply only to load and inttoptr instructions, use attributes for calls or invokes19; CHECK-NEXT: call ptr @foo()20 21define i8 @f3(ptr %x) {22entry:23 %y = load i8, ptr %x, !dereferenceable !{i64 2}24 ret i8 %y25}26; CHECK: dereferenceable, dereferenceable_or_null apply only to pointer types27; CHECK-NEXT: load i8, ptr %x28 29define i8 @f4(ptr %x) {30entry:31 %y = load i8, ptr %x, !dereferenceable_or_null !{i64 2}32 ret i8 %y33}34; CHECK: dereferenceable, dereferenceable_or_null apply only to pointer types35; CHECK-NEXT: load i8, ptr %x36 37define ptr @f5(ptr %x) {38entry:39 %y = load ptr, ptr %x, !dereferenceable !{}40 ret ptr %y41}42; CHECK: dereferenceable, dereferenceable_or_null take one operand43; CHECK-NEXT: load ptr, ptr %x44 45 46define ptr @f6(ptr %x) {47entry:48 %y = load ptr, ptr %x, !dereferenceable_or_null !{}49 ret ptr %y50}51; CHECK: dereferenceable, dereferenceable_or_null take one operand52; CHECK-NEXT: load ptr, ptr %x53 54define ptr @f7(ptr %x) {55entry:56 %y = load ptr, ptr %x, !dereferenceable !{!"str"}57 ret ptr %y58}59; CHECK: dereferenceable, dereferenceable_or_null metadata value must be an i64!60; CHECK-NEXT: load ptr, ptr %x61 62 63define ptr @f8(ptr %x) {64entry:65 %y = load ptr, ptr %x, !dereferenceable_or_null !{!"str"}66 ret ptr %y67}68; CHECK: dereferenceable, dereferenceable_or_null metadata value must be an i64!69; CHECK-NEXT: load ptr, ptr %x70 71define ptr @f9(ptr %x) {72entry:73 %y = load ptr, ptr %x, !dereferenceable !{i32 2}74 ret ptr %y75}76; CHECK: dereferenceable, dereferenceable_or_null metadata value must be an i64!77; CHECK-NEXT: load ptr, ptr %x78 79 80define ptr @f10(ptr %x) {81entry:82 %y = load ptr, ptr %x, !dereferenceable_or_null !{i32 2}83 ret ptr %y84}85; CHECK: dereferenceable, dereferenceable_or_null metadata value must be an i64!86; CHECK-NEXT: load ptr, ptr %x87 88define ptr @f_11(i8 %val) {89 %ptr = inttoptr i8 %val to ptr, !dereferenceable !{i32 2}90 ret ptr %ptr91}92; CHECK: dereferenceable, dereferenceable_or_null metadata value must be an i64!93; CHECK-NEXT: %ptr = inttoptr i8 %val to ptr, !dereferenceable !394 95define ptr @f_12(i8 %val) {96 %ptr = inttoptr i8 %val to ptr, !dereferenceable_or_null !{i32 2}97 ret ptr %ptr98}99; CHECK: dereferenceable, dereferenceable_or_null metadata value must be an i64!100; CHECK-NEXT: %ptr = inttoptr i8 %val to ptr, !dereferenceable_or_null !3101 102define ptr @f_13(i8 %val) {103 %ptr = inttoptr i8 %val to ptr, !dereferenceable !{}104 ret ptr %ptr105}106; CHECK: dereferenceable, dereferenceable_or_null take one operand107; CHECK-NEXT: %ptr = inttoptr i8 %val to ptr, !dereferenceable !1108 109define ptr @f_14(i8 %val) {110 %ptr = inttoptr i8 %val to ptr, !dereferenceable_or_null !{}111 ret ptr %ptr112}113; CHECK: dereferenceable, dereferenceable_or_null take one operand114; CHECK-NEXT: %ptr = inttoptr i8 %val to ptr, !dereferenceable_or_null !1115 116define ptr @f_15(i8 %val) {117 %ptr = inttoptr i8 %val to ptr, !dereferenceable !{!"str"}118 ret ptr %ptr119}120; CHECK: dereferenceable, dereferenceable_or_null metadata value must be an i64!121; CHECK-NEXT: %ptr = inttoptr i8 %val to ptr, !dereferenceable !2122 123define ptr @f_16(i8 %val) {124 %ptr = inttoptr i8 %val to ptr, !dereferenceable_or_null !{!"str"}125 ret ptr %ptr126}127; CHECK: dereferenceable, dereferenceable_or_null metadata value must be an i64!128; CHECK-NEXT: %ptr = inttoptr i8 %val to ptr, !dereferenceable_or_null !2129