From d82d38239f232c3970a8641bb6d47d436e3cbc11 Mon Sep 17 00:00:00 2001 From: Vladislav Zavialov Date: Tue, 6 Apr 2021 15:51:38 +0300 Subject: Introduce Strict.Maybe, Strict.Pair (#19156) This patch fixes a space leak related to the use of Maybe in RealSrcSpan by introducing a strict variant of Maybe. In addition to that, it also introduces a strict pair and uses the newly introduced strict data types in a few other places (e.g. the lexer/parser state) to reduce allocations. Includes a regression test. --- testsuite/tests/ghc-api/T19156.hs | 7 ++++--- testsuite/tests/ghc-api/all.T | 2 +- testsuite/tests/parser/should_run/CountAstDeps.stdout | 3 ++- testsuite/tests/parser/should_run/CountParserDeps.stdout | 3 ++- 4 files changed, 9 insertions(+), 6 deletions(-) (limited to 'testsuite') diff --git a/testsuite/tests/ghc-api/T19156.hs b/testsuite/tests/ghc-api/T19156.hs index 999c1af242..21aad3f196 100644 --- a/testsuite/tests/ghc-api/T19156.hs +++ b/testsuite/tests/ghc-api/T19156.hs @@ -4,14 +4,15 @@ import GHC.Exts.Heap import GHC.Types.SrcLoc +import qualified GHC.Data.Strict as Strict rsl :: RealSrcLoc rsl = mkRealSrcLoc "Foo" 1 1 main = do - let !s1 = RealSrcLoc rsl (Just (BufPos 999222)) - !s2 = RealSrcLoc rsl (Just (BufPos 999333)) - !s3 = RealSrcLoc rsl (Just (BufPos 999444)) + let !s1 = RealSrcLoc rsl (Strict.Just (BufPos 999222)) + !s2 = RealSrcLoc rsl (Strict.Just (BufPos 999333)) + !s3 = RealSrcLoc rsl (Strict.Just (BufPos 999444)) !res = combineSrcSpans (combineSrcSpans (srcLocSpan s1) (srcLocSpan s2)) (srcLocSpan s3) cs <- unbox res diff --git a/testsuite/tests/ghc-api/all.T b/testsuite/tests/ghc-api/all.T index 00e158516e..9ee14ba3ae 100644 --- a/testsuite/tests/ghc-api/all.T +++ b/testsuite/tests/ghc-api/all.T @@ -24,6 +24,6 @@ test('T18522-dbg-ppr', extra_run_opts('"' + config.libdir + '"'), compile_and_run, ['-package ghc']) -test('T19156', [extra_run_opts('"' + config.libdir + '"'), expect_broken(19156)], +test('T19156', extra_run_opts('"' + config.libdir + '"'), compile_and_run, ['-package ghc']) diff --git a/testsuite/tests/parser/should_run/CountAstDeps.stdout b/testsuite/tests/parser/should_run/CountAstDeps.stdout index 242076d90c..c898dd7424 100644 --- a/testsuite/tests/parser/should_run/CountAstDeps.stdout +++ b/testsuite/tests/parser/should_run/CountAstDeps.stdout @@ -1,4 +1,4 @@ -Found 257 Language.Haskell.Syntax module dependencies +Found 258 Language.Haskell.Syntax module dependencies GHC.Builtin.Names GHC.Builtin.PrimOps GHC.Builtin.Types @@ -76,6 +76,7 @@ GHC.Data.Maybe GHC.Data.OrdList GHC.Data.Pair GHC.Data.Stream +GHC.Data.Strict GHC.Data.StringBuffer GHC.Data.TrieMap GHC.Driver.Backend diff --git a/testsuite/tests/parser/should_run/CountParserDeps.stdout b/testsuite/tests/parser/should_run/CountParserDeps.stdout index c08cd67a52..05d6073262 100644 --- a/testsuite/tests/parser/should_run/CountParserDeps.stdout +++ b/testsuite/tests/parser/should_run/CountParserDeps.stdout @@ -1,4 +1,4 @@ -Found 263 GHC.Parser module dependencies +Found 264 GHC.Parser module dependencies GHC.Builtin.Names GHC.Builtin.PrimOps GHC.Builtin.Types @@ -76,6 +76,7 @@ GHC.Data.Maybe GHC.Data.OrdList GHC.Data.Pair GHC.Data.Stream +GHC.Data.Strict GHC.Data.StringBuffer GHC.Data.TrieMap GHC.Driver.Backend -- cgit v1.2.1