diff options
author | Krzysztof Gogolewski <krzysztof.gogolewski@tweag.io> | 2019-01-24 17:58:50 +0100 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2019-02-19 06:14:04 -0500 |
commit | 7833cf407d1f608bebb1d38bb99d3035d8d735e6 (patch) | |
tree | 7ba7c4dee7bf439a38a6a10c836de4f0ccb73fc4 /testsuite/tests | |
parent | b78cc64e923716ac0512c299f42d4d0012306c05 (diff) | |
download | haskell-7833cf407d1f608bebb1d38bb99d3035d8d735e6.tar.gz |
Look through newtype wrappers (Trac #16254)
exprIsConApp_maybe could detect that I# 10 is a constructor application,
but not that Size (I# 10) is, because it was an application with a
nontrivial argument.
Diffstat (limited to 'testsuite/tests')
4 files changed, 21 insertions, 0 deletions
diff --git a/testsuite/tests/simplCore/should_compile/Makefile b/testsuite/tests/simplCore/should_compile/Makefile index 277a5a664b..8577dea2a7 100644 --- a/testsuite/tests/simplCore/should_compile/Makefile +++ b/testsuite/tests/simplCore/should_compile/Makefile @@ -139,6 +139,11 @@ T5327: $(RM) -f T5327.hi T5327.o '$(TEST_HC)' $(TEST_HC_OPTS) -c T5327.hs -O -ddump-simpl | grep -c '># 34# ' +.PHONY: T16254 +T16254: + $(RM) -f T16254.hi T16254.o + '$(TEST_HC)' $(TEST_HC_OPTS) -c T16254.hs -O -ddump-simpl | grep -c '># 34# ' + .PHONY: T5623 T5623: $(RM) -f T5623.hi T5623.o diff --git a/testsuite/tests/simplCore/should_compile/T16254.hs b/testsuite/tests/simplCore/should_compile/T16254.hs new file mode 100644 index 0000000000..3c1490c17c --- /dev/null +++ b/testsuite/tests/simplCore/should_compile/T16254.hs @@ -0,0 +1,14 @@ +-- variant of T5327, where we force the newtype to have a wrapper +{-# LANGUAGE GADTs, ExplicitForAll #-} +module T16254 where + +newtype Size a b where + Size :: forall b a. Int -> Size a b + +{-# INLINABLE val2 #-} +val2 = Size 17 + +-- In the core, we should see a comparison against 34#, i.e. constant +-- folding should have happened. We actually see it twice: Once in f's +-- definition, and once in its unfolding. +f n = case val2 of Size s -> s + s > n diff --git a/testsuite/tests/simplCore/should_compile/T16254.stdout b/testsuite/tests/simplCore/should_compile/T16254.stdout new file mode 100644 index 0000000000..0cfbf08886 --- /dev/null +++ b/testsuite/tests/simplCore/should_compile/T16254.stdout @@ -0,0 +1 @@ +2 diff --git a/testsuite/tests/simplCore/should_compile/all.T b/testsuite/tests/simplCore/should_compile/all.T index 779b09175e..6e1979c5e6 100644 --- a/testsuite/tests/simplCore/should_compile/all.T +++ b/testsuite/tests/simplCore/should_compile/all.T @@ -113,6 +113,7 @@ test('T5359b', normal, compile, ['']) # Lint error with -O (OccurAnal) test('T5458', normal, compile, ['']) test('simpl021', [extra_files(['Simpl021A.hs', 'Simpl021B.hs'])], makefile_test, ['simpl021']) test('T5327', normal, makefile_test, ['T5327']) +test('T16254', normal, makefile_test, ['T16254']) test('T5615', normal, makefile_test, ['T5615']) test('T5623', normal, makefile_test, ['T5623']) test('T13155', normal, makefile_test, ['T13155']) |