34 lines · plain
1;; Test if the callee_type metadata attached to indirect call sites adhere to the expected format.2 3; RUN: not llvm-as -disable-output < %s 2>&1 | FileCheck %s4define i32 @_Z13call_indirectPFicEc(ptr %func, i8 signext %x) !type !0 {5entry:6 %func.addr = alloca ptr, align 87 %x.addr = alloca i8, align 18 store ptr %func, ptr %func.addr, align 89 store i8 %x, ptr %x.addr, align 110 %fptr = load ptr, ptr %func.addr, align 811 %x_val = load i8, ptr %x.addr, align 1 12 ; CHECK: The callee_type metadata must be a list of type metadata nodes13 %call = call i32 %fptr(i8 signext %x_val), !callee_type !014 ; CHECK: Well-formed generalized type metadata must contain exactly two operands15 %call1 = call i32 %fptr(i8 signext %x_val), !callee_type !216 ; CHECK: The first operand of type metadata for functions must be zero17 %call2 = call i32 %fptr(i8 signext %x_val), !callee_type !418 ; CHECK: The first operand of type metadata for functions must be zero19 %call3 = call i32 %fptr(i8 signext %x_val), !callee_type !620 ; CHECK: Only generalized type metadata can be part of the callee_type metadata list21 %call4 = call i32 %fptr(i8 signext %x_val), !callee_type !822 ret i32 %call23}24 25!0 = !{i64 0, !"_ZTSFiPvcE.generalized"}26!1 = !{!"_ZTSFicE"}27!2 = !{!2}28!3 = !{i64 1, !"_ZTSFicE"}29!4 = !{!3}30!5 = !{!"expected_int", !"_ZTSFicE"}31!6 = !{!5}32!7 = !{i64 0, !"_ZTSFicE"}33!8 = !{!7}34