diff options
author | Ryan Scott <ryan.gl.scott@gmail.com> | 2023-01-17 08:00:49 -0500 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2023-01-18 01:56:59 -0500 |
commit | 4efee43db5090aac4dde1293357bdb548ae71c24 (patch) | |
tree | 21df8bc95ce0c01dc5a6bbf384b54e4c942e4006 | |
parent | e9c0537cfbf7b47c64f592f529e402358b66ca7f (diff) | |
download | haskell-4efee43db5090aac4dde1293357bdb548ae71c24.tar.gz |
Add missing parenthesizeHsType in cvtSigTypeKind
We need to ensure that the output of `cvtSigTypeKind` is parenthesized (at
precedence `sigPrec`) so that any type signatures with an outermost, explicit
kind signature can parse correctly.
Fixes #22784.
-rw-r--r-- | compiler/GHC/ThToHs.hs | 2 | ||||
-rw-r--r-- | testsuite/tests/th/T22784.hs | 7 | ||||
-rw-r--r-- | testsuite/tests/th/T22784.stderr | 6 | ||||
-rw-r--r-- | testsuite/tests/th/all.T | 3 |
4 files changed, 16 insertions, 2 deletions
diff --git a/compiler/GHC/ThToHs.hs b/compiler/GHC/ThToHs.hs index 5223d2f7df..4733768ad6 100644 --- a/compiler/GHC/ThToHs.hs +++ b/compiler/GHC/ThToHs.hs @@ -1556,7 +1556,7 @@ cvtSigType = cvtSigTypeKind TypeLevel cvtSigTypeKind :: TypeOrKind -> TH.Type -> CvtM (LHsSigType GhcPs) cvtSigTypeKind typeOrKind ty = do ty' <- cvtTypeKind typeOrKind ty - pure $ hsTypeToHsSigType ty' + pure $ hsTypeToHsSigType $ parenthesizeHsType sigPrec ty' cvtTypeKind :: TypeOrKind -> TH.Type -> CvtM (LHsType GhcPs) cvtTypeKind typeOrKind ty diff --git a/testsuite/tests/th/T22784.hs b/testsuite/tests/th/T22784.hs new file mode 100644 index 0000000000..c2693c9a44 --- /dev/null +++ b/testsuite/tests/th/T22784.hs @@ -0,0 +1,7 @@ +{-# LANGUAGE TemplateHaskell #-} +module T22784 where + +import Data.Kind + +$([d| f :: (Bool :: Type) + f = True |]) diff --git a/testsuite/tests/th/T22784.stderr b/testsuite/tests/th/T22784.stderr new file mode 100644 index 0000000000..39d766a33b --- /dev/null +++ b/testsuite/tests/th/T22784.stderr @@ -0,0 +1,6 @@ +T22784.hs:(6,2)-(7,18): Splicing declarations + [d| f :: (Bool :: Type) + f = True |] + ======> + f :: (Bool :: Type) + f = True diff --git a/testsuite/tests/th/all.T b/testsuite/tests/th/all.T index 369ca67855..971fb39056 100644 --- a/testsuite/tests/th/all.T +++ b/testsuite/tests/th/all.T @@ -555,4 +555,5 @@ test('Lift_ByteArray', normal, compile_and_run, ['']) test('T21920', normal, compile_and_run, ['']) test('T21723', normal, compile_and_run, ['']) test('T21942', normal, compile_and_run, ['']) -test('TH_fun_par', normal, compile, [''])
\ No newline at end of file +test('T22784', normal, compile, ['-v0 -ddump-splices -dsuppress-uniques']) +test('TH_fun_par', normal, compile, ['']) |