Commit fbe162f5 authored by Michael Sloan's avatar Michael Sloan Committed by Ben Gamari

Add a broken test for lingering state from TH unique names #9693

The stderr output is

```
Loading with T9693_initial.hs

T9693_main.hs:4:1:
    Same exact name in multiple name-spaces:
      type constructor or class ‘X’, declared at: T9693_main.hs:4:1
      data constructor ‘X’, declared at: T9693_main.hs:4:1
      Probable cause: you bound a unique Template Haskell name (NameU),
      perhaps via newName, in different name-spaces.
      If that's it, then -ddump-splices might be useful
Reloading with T9693_modified.hs

T9693_main.hs:1:1:
    Data constructor ‘X’ used as a type constructor
```

The strange thing is that the modified version uses (mkName "X"), which should
be fine for simultaneous use in both a data constructor and type constructor.
Indeed, on a fresh load, the modified version works fine. So there is some sort
of state left over from the prior load when (newName "X") was used.

Test Plan: testsuite/tests/th/T9693.script

Reviewers: bgamari, sighingnow, RyanGlScott

Reviewed By: sighingnow, RyanGlScott

Subscribers: RyanGlScott, sighingnow, rwbarton, thomie, carter

Differential Revision: https://phabricator.haskell.org/D4926
parent f59332f9
System.Directory.copyFile "T9693_initial.hs" "T9693.hs"
System.IO.hPutStrLn System.IO.stderr "Loading with T9693_initial.hs"
:load T9693_main.hs
System.Directory.copyFile "T9693_modified.hs" "T9693.hs"
System.IO.hPutStrLn System.IO.stderr "Reloading with T9693_modified.hs"
:reload
System.Directory.removeFile "T9693.hs"
module T9693 where
import Language.Haskell.TH
stuff = do
-- let x = mkName "X"
x <- newName "X"
sequence $ [dataD (return []) x [] Nothing [
normalC x []
] []]
{-# LANGUAGE TemplateHaskell #-}
import T9693
stuff
module T9693 where
import Language.Haskell.TH
stuff = do
let x = mkName "X"
-- x <- newName "X"
sequence $ [dataD (return []) x [] Nothing [
normalC x []
] []]
......@@ -418,3 +418,5 @@ test('T15243', normal, compile, ['-dsuppress-uniques'])
test('T15321', normal, compile_fail, [''])
test('T15324', normal, compile, ['-v0 -ddump-splices -dsuppress-uniques'])
test('T15331', normal, compile, ['-v0 -ddump-splices -dsuppress-uniques'])
# Note: T9693 should be only_ways(['ghci']) once it's fixed.
test('T9693', expect_broken(9693), ghci_script, ['T9693.script'])
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment