[OCaml] Don't use deprecated non-caml_namespaced functions.
[oota-llvm.git] / bindings / go / llvm / ir_test.go
1 //===- ir_test.go - Tests for ir ------------------------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file tests bindings for the ir component.
11 //
12 //===----------------------------------------------------------------------===//
13
14 package llvm
15
16 import (
17         "strings"
18         "testing"
19 )
20
21 func testAttribute(t *testing.T, attr Attribute, name string) {
22         mod := NewModule("")
23         defer mod.Dispose()
24
25         ftyp := FunctionType(VoidType(), nil, false)
26         fn := AddFunction(mod, "foo", ftyp)
27
28         fn.AddFunctionAttr(attr)
29         newattr := fn.FunctionAttr()
30         if attr != newattr {
31                 t.Errorf("got attribute mask %d, want %d", newattr, attr)
32         }
33
34         text := mod.String()
35         if !strings.Contains(text, " "+name+" ") {
36                 t.Errorf("expected attribute '%s', got:\n%s", name, text)
37         }
38
39         fn.RemoveFunctionAttr(attr)
40         newattr = fn.FunctionAttr()
41         if newattr != 0 {
42                 t.Errorf("got attribute mask %d, want 0", newattr)
43         }
44 }
45
46 func TestAttributes(t *testing.T) {
47         // Tests that our attribute constants haven't drifted from LLVM's.
48         attrTests := []struct {
49                 attr Attribute
50                 name string
51         }{
52                 {SanitizeAddressAttribute, "sanitize_address"},
53                 {AlwaysInlineAttribute, "alwaysinline"},
54                 {BuiltinAttribute, "builtin"},
55                 {ByValAttribute, "byval"},
56                 {InAllocaAttribute, "inalloca"},
57                 {InlineHintAttribute, "inlinehint"},
58                 {InRegAttribute, "inreg"},
59                 {JumpTableAttribute, "jumptable"},
60                 {MinSizeAttribute, "minsize"},
61                 {NakedAttribute, "naked"},
62                 {NestAttribute, "nest"},
63                 {NoAliasAttribute, "noalias"},
64                 {NoBuiltinAttribute, "nobuiltin"},
65                 {NoCaptureAttribute, "nocapture"},
66                 {NoDuplicateAttribute, "noduplicate"},
67                 {NoImplicitFloatAttribute, "noimplicitfloat"},
68                 {NoInlineAttribute, "noinline"},
69                 {NonLazyBindAttribute, "nonlazybind"},
70                 {NonNullAttribute, "nonnull"},
71                 {NoRedZoneAttribute, "noredzone"},
72                 {NoReturnAttribute, "noreturn"},
73                 {NoUnwindAttribute, "nounwind"},
74                 {OptimizeNoneAttribute, "optnone"},
75                 {OptimizeForSizeAttribute, "optsize"},
76                 {ReadNoneAttribute, "readnone"},
77                 {ReadOnlyAttribute, "readonly"},
78                 {ReturnedAttribute, "returned"},
79                 {ReturnsTwiceAttribute, "returns_twice"},
80                 {SExtAttribute, "signext"},
81                 {StackProtectAttribute, "ssp"},
82                 {StackProtectReqAttribute, "sspreq"},
83                 {StackProtectStrongAttribute, "sspstrong"},
84                 {StructRetAttribute, "sret"},
85                 {SanitizeThreadAttribute, "sanitize_thread"},
86                 {SanitizeMemoryAttribute, "sanitize_memory"},
87                 {UWTableAttribute, "uwtable"},
88                 {ZExtAttribute, "zeroext"},
89                 {ColdAttribute, "cold"},
90         }
91
92         for _, a := range attrTests {
93                 testAttribute(t, a.attr, a.name)
94         }
95 }