summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Gamari <ben@smart-cactus.org>2021-11-29 16:12:59 -0500
committerMarge Bot <ben+marge-bot@smart-cactus.org>2021-12-07 06:27:47 -0500
commit7d2283b9788fd5a724b41c0902067890059de3ff (patch)
tree0aab3b160b59007c148e7076753433c9e030697d
parent0fe45d4346de72d5cf87a03c1eeedea2e2521a5b (diff)
downloadhaskell-7d2283b9788fd5a724b41c0902067890059de3ff.tar.gz
compiler: Eliminate accidental loop in GHC.SysTools.BaseDir
As noted in #20757, `GHC.SysTools.BaseDir.findToolDir` previously contained an loop, which would be triggered in the case that the search failed. Closes #20757.
-rw-r--r--compiler/GHC/SysTools/BaseDir.hs4
-rw-r--r--testsuite/tests/ghc-api/T20757.hs6
-rw-r--r--testsuite/tests/ghc-api/T20757.stderr1
-rw-r--r--testsuite/tests/ghc-api/all.T7
4 files changed, 14 insertions, 4 deletions
diff --git a/compiler/GHC/SysTools/BaseDir.hs b/compiler/GHC/SysTools/BaseDir.hs
index c0a1fa2cee..5d86ee6925 100644
--- a/compiler/GHC/SysTools/BaseDir.hs
+++ b/compiler/GHC/SysTools/BaseDir.hs
@@ -196,11 +196,11 @@ findToolDir False top_dir = go 0 (top_dir </> "..") []
InstallationError $ "could not detect mingw toolchain in the following paths: " ++ show tried
| otherwise = do
let try = path </> "mingw"
- let tried = tried ++ [try]
+ let tried' = tried ++ [try]
oneLevel <- doesDirectoryExist try
if oneLevel
then return (Just path)
- else go (k+1) (path </> "..") tried
+ else go (k+1) (path </> "..") tried'
findToolDir True _ = return Nothing
#else
findToolDir _ _ = return Nothing
diff --git a/testsuite/tests/ghc-api/T20757.hs b/testsuite/tests/ghc-api/T20757.hs
new file mode 100644
index 0000000000..b6af7815e8
--- /dev/null
+++ b/testsuite/tests/ghc-api/T20757.hs
@@ -0,0 +1,6 @@
+module Main where
+
+import GHC.SysTools.BaseDir
+
+main :: IO ()
+main = findToolDir False "/" >>= print
diff --git a/testsuite/tests/ghc-api/T20757.stderr b/testsuite/tests/ghc-api/T20757.stderr
new file mode 100644
index 0000000000..34678db7e3
--- /dev/null
+++ b/testsuite/tests/ghc-api/T20757.stderr
@@ -0,0 +1 @@
+T20757: could not detect mingw toolchain in the following paths: ["/..//mingw","/..//..//mingw","/..//..//..//mingw"]
diff --git a/testsuite/tests/ghc-api/all.T b/testsuite/tests/ghc-api/all.T
index 8eecd3c799..4d62a57682 100644
--- a/testsuite/tests/ghc-api/all.T
+++ b/testsuite/tests/ghc-api/all.T
@@ -30,5 +30,8 @@ test('T18522-dbg-ppr',
compile_and_run,
['-package ghc'])
test('T19156', extra_run_opts('"' + config.libdir + '"'),
- compile_and_run,
- ['-package ghc'])
+ compile_and_run,
+ ['-package ghc'])
+test('T20757', [unless(opsys('mingw32'), skip), exit_code(1)],
+ compile_and_run,
+ ['-package ghc'])