blob: a3fb55b23c51dab1d7645f28012a5c3accd5d772 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
; RUN: pnacl-abicheck < %s | FileCheck %s
; Test type-checking in function bodies. This test is not intended to verify
; all the rules about the various types, but instead to make sure that types
; stashed in various places in function bodies are caught.
@a2 = private global i17 zeroinitializer
; CHECK: Function func has disallowed type: void (i15)
declare void @func(i15 %arg)
!llvm.foo = !{!0}
!0 = metadata !{ half 0.0}
define void @types() {
; CHECK: bad result type: {{.*}} fptrunc
%h1 = fptrunc double undef to half
; CHECK: bad operand: {{.*}} bitcast half
%h2 = bitcast half 0.0 to i16
; see below...
%h3 = fadd double 0.0, fpext (half 0.0 to double)
; CHECK: bad pointer: store
store i32 0, i32* bitcast (i17* @a2 to i32*), align 1
; CHECK: bad function callee operand: call void @func(i15 1)
call void @func(i15 1)
; CHECK: Function types has disallowed instruction metadata: !foo
ret void, !foo !0
}
; CHECK-NOT: disallowed
; TODO:
; the bitcode reader seems to expand some operations inline
; (e.g. fpext, sext, uitofp) such that doing something like
; %h3 = fadd double 0.0, fpext (half 0.0 to double)
; means the verifier pass will never see the fpext or its operands
|