diff options
author | Richard Cook <rcook@rcook.org> | 2016-08-30 17:00:36 -0400 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2016-08-31 13:15:18 -0400 |
commit | 2ee1db60ab29258fa9f8ab820f778bd0bb7f87a4 (patch) | |
tree | cf4409c70f97c07d9d793d97ae934f640b60ca6d /testsuite/tests/hsc2hs | |
parent | ef784c551ef9b64c3c0b32c73f54bbdb747a8188 (diff) | |
download | haskell-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
Diffstat (limited to 'testsuite/tests/hsc2hs')
-rw-r--r-- | testsuite/tests/hsc2hs/Makefile | 11 | ||||
-rw-r--r-- | testsuite/tests/hsc2hs/T12504.stdout | 2 | ||||
-rw-r--r-- | testsuite/tests/hsc2hs/T12504/path/to/T12504.hsc | 5 | ||||
-rw-r--r-- | testsuite/tests/hsc2hs/all.T | 6 |
4 files changed, 24 insertions, 0 deletions
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']) |