[commit: ghc] master: RnExpr: Actually fail if patterns found in expression (bce9908)

git at git.haskell.org git at git.haskell.org
Wed Oct 12 15:52:52 UTC 2016


Repository : ssh://git@git.haskell.org/ghc

On branch  : master
Link       : http://ghc.haskell.org/trac/ghc/changeset/bce99086e9f54909f51ff5a74cb8c666083bb021/ghc

>---------------------------------------------------------------

commit bce99086e9f54909f51ff5a74cb8c666083bb021
Author: Ben Gamari <bgamari.foss at gmail.com>
Date:   Tue Oct 11 09:26:46 2016 -0400

    RnExpr: Actually fail if patterns found in expression
    
    This fixes #12584, where wildcard patterns were snuck into an
    expression, which then crashed the typechecker in TcExpr since EWildPats
    aren't supposed to appear in the AST after renaming.
    
    The problem was that `rnTopSpliceDecl` failed to check for errors from
    `rnSplice` (as done by other callers to `rnSplice`).
    
    Thanks to Shayan for reporting this!
    
    Reviewers: simonpj, austin
    
    Reviewed By: simonpj
    
    Subscribers: simonpj, thomie
    
    Differential Revision: https://phabricator.haskell.org/D2539
    
    GHC Trac Issues: #12584


>---------------------------------------------------------------

bce99086e9f54909f51ff5a74cb8c666083bb021
 compiler/rename/RnSplice.hs                                        | 5 ++++-
 testsuite/tests/rename/should_fail/all.T                           | 1 +
 testsuite/tests/rename/should_fail/rnfail016.hs                    | 2 --
 testsuite/tests/rename/should_fail/rnfail016.stderr                | 2 --
 testsuite/tests/rename/should_fail/{rnfail016.hs => rnfail016a.hs} | 5 +----
 testsuite/tests/rename/should_fail/rnfail016a.stderr               | 2 ++
 6 files changed, 8 insertions(+), 9 deletions(-)

diff --git a/compiler/rename/RnSplice.hs b/compiler/rename/RnSplice.hs
index 4b2e561..557b9f8 100644
--- a/compiler/rename/RnSplice.hs
+++ b/compiler/rename/RnSplice.hs
@@ -635,8 +635,11 @@ rnSpliceDecl (SpliceDecl (L loc splice) flg)
 rnTopSpliceDecls :: HsSplice RdrName -> RnM ([LHsDecl RdrName], FreeVars)
 -- Declaration splice at the very top level of the module
 rnTopSpliceDecls splice
-   = do  { (rn_splice, fvs) <- setStage (Splice Untyped) $
+   = do  { (rn_splice, fvs) <- checkNoErrs $
+                               setStage (Splice Untyped) $
                                rnSplice splice
+           -- As always, be sure to checkNoErrs above lest we end up with
+           -- holes making it to typechecking, hence #12584.
          ; traceRn (text "rnTopSpliceDecls: untyped declaration splice")
          ; (decls, mod_finalizers) <-
               runRnSplice UntypedDeclSplice runMetaD ppr_decls rn_splice
diff --git a/testsuite/tests/rename/should_fail/all.T b/testsuite/tests/rename/should_fail/all.T
index 3ddfea2..9fc13b0 100644
--- a/testsuite/tests/rename/should_fail/all.T
+++ b/testsuite/tests/rename/should_fail/all.T
@@ -13,6 +13,7 @@ test('rnfail013', normal, compile_fail, [''])
 
 test('rnfail015', normal, compile_fail, [''])
 test('rnfail016', normal, compile_fail, [''])
+test('rnfail016a', normal, compile_fail, [''])
 test('rnfail017', normal, compile_fail, [''])
 test('rnfail018', normal, compile_fail, [''])
 test('rnfail019', normal, compile_fail, [''])
diff --git a/testsuite/tests/rename/should_fail/rnfail016.hs b/testsuite/tests/rename/should_fail/rnfail016.hs
index 1bf15b0..7dccaa9 100644
--- a/testsuite/tests/rename/should_fail/rnfail016.hs
+++ b/testsuite/tests/rename/should_fail/rnfail016.hs
@@ -4,6 +4,4 @@ module ShouldFail where
 -- !!! Pattern syntax in expressions
 
 f x = x @ x
-g x = ~ x
-h x = _
 
diff --git a/testsuite/tests/rename/should_fail/rnfail016.stderr b/testsuite/tests/rename/should_fail/rnfail016.stderr
index 4013255..4743613 100644
--- a/testsuite/tests/rename/should_fail/rnfail016.stderr
+++ b/testsuite/tests/rename/should_fail/rnfail016.stderr
@@ -2,5 +2,3 @@
 rnfail016.hs:6:7: error:
     Pattern syntax in expression context: x at x
     Did you mean to enable TypeApplications?
-
-rnfail016.hs:7:7: error: Pattern syntax in expression context: ~x
diff --git a/testsuite/tests/rename/should_fail/rnfail016.hs b/testsuite/tests/rename/should_fail/rnfail016a.hs
similarity index 77%
copy from testsuite/tests/rename/should_fail/rnfail016.hs
copy to testsuite/tests/rename/should_fail/rnfail016a.hs
index 1bf15b0..e0d7d65 100644
--- a/testsuite/tests/rename/should_fail/rnfail016.hs
+++ b/testsuite/tests/rename/should_fail/rnfail016a.hs
@@ -3,7 +3,4 @@ module ShouldFail where
 
 -- !!! Pattern syntax in expressions
 
-f x = x @ x
-g x = ~ x
-h x = _
-
+f x = ~ x
diff --git a/testsuite/tests/rename/should_fail/rnfail016a.stderr b/testsuite/tests/rename/should_fail/rnfail016a.stderr
new file mode 100644
index 0000000..3a59ee7
--- /dev/null
+++ b/testsuite/tests/rename/should_fail/rnfail016a.stderr
@@ -0,0 +1,2 @@
+
+rnfail016a.hs:6:7: error: Pattern syntax in expression context: ~x



More information about the ghc-commits mailing list