all.T 5.9 KB
Newer Older
1

2
3
4
5
# Args to compile_and_run are:
#	extra compile flags
#	extra run flags
#	expected process return value, if not zero
6

7
8
def f( opts ):
  opts.extra_hc_opts = '-fglasgow-exts'
9

10
setTestOpts(f)
11

12

krc's avatar
krc committed
13
# Doesn't work with External Core due to __labels
ross's avatar
ross committed
14
15
16
test('fed001', compose(only_compiler_types(['ghc']),
			expect_fail_for(['extcore','optextcore'])),
		compile_and_run, [''])
17

18
19
# Omit GHCi for these two, as they use foreign export
test('ffi001', omit_ways(['ghci']), compile_and_run, [''])
20
21
test('ffi002', [ omit_ways(['ghci']),
                 extra_clean(['ffi002_c.o']),
Ian Lynagh's avatar
Ian Lynagh committed
22
                 compile_cmd_prefix('$MAKE ffi002_setup && ') ],
23
24
25
                 # The ffi002_setup hack is to ensure that we generate
                 # ffi002_stub.h before compiling ffi002_c.c, which
                 # needs it.
26
               compile_and_run, ['ffi002_c.c -no-hs-main'])
27

28
test('ffi003', normal, compile_and_run, [''])
29

30
31
32
# ffi004 calls printf, which is not supported (the FFI spec says that
# calling varargs functions is deprecated).  It stopped working in GHC 6.9.
test('ffi004', skip, compile_and_run, [''])
33

Simon Marlow's avatar
Simon Marlow committed
34
35
# omit prof ways, because this test exits before the RTS has a chance to
# generate profiling info.
36
37
38
39
40
41
42
#
# On x86, the test suffers from floating-point differences due to the
# use of 80-bit internal precision when using the native code generator.
#
test('ffi005', [ omit_ways(prof_ways), 
                 if_arch('i386', only_ways(['optc'])),
                 exit_code(3) ],
Simon Marlow's avatar
Simon Marlow committed
43
               compile_and_run, [''])
44

krc's avatar
krc committed
45
46
# ffi[006-009] don't work with External Core due to non-static-C foreign calls

47
test('ffi006', expect_fail_for(['extcore','optextcore']), compile_and_run, [''])
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63

# Skip ffi00{7,8} for GHCi.  These tests both try to exit or raise an
# error from a foreign export, which shuts down the runtime.  When
# GHCi is running, this results in GHCi's main thread also trying to
# shut down, and a race ensues to see who gets to call exit() first.
# Sometimes we end up with the wrong exit code, or get an extra
# 'interrupted' message from the GHCi thread shutting down.

test('ffi007', compose( omit_ways(['ghci']),
		        expect_fail_for(['extcore','optextcore']) ), 
	       compile_and_run, [''])

test('ffi008', compose(expect_fail_for(['extcore','optextcore']), 
		       compose(exit_code(1),
			       omit_ways(['ghci']))), 
	       compile_and_run, [''])
64

65
66
67
68
69
70
71
72
73
74
75
76
# On i386, we need -msse2 to get reliable floating point results
maybe_skip = normal
opts = ''
if config.platform.startswith('i386-'):
   if config.compiler_type == 'ghc' and \
      version_ge(config.compiler_version, '6.13'):
	opts = '-msse2'
   else:
        maybe_skip = only_ways(['optc','profc','ghci'])

test('ffi009', [skip_if_fast, expect_fail_for(['extcore','optextcore']),
                maybe_skip] ,compile_and_run, [opts])
77

krc's avatar
krc committed
78
# Doesn't work with External Core due to __labels
79
test('ffi010', expect_fail_for(['extcore','optextcore']), compile_and_run, [''])
80

81
test('ffi011', normal, compile_and_run, [''])
82

83
84
85
86
# The stdcall calling convention works on Windows, and sometimes on
# Linux, and fails everywhhere else.  For now, we test only on Windows,
# because it's difficult to discover whether a given Linux supports
# it.
87

88
if config.platform == 'i386-unknown-mingw32':
Simon Marlow's avatar
Simon Marlow committed
89
	skip_if_not_windows = normal
90
else:
Simon Marlow's avatar
Simon Marlow committed
91
	skip_if_not_windows = skip
92

Simon Marlow's avatar
Simon Marlow committed
93
test('ffi012', skip_if_not_windows, compile_and_run, [''])
ross's avatar
ross committed
94
95
96

# Doesn't work with External Core due to __labels
test('ffi013', expect_fail_for(['extcore','optextcore']), compile_and_run, [''])
97

Simon Marlow's avatar
Simon Marlow committed
98
# threaded2 sometimes gives ffi014: Main_dDu: interrupted
99
test('ffi014', only_ways(['threaded1','threaded2']), compile_and_run, ['ffi014_cbits.c'])
100

101
# GHCi can't handle the separate C file (ToDo: fix this somehow)
102
103
test('ffi015', [ omit_ways(['ghci']), extra_clean(['ffi015_cbits.o']) ],
               compile_and_run, ['ffi015_cbits.c'])
Simon Marlow's avatar
Simon Marlow committed
104

Simon Marlow's avatar
Simon Marlow committed
105
# GHCi can't handle foreign import "&"
ei@vuokko.info's avatar
ei@vuokko.info committed
106
test('ffi016', omit_ways(['ghci']), compile_and_run, [''])
107
108

test('ffi017', normal, compile_and_run, [''])
Ian Lynagh's avatar
Ian Lynagh committed
109

110
111
112
test('ffi018', [ omit_ways(['ghci']), extra_clean(['ffi018_c.o']) ],
               compile_and_run, ['ffi018_c.c'])

113
114
115
116
test('ffi018_ghci', [ only_ways(['ghci']),
                      cmd_prefix('$MAKE ffi018_ghci_setup && '),
                      extra_clean(['ffi018_ghci_c.o']) ],
                    compile_and_run, ['ffi018_ghci_c.o'])
117

Simon Marlow's avatar
Simon Marlow committed
118
test('ffi019', normal, compile_and_run, [''])
Simon Marlow's avatar
Simon Marlow committed
119
120
121

# This one originally failed only GHCi, but doesn't hurt to test all ways.
test('1679', normal, compile_and_run, [''])
Simon Marlow's avatar
Simon Marlow committed
122
123
124
125

test('1288', [ skip_if_not_windows, omit_ways(['ghci']),
               extra_clean(['1288_c.o']) ],
             compile_and_run, ['1288_c.c'])
126
127
128
129
test('1288_ghci', [ skip_if_not_windows, only_ways(['ghci']),
                    cmd_prefix('$MAKE --no-print-directory 1288_ghci_setup && '),
                    extra_clean(['1288_ghci_c.o']) ],
                  compile_and_run, ['1288_ghci_c.o'])
Simon Marlow's avatar
Simon Marlow committed
130

Simon Marlow's avatar
Simon Marlow committed
131
132
133
test('2276', [ skip_if_not_windows, omit_ways(['ghci']), 
               extra_clean(['2276_c.o']) ],
             compile_and_run, ['2276_c.c'])
134
135
136
137
test('2276_ghci', [ skip_if_not_windows, only_ways(['ghci']),
                    cmd_prefix('$MAKE --no-print-directory 2276_ghci_setup && '),
                    extra_clean(['2276_ghci_c.o']) ],
                  compile_and_run, ['-fobject-code 2276_ghci_c.o'])
Simon Marlow's avatar
Simon Marlow committed
138
139

test('2469', normal, compile_and_run, ['-optc-std=gnu99'])
Simon Marlow's avatar
Simon Marlow committed
140
141

test('2594', omit_ways(['ghci']), compile_and_run, ['2594_c.c'])
142
143
144
145
146
147
148

test('fptr01', [ omit_ways(['ghci']), extra_clean(['fptr01_c.o']) ],
               compile_and_run, ['fptr01_c.c'])

test('fptrfail01', [ compose(omit_ways(['ghci']), exit_code(1)),
                     extra_clean(['fptrfail01_c.o']) ],
                   compile_and_run, ['fptrfail01_c.c'])
Simon Marlow's avatar
Simon Marlow committed
149
150
151

test('2917a', normal, compile_and_run, [''])

Simon Marlow's avatar
Simon Marlow committed
152
153
# omit prof ways, because this test causes the RTS to exit (correctly)
# without generating profiling information.
Simon Marlow's avatar
Simon Marlow committed
154
test('ffi020', [ omit_ways(prof_ways),
Simon Marlow's avatar
Simon Marlow committed
155
                 exit_code(1) ], compile_and_run, [''])
156

157
158

test('ffi021', normal, compile_and_run, [''])