all.T 16.7 KB
Newer Older
1
test('testblockalloc',
MarcelineVQ's avatar
MarcelineVQ committed
2
     [c_src, only_ways(['normal','threaded1']), extra_run_opts('+RTS -I0')],
3
     compile_and_run, [''])
Simon Marlow's avatar
Simon Marlow committed
4

5
test('testmblockalloc',
MarcelineVQ's avatar
MarcelineVQ committed
6
     [c_src, only_ways(['normal','threaded1']), extra_run_opts('+RTS -I0')],
7
8
9
10
11
     compile_and_run, [''])
# -I0 is important: the idle GC will run the memory leak detector,
# which will crash because the mblocks we allocate are not in a state
# the leak detector is expecting.

Simon Marlow's avatar
Simon Marlow committed
12
13
14
15

# See bug #101, test requires +RTS -c (or equivalently +RTS -M<something>)
# only GHCi triggers the bug, but we run the test all ways for completeness.
test('bug1010', normal, compile_and_run, ['+RTS -c -RTS'])
16
17
18
19
20
21

def normalise_address(str):
    return re.sub('Access violation in generated code when reading [0]+',
                  'Access violation in generated code when reading ADDRESS',
                  str)

22
test('derefnull',
23
     [# LLVM Optimiser considers dereference of a null pointer
24
25
26
27
28
29
30
31
      # undefined and marks the code as unreachable which means
      # that later optimisations remove it altogether.
      omit_ways(['optllvm']),
      # SIGSEGV on Linux (which we make the default)
      exit_code(139),
      # Apparently the output can be different on different
      # Linux setups, so just ignore it. As long as we get
      # the right exit code we're OK.
32
      when(opsys('linux'), ignore_stderr),
33
      # SIGBUS on OX X (PPC and x86 only; amd64 gives SEGV)
34
35
36
37
      # The output under OS X is too unstable to readily compare
      when(platform('i386-apple-darwin'), [ignore_stderr, exit_code(139)]),
      when(platform('x86_64-apple-darwin'), [ignore_stderr, exit_code(139)]),
      when(platform('powerpc-apple-darwin'), [ignore_stderr, exit_code(139)]),
38
      when(opsys('mingw32'), [ignore_stderr, exit_code(11)]),
39
40
41
42
      # since these test are supposed to crash the
      # profile report will be empty always.
      # so disable the check for profiling
      when(opsys('mingw32'), omit_ways(prof_ways))],
43
     compile_and_run, ['-with-rtsopts="--generate-stack-traces=no"'])
44
test('divbyzero',
45
     [# SIGFPE on Linux
46
47
48
49
      exit_code(136),
      # Apparently the output can be different on different
      # Linux setups, so just ignore it. As long as we get
      # the right exit code we're OK.
50
      when(opsys('linux'), ignore_stderr),
51
52
53
54
      # PowerPC 64 bit and most likely PowerPC 32 bit processors
      # do not generate an exception (interrupt) for integer
      # division by zero but the result is undefined.
      # C programs compiled with gcc exit normally, so do we.
55
56
      when(platform('powerpc64-unknown-linux'), [ignore_stdout, exit_code(0)]),
      when(platform('powerpc64le-unknown-linux'), [ignore_stdout, exit_code(0)]),
57
      when(opsys('mingw32'), [ignore_stderr, exit_code(8)]),
58
59
60
61
      # The output under OS X is too unstable to readily compare
      when(platform('i386-apple-darwin'), [ignore_stderr, exit_code(136)]),
      when(platform('x86_64-apple-darwin'), [ignore_stderr, exit_code(136)]),
      when(platform('powerpc-apple-darwin'), [ignore_stderr, exit_code(136)]),
62
63
64
65
      # since these test are supposed to crash the
      # profile report will be empty always.
      # so disable the check for profiling
      when(opsys('mingw32'), omit_ways(prof_ways))],
66
     compile_and_run, ['-with-rtsopts="--generate-stack-traces=no"'])
Simon Marlow's avatar
Simon Marlow committed
67

MarcelineVQ's avatar
MarcelineVQ committed
68
test('outofmem', when(opsys('darwin'), skip),
69
                 run_command, ['$MAKE -s --no-print-directory outofmem'])
70
test('outofmem2', normal, run_command, ['$MAKE -s --no-print-directory outofmem2'])
Simon Marlow's avatar
Simon Marlow committed
71

72
test('T2047', [ignore_stdout, extra_run_opts('+RTS -c -RTS')],
73
              compile_and_run, ['-package containers'])
Simon Marlow's avatar
Simon Marlow committed
74
75
76

# Blackhole-detection test.
# Skip GHCi due to #2786
77
test('T2783', [ omit_ways(['ghci']), exit_code(1) ], compile_and_run, [''])
78
79
80

# Test the work-stealing deque implementation.  We run this test in
# both threaded1 (-threaded -debug) and threaded2 (-threaded) ways.
81
82
test('testwsdeque', [extra_files(['../../../rts/WSDeque.h']),
                     unless(in_tree_compiler(), skip),
83
                    req_smp, # needs atomic 'cas'
Simon Marlow's avatar
Simon Marlow committed
84
                    c_src, only_ways(['threaded1', 'threaded2'])],
85
                    compile_and_run, [''])
Simon Marlow's avatar
Simon Marlow committed
86

87
test('T3236', [c_src, only_ways(['normal','threaded1']), exit_code(1)], compile_and_run, [''])
Simon Marlow's avatar
Simon Marlow committed
88
89

test('stack001', extra_run_opts('+RTS -K32m -RTS'), compile_and_run, [''])
90
91
92
test('stack002', [extra_files(['stack001.hs']),
                  extra_run_opts('+RTS -K32m -k4m -RTS')],
     compile_and_run, [''])
93

94
95
96
97
98
99
# run this test with very small stack chunks to exercise the stack
# overflow/underflow machinery.
test('stack003', [ omit_ways('ghci'), # uses unboxed tuples
                   extra_run_opts('500000 +RTS -kc1k -kb100 -K96m -RTS') ],
                 compile_and_run, [''])

Ben Gamari's avatar
Ben Gamari committed
100
101
102
# Test that +RTS -K0 (e.g. no stack limit) parses correctly
test('stack004', [extra_run_opts('+RTS -K0 -RTS') ], compile_and_run, [''])

Simon Marlow's avatar
Simon Marlow committed
103
test('atomicinc', [ c_src, only_ways(['normal','threaded1', 'threaded2']) ], compile_and_run, [''])
104
105
test('atomicxchg', [ c_src, only_ways(['threaded1', 'threaded2']) ],
compile_and_run, [''])
Simon Marlow's avatar
Simon Marlow committed
106

107
test('T3424', # it's slow:
ian@well-typed.com's avatar
ian@well-typed.com committed
108
              [ when(fast(), skip), only_ways(['normal','threaded1','ghci']) ],
109
              compile_and_run, [''])
Simon Marlow's avatar
Simon Marlow committed
110
111

# Test for out-of-range heap size
112
test('rtsflags001', [ only_ways(['normal']), exit_code(1), extra_run_opts('+RTS -H0m -RTS') ], compile_and_run, [''])
113

114
115
116
# Crashed with 7.2 and earlier
test('rtsflags002', [ only_ways(['normal']) ], compile_and_run, ['-with-rtsopts="-B -B -B"'])

117
# Test to see if linker scripts link properly to real ELF files
Ian Lynagh's avatar
Ian Lynagh committed
118
test('T2615',
119
120
     [extra_files(['libfoo_T2615.c', 'libfoo_script_T2615.so']),
       when(opsys('mingw32'), skip),
121
       # OS X doesn't seem to support linker scripts
122
       when(opsys('darwin'), skip),
123
       # Solaris' linker does not support GNUish linker scripts
124
       when(opsys('solaris2'), skip),
ian@well-typed.com's avatar
ian@well-typed.com committed
125
126
127
       pre_cmd('$MAKE -s --no-print-directory T2615-prep'),
       # Add current directory to dlopen search path
       cmd_prefix('LD_LIBRARY_PATH=$LD_LIBRARY_PATH:. '),
128
       extra_clean(['libfoo_T2615.so', 'libfoo_T2615.o'])],
Ian Lynagh's avatar
Ian Lynagh committed
129
130
131
     compile_and_run,
     ['-package ghc'])

132
133
# omit dyn and profiling ways, because we don't build dyn_l or p_l
# variants of the RTS by default
MarcelineVQ's avatar
MarcelineVQ committed
134
135
test('traceEvent', [ omit_ways(['dyn'] + prof_ways),
                     extra_run_opts('+RTS -ls -RTS') ],
136
                   compile_and_run, ['-eventlog'])
Ian Lynagh's avatar
Ian Lynagh committed
137

138
test('T4059', [], run_command, ['$MAKE -s --no-print-directory T4059'])
Simon Marlow's avatar
Simon Marlow committed
139

140
# Test for #4274
141
142
143
144
145
test('exec_signals',
     [when(opsys('mingw32'), skip),
      pre_cmd('$MAKE -s --no-print-directory exec_signals-prep'),
      cmd_prefix('./exec_signals_prepare')],
     compile_and_run, [''])
146
147

test('return_mem_to_os', normal, compile_and_run, [''])
Simon Marlow's avatar
Simon Marlow committed
148

149
test('T4850', when(opsys('mingw32'), expect_broken(4850)), run_command, ['$MAKE -s --no-print-directory T4850'])
150

151
def config_T5250(name, opts):
152
153
154
    if not (config.arch in ['i386','x86_64']):
        opts.skip = 1;

155
156
test('T5250', [extra_files(['spalign.c']),
                config_T5250,
157
                # stack ptr is not 16-byte aligned on 32-bit Windows
158
159
                when(platform('i386-unknown-mingw32'), expect_fail),
                when(platform('i386-unknown-linux'),
160
161
162
163
                            expect_broken_for(4211,['llvm'])),
                extra_clean(['spalign.o']),
                omit_ways(['ghci']) ],
              compile_and_run, ['spalign.c'])
164

165
test('T5423', [], run_command, ['$MAKE -s --no-print-directory T5423'])
Ian Lynagh's avatar
Ian Lynagh committed
166

167
168
169
170
171
172
173
174
# Workaround bug #8458: old dlopen opens sections in the wrong order,
# so we just accept both orders.
def checkDynAsm(actual_file, normaliser):
    actual_raw = read_no_crs(actual_file)
    actual_str = normaliser(actual_raw)
    actual = actual_str.split()
    if actual == ['initArray1', 'initArray2', 'ctors1', 'ctors2', 'success']:
        return 1
175
176
177
178
    elif actual == ['initArray1', 'initArray2', 'ctors2', 'ctors1', 'success']:
        # gold seems to produce this ordering; this is slightly odd but if it's
        # wrong it's not our fault. See #13883.
        return 1
179
180
181
    elif actual == ['ctors1', 'ctors2', 'initArray1', 'initArray2', 'success']:
        if_verbose(1, 'T5435_dyn_asm detected old-style dlopen, see #8458')
        return 1
182
183
    elif opsys('darwin') and actual == ['modInitFunc1', 'modInitFunc2', 'success']:
        return 1
184
185
    elif opsys('mingw32') and actual == ['ctors1', 'ctors2', 'success']:
        return 1
186
187
188
189
    else:
        if_verbose(1, 'T5435_dyn_asm failed with %s, see all.T for details' % actual)
        return 0

190
191
# These should have extra_clean() arguments, but I need
# to somehow extract out the name of DLLs to do that
192

193
194
195
test('T5435_v_asm', [extra_files(['T5435.hs', 'T5435_asm.c']),
                     when(arch('powerpc64') or arch('powerpc64le'),
                          expect_broken(11259))],
196
     run_command, ['$MAKE -s --no-print-directory T5435_v_asm'])
197
198
199
test('T5435_v_gcc', [extra_files(['T5435.hs', 'T5435_gcc.c']),
                     when(arch('powerpc64') or arch('powerpc64le'),
                          expect_broken(11259))],
200
     run_command, ['$MAKE -s --no-print-directory T5435_v_gcc'])
201
202
203
test('T5435_dyn_asm', [extra_files(['T5435.hs', 'T5435_asm.c']),
                       check_stdout(checkDynAsm)],
     run_command, ['$MAKE -s --no-print-directory T5435_dyn_asm'])
204
test('T5435_dyn_gcc', extra_files(['T5435.hs', 'T5435_gcc.c']) , run_command, ['$MAKE -s --no-print-directory T5435_dyn_gcc'])
205

206
test('T5993', extra_run_opts('+RTS -k8 -RTS'), compile_and_run, [''])
Simon Marlow's avatar
Simon Marlow committed
207

Simon Marlow's avatar
Simon Marlow committed
208
test('T6006', [ omit_ways(prof_ways + ['ghci']),
Simon Marlow's avatar
Simon Marlow committed
209
                 extra_clean(['T6006_c.o']),
ian@well-typed.com's avatar
ian@well-typed.com committed
210
                 pre_cmd('$MAKE -s --no-print-directory T6006_setup') ],
Simon Marlow's avatar
Simon Marlow committed
211
212
213
214
215
                 # The T6006_setup hack is to ensure that we generate
                 # T6006_stub.h before compiling T6006_c.c, which
                 # needs it.
               compile_and_run, ['T6006_c.c -no-hs-main'])

216
test('T7037', [], run_command, ['$MAKE -s --no-print-directory T7037'])
Simon Marlow's avatar
Simon Marlow committed
217

218
test('T7087', exit_code(1), compile_and_run, [''])
Simon Marlow's avatar
Simon Marlow committed
219
test('T7160', normal, compile_and_run, [''])
Simon Marlow's avatar
Simon Marlow committed
220

221
test('T7040', [omit_ways(['ghci'])], compile_and_run, ['T7040_c.c'])
Simon Marlow's avatar
Simon Marlow committed
222

223
test('T7040_ghci',
224
225
     [extra_files(['T7040_c.h']),
      only_ways(['ghci']),
226
227
      pre_cmd('$MAKE -s --no-print-directory T7040_ghci_setup')],
     compile_and_run, ['T7040_ghci_c.o'])
Simon Marlow's avatar
Simon Marlow committed
228

229
230
test('T7227', [extra_run_opts('+RTS -tT7227.stat --machine-readable -RTS')],
     compile_and_run, [''])
Simon Marlow's avatar
Simon Marlow committed
231
232

test('T7636', [ exit_code(1), extra_run_opts('100000') ], compile_and_run, [''] )
Simon Marlow's avatar
Simon Marlow committed
233
234
235
236

test('stablename001', expect_fail_for(['hpc']), compile_and_run, [''])
# hpc should fail this, because it tags every variable occurrence with
# a different tick.  It's probably a bug if it works, hence expect_fail.
ryates@cs.rochester.edu's avatar
ryates@cs.rochester.edu committed
237

238
test('T7815', [ multi_cpu_race,
ryates@cs.rochester.edu's avatar
ryates@cs.rochester.edu committed
239
                extra_run_opts('50000 +RTS -N2 -RTS'),
240
                req_smp,
ryates@cs.rochester.edu's avatar
ryates@cs.rochester.edu committed
241
                only_ways(['threaded1', 'threaded2']) ], compile_and_run, [''] )
242

243
# ignore_stderr because it contains a unique:
244
#   ffishutdown: Main_dul: interrupted
245
246
test('ffishutdown', [ignore_stderr, only_ways(['threaded1','threaded2'])],
     compile_and_run, [''])
Simon Marlow's avatar
Simon Marlow committed
247

248
249
test('T7919', [when(fast(), skip), omit_ways(prof_ways)], compile_and_run,
     [config.ghc_th_way_flags])
Simon Marlow's avatar
Simon Marlow committed
250

251
test('T8035', normal, compile_and_run, [''])
252
253

test('linker_unload',
254
255
     [extra_files(['LinkerUnload.hs', 'Test.hs']),
      when(arch('powerpc64') or arch('powerpc64le'), expect_broken(11259))],
256
     run_command, ['$MAKE -s --no-print-directory linker_unload'])
Simon Marlow's avatar
Simon Marlow committed
257

258
test('T8209', [ req_smp, only_ways(threaded_ways), ignore_stdout ],
Simon Marlow's avatar
Simon Marlow committed
259
              compile_and_run, [''])
aljee@hyper.cx's avatar
aljee@hyper.cx committed
260

261
test('T8242', [ req_smp, only_ways(threaded_ways), ignore_stdout ],
aljee@hyper.cx's avatar
aljee@hyper.cx committed
262
              compile_and_run, [''])
Simon Marlow's avatar
Simon Marlow committed
263

264
test('T8124', [ only_ways(threaded_ways), omit_ways(['ghci']),
265
                 when(opsys('mingw32'), skip), # uses pthreads
Simon Marlow's avatar
Simon Marlow committed
266
267
268
269
270
271
                 extra_clean(['T8124_c.o']),
                 pre_cmd('$MAKE -s --no-print-directory T8124_setup') ],
                 # The T8124_setup hack is to ensure that we generate
                 # T8124_stub.h before compiling T8124_c.c, which
                 # needs it.
               compile_and_run, ['T8124_c.c -no-hs-main'])
272
273
274
275
276

# +RTS -A8k makes it fail faster
# The ghci way gets confused by the RTS options
test('T9045', [ omit_ways(['ghci']), extra_run_opts('10000 +RTS -A8k -RTS') ], compile_and_run, [''])

277
278
279
# T9078 needs to be compiled with -debug, which threaded1 does for us.
# Assert failure is reproducible with ghc-7.8.2.
test('T9078', only_ways(['threaded1']), compile_and_run, [''])
280

281
282
test('T10017', [ when(opsys('mingw32'), skip)
               , only_ways(threaded_ways), extra_run_opts('+RTS -N2 -RTS') ], compile_and_run, [''])
AndreasVoellmy's avatar
AndreasVoellmy committed
283

284
test('T11108', normal, compile_and_run, [''])
Ben Gamari's avatar
Ben Gamari committed
285

286
287
288
289
290
test('rdynamic', [ unless(opsys('linux') or opsys('mingw32'), skip)
                 # this needs runtime infrastructure to do in ghci:
                 #  '-rdynamic' ghc, load modules only via dlopen(RTLD_BLOBAL) and more.
                 , omit_ways(['ghci'])
                 ],
291
292
     compile_and_run, ['-rdynamic -package ghc'])

293
test('GcStaticPointers', [when(doing_ghci(), extra_hc_opts('-fobject-code'))],
Facundo Domínguez's avatar
Facundo Domínguez committed
294
     compile_and_run, [''])
295
test('ListStaticPointers', [when(doing_ghci(), extra_hc_opts('-fobject-code'))],
Facundo Domínguez's avatar
Facundo Domínguez committed
296
297
     compile_and_run, [''])

298
299
300
301
# 251 = RTS exit code for "out of memory"
test('overflow1', [ exit_code(251) ], compile_and_run, [''])
test('overflow2', [ exit_code(251) ], compile_and_run, [''])
test('overflow3', [ exit_code(251) ], compile_and_run, [''])
302

303
304
test('linker_error1', [extra_files(['linker_error.c']),
                       ignore_stderr], run_command,
305
306
     ['$MAKE -s --no-print-directory linker_error1'])

307
308
test('linker_error2', [extra_files(['linker_error.c']),
                       ignore_stderr], run_command,
309
310
     ['$MAKE -s --no-print-directory linker_error2'])

311
312
test('linker_error3', [extra_files(['linker_error.c']),
                       ignore_stderr], run_command,
313
     ['$MAKE -s --no-print-directory linker_error3'])
314

315
316
317
318
319
320
321
322
323
324
325
def grep_stderr(pattern):
    def wrapper(cmd, pattern=pattern):
        swap12 = '3>&1 1>&2 2>&3 3>&-' # Swap file descriptors 1 and 2.
        return('{cmd} {swap12} | grep "{pattern}" {swap12}'.format(**locals()))
    return cmd_wrapper(wrapper)

# The ghci way gets confused by the RTS options
test('T9839_01',
     [omit_ways(['ghci']), extra_run_opts('+RTS -T-s'), no_check_hp,
      grep_stderr('given an argument when none was expected')],
     compile_and_run, [''])
326

327
328
329
330
test('T9839_02',
     [only_ways(prof_ways), extra_run_opts('+RTS -Pax'), no_check_hp,
      grep_stderr('given an argument when none was expected')],
     compile_and_run, [''])
331

332
333
334
335
test('T9839_03',
     [only_ways(prof_ways), extra_run_opts('+RTS -Px'), no_check_hp,
      grep_stderr('given an argument when none was expected')],
     compile_and_run, [''])
336

337
338
339
test('T9839_04',
     [only_ways(prof_ways), extra_run_opts('+RTS -xc')],
     compile_and_run, [''])
340

341
342
343
344
test('T9839_05',
     [only_ways(prof_ways), extra_run_opts('+RTS -xcx'), no_check_hp,
      grep_stderr('given an argument when none was expected')],
     compile_and_run, [''])
345

346
347
348
349
test('T9839_06',
     [only_ways(prof_ways), extra_run_opts('+RTS -xtx'), no_check_hp,
      grep_stderr('given an argument when none was expected')],
     compile_and_run, [''])
350

351
# ignore_stderr as RTS reports slightly different error messages
352
353
# in 'epoll' and 'select' backends on reading from EBADF
# mingw32 skip as UNIX pipe and close(fd) is used to exercise the problem
354
test('T10590', [ignore_stderr, when(opsys('mingw32'), skip)], compile_and_run, [''])
355
356
357
358

# 20000 was easily enough to trigger the bug with 7.10
test('T10904', [ omit_ways(['ghci']), extra_run_opts('20000') ],
               compile_and_run, ['T10904lib.c'])
MarcelineVQ's avatar
MarcelineVQ committed
359

thomie's avatar
thomie committed
360
361
test('T10728', [extra_run_opts('+RTS -maxN3 -RTS'), only_ways(['threaded2'])],
               compile_and_run, [''])
362

363
364
test('T9405', [when(msys(), expect_broken(12714))], run_command,
     ['$MAKE -s --no-print-directory T9405'])
365

366
367
368
test('T11788', when(ghc_dynamic(), skip),
              run_command, ['$MAKE -s --no-print-directory T11788'])

369
370
test('T10296a', [req_smp], run_command,
     ['$MAKE -s --no-print-directory T10296a'])
371
372

test('T10296b', [only_ways('threaded2')], compile_and_run, [''])
Simon Marlow's avatar
Simon Marlow committed
373
374
375

test('numa001', [ extra_run_opts('8'), extra_ways(['debug_numa']) ]
                , compile_and_run, [''])
376

377
378
379
test('T12497', [ unless(opsys('mingw32'), skip)
               ],
               run_command, ['$MAKE -s --no-print-directory T12497'])
380

381
test('T12903', [when(opsys('mingw32'), skip)], compile_and_run, [''])
382
test('T13832', exit_code(1), compile_and_run, ['-threaded'])
383
test('T13894', normal, compile_and_run, [''])
384
test('T14497', normal, compile_and_run, ['-O'])
385
test('T14695', normal, run_command, ['$MAKE -s --no-print-directory T14695'])
386
387
388
389
390
test('T14702', [ ignore_stdout
               , only_ways(['threaded1', 'threaded2'])
               , extra_run_opts('+RTS -A32m -N8 -T -RTS')
               ]
               , compile_and_run, [''])
391
392

test('T14900', normal, compile_and_run, ['-package ghc-compact'])