aboutsummaryrefslogtreecommitdiff
path: root/test/NaCl/PNaClABI/types-function.ll
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