summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Pickering <matthewtpickering@gmail.com>2021-10-08 15:09:15 +0100
committerKrzysztof Gogolewski <krzysztof.gogolewski@tweag.io>2021-10-10 15:07:52 +0200
commita356bd5673301e0d17088d278100cca94db8664f (patch)
treef4446accd84db1b847b08f446094af1b52181193
parent31983ab4c65204ad0fd14aac4c00648f5fa6ad6b (diff)
downloadhaskell-a356bd5673301e0d17088d278100cca94db8664f.tar.gz
driver: Fix assertion failure on self-import
Fixes #20459
-rw-r--r--compiler/GHC/Driver/Make.hs2
-rw-r--r--testsuite/tests/driver/T20459.stderr2
-rw-r--r--testsuite/tests/driver/T20459A.hs3
-rw-r--r--testsuite/tests/driver/T20459B.hs4
-rw-r--r--testsuite/tests/driver/all.T2
5 files changed, 12 insertions, 1 deletions
diff --git a/compiler/GHC/Driver/Make.hs b/compiler/GHC/Driver/Make.hs
index 25887ee3d2..5f619484f2 100644
--- a/compiler/GHC/Driver/Make.hs
+++ b/compiler/GHC/Driver/Make.hs
@@ -468,7 +468,7 @@ createBuildPlan mod_graph maybe_top_mod =
-- hs-boot files which are **not** part of cycles.
collapseAcyclic :: [SCC ModuleGraphNode] -> [BuildPlan]
collapseAcyclic (AcyclicSCC node : nodes) = SingleModule node : collapseAcyclic nodes
- collapseAcyclic (CyclicSCC nodes : _) = [UnresolvedCycle nodes]
+ collapseAcyclic (CyclicSCC cy_nodes : nodes) = (UnresolvedCycle cy_nodes) : collapseAcyclic nodes
collapseAcyclic [] = []
topSortWithBoot nodes = topSortModules False (select_boot_modules nodes ++ nodes) Nothing
diff --git a/testsuite/tests/driver/T20459.stderr b/testsuite/tests/driver/T20459.stderr
new file mode 100644
index 0000000000..63ae634930
--- /dev/null
+++ b/testsuite/tests/driver/T20459.stderr
@@ -0,0 +1,2 @@
+Module imports form a cycle:
+ module ‘T20459A’ (./T20459A.hs) imports itself
diff --git a/testsuite/tests/driver/T20459A.hs b/testsuite/tests/driver/T20459A.hs
new file mode 100644
index 0000000000..1c4697e820
--- /dev/null
+++ b/testsuite/tests/driver/T20459A.hs
@@ -0,0 +1,3 @@
+module T20459A where
+
+import T20459A
diff --git a/testsuite/tests/driver/T20459B.hs b/testsuite/tests/driver/T20459B.hs
new file mode 100644
index 0000000000..4d02b3c4d6
--- /dev/null
+++ b/testsuite/tests/driver/T20459B.hs
@@ -0,0 +1,4 @@
+module T20459B where
+
+import T20459A
+
diff --git a/testsuite/tests/driver/all.T b/testsuite/tests/driver/all.T
index f9174a6015..be93ec1d51 100644
--- a/testsuite/tests/driver/all.T
+++ b/testsuite/tests/driver/all.T
@@ -297,3 +297,5 @@ test('RunMode', extra_files(['RunMode/Test.hs']), run_command, ['{compiler} --ru
test('T20439', normal, run_command,
['echo "module Foo where" >> Foo.hs && \
{compiler} -E -fno-code -XCPP -v Foo.hs 2>&1 | grep "Copying" | sed "s/.*to//" '])
+test('T20459', normal, multimod_compile_fail,
+ ['T20459B', ''])