Some stress tests for the empty case linter
authorJoachim Breitner <mail@joachim-breitner.de>
Tue, 24 Mar 2015 10:28:55 +0000 (11:28 +0100)
committerJoachim Breitner <mail@joachim-breitner.de>
Tue, 24 Mar 2015 10:28:55 +0000 (11:28 +0100)
This is a variation of T2431 where the emptyness of the type is hidden
behind a newtype, a type family and a closed type family. In all cases,
it would be sound for the compiler to determine that the equality type
is empty and the case alternatives may be dropped.

At the moment, GHC does _not_ determine that. But if it ever does, this
test ensures that we do not forget to make the lint from #10180 smarter
as well.

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

diff --git a/testsuite/tests/simplCore/should_compile/T10180.hs b/testsuite/tests/simplCore/should_compile/T10180.hs
new file mode 100644 (file)
index 0000000..55c52f0
--- /dev/null
@@ -0,0 +1,27 @@
+{-# LANGUAGE TypeOperators, TypeFamilies, GADTs, EmptyCase #-}
+module T10180 where
+
+newtype Foo = Foo Int
+
+type family Bar a
+type instance Bar Int = Int
+
+type family Baz a where
+  Baz Int = Int
+  Baz Char = Int
+
+data a :~: b where
+  Refl :: a :~: a
+
+absurd0 :: Int :~: Bool -> a
+absurd0 x = case x of {}
+
+absurd1 :: Foo :~: Bool -> a
+absurd1 x = case x of {}
+
+absurd2 :: Bar Int :~: Bool -> a
+absurd2 x = case x of {}
+
+absurd3 :: Baz a :~: Bool -> a
+absurd3 x = case x of {}
+
index 6c000d3..daf038a 100644 (file)
@@ -212,3 +212,4 @@ test('T9583', only_ways(['optasm']), compile, [''])
 test('T9565', only_ways(['optasm']), compile, [''])
 test('T5821', only_ways(['optasm']), compile, [''])
 test('T10176', only_ways(['optasm']), compile, [''])
+test('T10180', only_ways(['optasm']), compile, [''])