Add regression test for #7944
authorRyan Scott <ryan.gl.scott@gmail.com>
Wed, 5 Apr 2017 01:46:55 +0000 (21:46 -0400)
committerBen Gamari <ben@smart-cactus.org>
Wed, 5 Apr 2017 01:47:00 +0000 (21:47 -0400)
Commit b8b3e30a6eedf9f213b8a718573c4827cfa230ba happened to fix the bug
reported in #7944. Let's add a regression test so that it stays that
way.

Fixes #7944.

Test Plan: make test TEST=T7944

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3404

testsuite/tests/simplCore/should_compile/T7944.hs [new file with mode: 0644]
testsuite/tests/simplCore/should_compile/all.T

diff --git a/testsuite/tests/simplCore/should_compile/T7944.hs b/testsuite/tests/simplCore/should_compile/T7944.hs
new file mode 100644 (file)
index 0000000..bb62427
--- /dev/null
@@ -0,0 +1,19 @@
+module T7944 where
+
+import GHC.Exts
+
+-- Force specialisation of "go"
+data SPEC = SPEC | SPEC2
+{-# ANN type SPEC ForceSpecConstr #-}
+
+-- This is more or less just an ordinary fold
+go :: SPEC -> [a] -> IntMap a -> IntMap a
+go SPEC [] m = m
+go SPEC (_:xs) m
+ = go SPEC xs
+ -- This would be the "worker function" of the fold
+ $ Unary m
+
+
+-- Both constructors are necessary, despite only one being used
+data IntMap a = Nil | Unary (IntMap a)
index 2d87e24..1bf1f36 100644 (file)
@@ -145,19 +145,20 @@ test('T7796', [], run_command, ['$MAKE -s --no-print-directory T7796'])
 test('T5550', omit_ways(prof_ways), compile, [''])
 test('T7865', normal, run_command, ['$MAKE -s --no-print-directory T7865'])
 test('T7785', only_ways(['optasm']), compile, ['-ddump-rules'])
-test('T7702', 
+test('T7702',
      [extra_files(['T7702plugin']),
       pre_cmd('$MAKE -s --no-print-directory -C T7702plugin package.T7702 TOP={top}'),
-      clean_cmd('$MAKE -s --no-print-directory -C T7702plugin clean.T7702'), 
-      # we say 18mb peak allocated +/- 70% because other compiler flags have 
-      # a large effect on allocation which is hard to separate from the 
-      # allocation done by the plugin... but a regression allocates > 90mb 
+      clean_cmd('$MAKE -s --no-print-directory -C T7702plugin clean.T7702'),
+      # we say 18mb peak allocated +/- 70% because other compiler flags have
+      # a large effect on allocation which is hard to separate from the
+      # allocation done by the plugin... but a regression allocates > 90mb
       compiler_stats_num_field('peak_megabytes_allocated',
-          [(wordsize(32), 18, 70), (wordsize(64), 18, 70)]) 
-     ], 
-     compile, 
+          [(wordsize(32), 18, 70), (wordsize(64), 18, 70)])
+     ],
+     compile,
      ['-v0 -package-db T7702plugin/pkg.T7702/local.package.conf -fplugin T7702Plugin -package T7702plugin ' + config.plugin_way_flags])
 
+test('T7944', normal, compile, ['-O2'])
 test('T7995',
      # RULE doesn't seem to fire unless optimizations are turned on.
      # This seems reasonable, so I've required it for the test. -- EZY 20130720