Skip to content
Commits on Source (3)
......@@ -84,7 +84,8 @@ test('hGetBuf001',
expect_fail_if_windows],
compile_and_run, ['-package unix'])
test('hDuplicateTo001', [], compile_and_run, [''])
# As discussed in #16819, this test is racy in a threaded environment.
test('hDuplicateTo001', [omit_ways(concurrent_ways)], compile_and_run, [''])
test('countReaders001', [], compile_and_run, [''])
......
......@@ -115,10 +115,10 @@ config.way_rts_flags = {
'sanity' : ['-DS'],
'threaded1' : [],
'threaded1_ls' : ['-ls'],
'threaded2' : ['-N2 -ls'],
'threaded2' : ['-N2', '-ls'],
'threaded2_hT' : ['-N2', '-hT'],
'hpc' : [],
'prof_hc_hb' : ['-hc -hbvoid'],
'prof_hc_hb' : ['-hc', '-hbvoid'],
'prof_hb' : ['-hb'],
'prof_hd' : ['-hd'],
'prof_hy' : ['-hy'],
......@@ -144,6 +144,11 @@ prof_ways = [x[0] for x in config.way_flags.items()
threaded_ways = [x[0] for x in config.way_flags.items()
if '-threaded' in x[1] or 'ghci' == x[0]]
# Ways which run with multiple capabilities
concurrent_ways = [name for name, flags in config.way_flags.items()
if '-threaded' in flags or 'ghci' == name
if '-N2' in config.way_rts_flags.get(name, [])]
opt_ways = [x[0] for x in config.way_flags.items()
if '-O' in x[1]]
......
......@@ -204,6 +204,7 @@ def use_specs( specs ):
['A B', '-O -prof -fno-prof-count-entries -v0'])
"""
assert isinstance(ways, dict)
return lambda name, opts, s=specs: _use_specs( name, opts, s )
def _use_specs( name, opts, specs ):
......@@ -213,6 +214,7 @@ def _use_specs( name, opts, specs ):
# -----
def expect_fail_for( ways ):
assert isinstance(ways, list)
return lambda name, opts, w=ways: _expect_fail_for( name, opts, w )
def _expect_fail_for( name, opts, ways ):
......@@ -228,6 +230,7 @@ def _expect_broken( name, opts, bug ):
opts.expect = 'fail';
def expect_broken_for( bug, ways ):
assert isinstance(ways, list)
return lambda name, opts, b=bug, w=ways: _expect_broken_for( name, opts, b, w )
def _expect_broken_for( name, opts, bug, ways ):
......@@ -271,6 +274,7 @@ def fragile_for( bug, ways ):
# -----
def omit_ways( ways ):
assert isinstance(ways, list)
return lambda name, opts, w=ways: _omit_ways( name, opts, w )
def _omit_ways( name, opts, ways ):
......@@ -280,6 +284,7 @@ def _omit_ways( name, opts, ways ):
# -----
def only_ways( ways ):
assert isinstance(ways, list)
return lambda name, opts, w=ways: _only_ways( name, opts, w )
def _only_ways( name, opts, ways ):
......@@ -288,6 +293,7 @@ def _only_ways( name, opts, ways ):
# -----
def extra_ways( ways ):
assert isinstance(ways, list)
return lambda name, opts, w=ways: _extra_ways( name, opts, w )
def _extra_ways( name, opts, ways ):
......
......@@ -17,8 +17,8 @@ test('conc069a', only_threaded_ways, compile_and_run, [''])
# those for now.
test('conc070', only_threaded_ways, compile_and_run, [''])
test('conc071', omit_ways(['threaded2']), compile_and_run, [''])
test('conc072', only_ways(['threaded2']), compile_and_run, [''])
test('conc071', omit_ways(concurrent_ways), compile_and_run, [''])
test('conc072', only_ways(concurrent_ways), compile_and_run, [''])
test('conc073', normal, compile_and_run, [''])
# vector code must get inlined to become non-allocating
......@@ -67,7 +67,7 @@ test('allowinterrupt001', normal, compile_and_run, [''])
# try hard to provoke the error by running the test 100 times
test('T5558',
[ only_ways(['threaded2']),
[ only_ways(concurrent_ways),
cmd_wrapper(
lambda c: "for i in %s; do %s || break; done" %
(" ".join(str(i) for i in range(1,101)), c)) ],
......@@ -88,7 +88,7 @@ test('T7970', normal, compile_and_run, [''])
test('AtomicPrimops', normal, compile_and_run, [''])
# test uses 2 threads and yield, scheduling can vary with threaded2
test('threadstatus-9333', [fragile_for(16555, ['ghci']), omit_ways(['threaded2'])], compile_and_run, [''])
test('threadstatus-9333', [fragile_for(16555, ['ghci']), omit_ways(concurrent_ways)], compile_and_run, [''])
test('T9379', normal, compile_and_run, [''])
......@@ -132,7 +132,7 @@ test('conc013', normal, compile_and_run, [''])
test('conc014', normal, compile_and_run, [''])
test('conc015', normal, compile_and_run, [''])
test('conc015a', normal, compile_and_run, [''])
test('conc016', omit_ways(['threaded2']), # see comment in conc016.hs
test('conc016', omit_ways(concurrent_ways), # see comment in conc016.hs
compile_and_run, [''])
test('conc017', normal, compile_and_run, [''])
test('conc017a', normal, compile_and_run, [''])
......@@ -239,7 +239,7 @@ test('conc067', ignore_stdout, compile_and_run, [''])
# omit threaded2, the behaviour of this test is non-deterministic with more
# than one CPU.
test('conc068', [ omit_ways(['threaded2']), exit_code(1) ], compile_and_run, [''])
test('conc068', [ omit_ways(concurrent_ways), exit_code(1) ], compile_and_run, [''])
test('setnumcapabilities001',
[ only_ways(['threaded1','threaded2']),
......
......@@ -316,7 +316,7 @@ test('T11788', when(ghc_dynamic(), skip),
test('T10296a', [req_smp], makefile_test, ['T10296a'])
test('T10296b', [only_ways('threaded2')], compile_and_run, [''])
test('T10296b', [only_ways(['threaded2'])], compile_and_run, [''])
test('numa001', [ extra_run_opts('8'), unless(unregisterised(), extra_ways(['debug_numa'])) ]
, compile_and_run, [''])
......