diff options
author | Ryan Scott <ryan.gl.scott@gmail.com> | 2018-08-27 14:02:42 +0200 |
---|---|---|
committer | Krzysztof Gogolewski <krz.gogolewski@gmail.com> | 2018-08-27 14:02:42 +0200 |
commit | 5e6cf2a9301a5473ff9c5319b96de941b1ad72dd (patch) | |
tree | 78e37421b84d14b96af5371d33ba94b4de10626e | |
parent | c523525b0e434d848f6e47ea3f9a37485965fa79 (diff) | |
download | haskell-5e6cf2a9301a5473ff9c5319b96de941b1ad72dd.tar.gz |
Fix #15550 by quoting RULE names during TH conversion
Summary:
When converting a `RuleP` to a GHC source `RuleD` during TH
conversion, we were stupidly not double-quoting the name of the rule.
Easily fixed.
Test Plan: make test TEST=T15550
Reviewers: goldfire, bgamari, simonpj
Reviewed By: simonpj
Subscribers: simonpj, rwbarton, carter
GHC Trac Issues: #15550
Differential Revision: https://phabricator.haskell.org/D5090
-rw-r--r-- | compiler/hsSyn/Convert.hs | 4 | ||||
-rw-r--r-- | testsuite/tests/th/T15550.hs | 8 | ||||
-rw-r--r-- | testsuite/tests/th/T15550.stderr | 11 | ||||
-rw-r--r-- | testsuite/tests/th/all.T | 1 |
4 files changed, 22 insertions, 2 deletions
diff --git a/compiler/hsSyn/Convert.hs b/compiler/hsSyn/Convert.hs index 24b0b20d80..687c828fef 100644 --- a/compiler/hsSyn/Convert.hs +++ b/compiler/hsSyn/Convert.hs @@ -705,8 +705,8 @@ cvtPragmaD (RuleP nm bndrs lhs rhs phases) ; rhs' <- cvtl rhs ; returnJustL $ Hs.RuleD noExt $ HsRules noExt (SourceText "{-# RULES") - [noLoc $ HsRule noExt (noLoc (SourceText nm,nm')) act - bndrs' lhs' rhs'] + [noLoc $ HsRule noExt (noLoc (quotedSourceText nm,nm')) + act bndrs' lhs' rhs'] } cvtPragmaD (AnnP target exp) diff --git a/testsuite/tests/th/T15550.hs b/testsuite/tests/th/T15550.hs new file mode 100644 index 0000000000..538064ca25 --- /dev/null +++ b/testsuite/tests/th/T15550.hs @@ -0,0 +1,8 @@ +{-# LANGUAGE TemplateHaskell #-} +module T15550 where + +$([d| myId :: a -> a + myId x = x + {-# NOINLINE [1] myId #-} + {-# RULES "myId" forall x. myId x = x #-} + |]) diff --git a/testsuite/tests/th/T15550.stderr b/testsuite/tests/th/T15550.stderr new file mode 100644 index 0000000000..8169d75613 --- /dev/null +++ b/testsuite/tests/th/T15550.stderr @@ -0,0 +1,11 @@ +T15550.hs:(4,3)-(8,6): Splicing declarations + [d| {-# RULES "myId" forall x. myId x = x #-} + + myId :: a -> a + myId x = x + {-# NOINLINE [1] myId #-} |] + ======> + myId :: a -> a + myId x = x + {-# NOINLINE [1] myId #-} + {-# RULES "myId" forall x. myId x = x #-} diff --git a/testsuite/tests/th/all.T b/testsuite/tests/th/all.T index 5c7037dcbe..55724dc1d9 100644 --- a/testsuite/tests/th/all.T +++ b/testsuite/tests/th/all.T @@ -425,4 +425,5 @@ test('T14471', normal, compile, ['']) test('TH_rebindableAdo', normal, compile, ['']) test('T14627', normal, compile_fail, ['']) test('TH_invalid_add_top_decl', normal, compile_fail, ['']) +test('T15550', normal, compile, ['-v0 -ddump-splices -dsuppress-uniques']) test('T15518', normal, compile, ['-v0 -ddump-splices -dsuppress-uniques']) |