blob: 50cf37b941fe95c70f27a5ad936a75082d11bfbf [file] [log] [blame]
;; Test if the callee_type metadata attached to indirect call sites adhere to the expected format.
; RUN: not llvm-as -disable-output < %s 2>&1 | FileCheck %s
define i32 @_Z13call_indirectPFicEc(ptr %func, i8 signext %x) !type !0 {
entry:
%func.addr = alloca ptr, align 8
%x.addr = alloca i8, align 1
store ptr %func, ptr %func.addr, align 8
store i8 %x, ptr %x.addr, align 1
%fptr = load ptr, ptr %func.addr, align 8
%x_val = load i8, ptr %x.addr, align 1
; CHECK: The callee_type metadata must be a list of type metadata nodes
%call = call i32 %fptr(i8 signext %x_val), !callee_type !0
; CHECK: Well-formed generalized type metadata must contain exactly two operands
%call1 = call i32 %fptr(i8 signext %x_val), !callee_type !2
; CHECK: The first operand of type metadata for functions must be zero
%call2 = call i32 %fptr(i8 signext %x_val), !callee_type !4
; CHECK: The first operand of type metadata for functions must be zero
%call3 = call i32 %fptr(i8 signext %x_val), !callee_type !6
; CHECK: Only generalized type metadata can be part of the callee_type metadata list
%call4 = call i32 %fptr(i8 signext %x_val), !callee_type !8
ret i32 %call
}
!0 = !{i64 0, !"_ZTSFiPvcE.generalized"}
!1 = !{!"_ZTSFicE"}
!2 = !{!2}
!3 = !{i64 1, !"_ZTSFicE"}
!4 = !{!3}
!5 = !{!"expected_int", !"_ZTSFicE"}
!6 = !{!5}
!7 = !{i64 0, !"_ZTSFicE"}
!8 = !{!7}