Print role annotations in TemplateHaskell brackets (#16718)
authorVladislav Zavialov <vlad.z.4096@gmail.com>
Sat, 1 Jun 2019 12:08:24 +0000 (15:08 +0300)
committerMarge Bot <ben+marge-bot@smart-cactus.org>
Mon, 10 Jun 2019 12:00:16 +0000 (08:00 -0400)
compiler/hsSyn/HsDecls.hs
testsuite/tests/roles/should_compile/T16718.hs [new file with mode: 0644]
testsuite/tests/roles/should_compile/T16718.stderr [new file with mode: 0644]
testsuite/tests/roles/should_compile/all.T
testsuite/tests/th/T15365.stderr

index 624d9bc..7adfb01 100644 (file)
@@ -302,6 +302,7 @@ instance (p ~ GhcPass pass, OutputableBndrId p) => Outputable (HsGroup p) where
              if isEmptyValBinds val_decls
                 then Nothing
                 else Just (ppr val_decls),
+             ppr_ds (tyClGroupRoleDecls tycl_decls),
              ppr_ds (tyClGroupTyClDecls tycl_decls),
              ppr_ds (tyClGroupInstDecls tycl_decls),
              ppr_ds deriv_decls,
diff --git a/testsuite/tests/roles/should_compile/T16718.hs b/testsuite/tests/roles/should_compile/T16718.hs
new file mode 100644 (file)
index 0000000..bae1d70
--- /dev/null
@@ -0,0 +1,7 @@
+{-# LANGUAGE RoleAnnotations, TemplateHaskell #-}
+
+module T16718 where
+
+$([d| type role P phantom
+      data P a
+    |])
diff --git a/testsuite/tests/roles/should_compile/T16718.stderr b/testsuite/tests/roles/should_compile/T16718.stderr
new file mode 100644 (file)
index 0000000..8e2530e
--- /dev/null
@@ -0,0 +1,7 @@
+T16718.hs:(5,3)-(7,6): Splicing declarations
+    [d| type role P phantom
+        
+        data P a |]
+  ======>
+    type role P phantom
+    data P a
index 28f344f..ae4a490 100644 (file)
@@ -10,3 +10,4 @@ test('T8958', [normalise_fun(normalise_errmsg), only_ways('normal')], compile, [
 test('T10263', normal, compile, [''])
 test('T9204b', [], multimod_compile, ['T9204b', '-v0'])
 test('T14101', normal, compile, [''])
+test('T16718', normal, compile, ['-v0 -ddump-splices -dsuppress-uniques'])
index 3c85950..9631319 100644 (file)
@@ -4,6 +4,8 @@ T15365.hs:(9,3)-(31,6): Splicing declarations
         pattern (:!!!) :: Bool
         pattern (:!!!) = True
         
+        type role (***)
+        
         type (|||) = Either
         data (***)
         class (???)