summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Scott <ryan.gl.scott@gmail.com>2018-08-27 14:02:42 +0200
committerKrzysztof Gogolewski <krz.gogolewski@gmail.com>2018-08-27 14:02:42 +0200
commit5e6cf2a9301a5473ff9c5319b96de941b1ad72dd (patch)
tree78e37421b84d14b96af5371d33ba94b4de10626e
parentc523525b0e434d848f6e47ea3f9a37485965fa79 (diff)
downloadhaskell-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.hs4
-rw-r--r--testsuite/tests/th/T15550.hs8
-rw-r--r--testsuite/tests/th/T15550.stderr11
-rw-r--r--testsuite/tests/th/all.T1
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'])