summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Cook <rcook@rcook.org>2016-08-30 17:00:36 -0400
committerBen Gamari <ben@smart-cactus.org>2016-08-31 13:15:18 -0400
commit2ee1db60ab29258fa9f8ab820f778bd0bb7f87a4 (patch)
treecf4409c70f97c07d9d793d97ae934f640b60ca6d
parentef784c551ef9b64c3c0b32c73f54bbdb747a8188 (diff)
downloadhaskell-2ee1db60ab29258fa9f8ab820f778bd0bb7f87a4.tar.gz
Fixes #12504: Double-escape paths used to build call to hsc_line
In outHsLine, paths passed to construct invocations of hsc_line must be escaped twice in order to generate a properly escaped string literal that will end up in the eventual LINE pragma emitted by this code. This is especially important on Windows paths, where backslashes would otherwise be treated as C escape sequences and result in the incorrect Windows paths. Adds test case to verify that hsc2hs properly escapes file paths in LINE pragmas Updates the hsc2hs submodule. See https://ghc.haskell.org/trac/ghc/ticket/12504 Reviewers: erikd, hvr, austin, bgamari, Phyx Reviewed By: erikd, Phyx Subscribers: thomie, Phyx, mpickering Differential Revision: https://phabricator.haskell.org/D2478 GHC Trac Issues: #12504
-rw-r--r--testsuite/.gitignore1
-rw-r--r--testsuite/tests/hsc2hs/Makefile11
-rw-r--r--testsuite/tests/hsc2hs/T12504.stdout2
-rw-r--r--testsuite/tests/hsc2hs/T12504/path/to/T12504.hsc5
-rw-r--r--testsuite/tests/hsc2hs/all.T6
m---------utils/hsc2hs0
6 files changed, 25 insertions, 0 deletions
diff --git a/testsuite/.gitignore b/testsuite/.gitignore
index 87e3558677..5e3f1c2cc4 100644
--- a/testsuite/.gitignore
+++ b/testsuite/.gitignore
@@ -790,6 +790,7 @@ mk/ghcconfig*_test___spaces_ghc*.exe.mk
/tests/ghci/scripts/ghci027.hs
/tests/ghci/should_run/3171.err
/tests/hsc2hs/3837.hs
+/tests/hsc2hs/T12504/path/to/T12504.hs
/tests/hsc2hs/T3837.hs
/tests/hsc2hs/hsc2hs001.hs
/tests/hsc2hs/hsc2hs002.hs
diff --git a/testsuite/tests/hsc2hs/Makefile b/testsuite/tests/hsc2hs/Makefile
index 54fa5ad8a0..9b3ee985c0 100644
--- a/testsuite/tests/hsc2hs/Makefile
+++ b/testsuite/tests/hsc2hs/Makefile
@@ -40,3 +40,14 @@ T10272:
'$(HSC2HS)' --cross-compile $@.hsc
'$(TEST_HC)' $(TEST_HC_OPTS) -v0 --make $@
./$@
+
+.PHONY: T12504
+T12504:
+ '$(HSC2HS)' T12504/path/to/$@.hsc
+ifeq "$(WINDOWS)" "YES"
+ grep '{-# LINE 1 \"T12504\\\\path\\\\to\\\\$@\.hsc\" #-}' T12504/path/to/$@.hs
+ grep '{-# LINE 2 \"T12504\\\\path\\\\to\\\\$@\.hsc\" #-}' T12504/path/to/$@.hs
+else
+ grep '{-# LINE 1 \"T12504/path/to/$@\.hsc\" #-}' T12504/path/to/$@.hs
+ grep '{-# LINE 2 \"T12504/path/to/$@\.hsc\" #-}' T12504/path/to/$@.hs
+endif
diff --git a/testsuite/tests/hsc2hs/T12504.stdout b/testsuite/tests/hsc2hs/T12504.stdout
new file mode 100644
index 0000000000..c1c05d0f21
--- /dev/null
+++ b/testsuite/tests/hsc2hs/T12504.stdout
@@ -0,0 +1,2 @@
+{-# LINE 1 "T12504/path/to/T12504.hsc" #-}
+{-# LINE 2 "T12504/path/to/T12504.hsc" #-}
diff --git a/testsuite/tests/hsc2hs/T12504/path/to/T12504.hsc b/testsuite/tests/hsc2hs/T12504/path/to/T12504.hsc
new file mode 100644
index 0000000000..3d05ce0273
--- /dev/null
+++ b/testsuite/tests/hsc2hs/T12504/path/to/T12504.hsc
@@ -0,0 +1,5 @@
+module Main (main) where
+
+main :: IO ()
+main = putStrLn "hello world"
+
diff --git a/testsuite/tests/hsc2hs/all.T b/testsuite/tests/hsc2hs/all.T
index d4fc69d88d..3f910db80b 100644
--- a/testsuite/tests/hsc2hs/all.T
+++ b/testsuite/tests/hsc2hs/all.T
@@ -35,3 +35,9 @@ test('T10272',
[extra_clean(['T10272.hs', 'T10272_hsc_make.c'])],
run_command,
['$MAKE -s --no-print-directory T10272'])
+
+test('T12504',
+ [extra_clean(['T12504/path/to/T12504.hs']),
+ extra_files(['T12504'])],
+ run_command,
+ ['$MAKE -s --no-print-directory T12504'])
diff --git a/utils/hsc2hs b/utils/hsc2hs
-Subproject 5119aebacaca75d983b4d7db32a6305b7f8651d
+Subproject f5ae016e5a69ebf42d612805e51afd9227df938