Pass -ffrontend-opt arguments to frontend plugin in the correct order
authordoug <douglas.wilson@gmail.com>
Thu, 4 May 2017 18:16:17 +0000 (14:16 -0400)
committerBen Gamari <ben@smart-cactus.org>
Thu, 4 May 2017 22:20:44 +0000 (18:20 -0400)
Previously they were passed in the reverse order that they're specified
on the command line.

Add a haddock to frontendPluginOpts in DynFlags.hs.

Modify test frontend01 to cover the case of multiple -ffrontend-opt.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie

GHC Trac Issues: #13632

Differential Revision: https://phabricator.haskell.org/D3520

compiler/main/DynFlags.hs
ghc/Main.hs
testsuite/tests/plugins/Makefile
testsuite/tests/plugins/frontend01.stdout

index 383a71a..5771fd6 100644 (file)
@@ -796,6 +796,8 @@ data DynFlags = DynFlags {
   pluginModNames        :: [ModuleName],
   pluginModNameOpts     :: [(ModuleName,String)],
   frontendPluginOpts    :: [String],
+    -- ^ the @-ffrontend-opt@ flags given on the command line, in *reverse*
+    -- order that they're specified on the command line.
 
   -- GHC API hooks
   hooks                 :: Hooks,
index 6ece430..0a4e17a 100644 (file)
@@ -837,7 +837,8 @@ doFrontend modname _ = pluginError [modname]
 doFrontend modname srcs = do
     hsc_env <- getSession
     frontend_plugin <- liftIO $ loadFrontendPlugin hsc_env modname
-    frontend frontend_plugin (frontendPluginOpts (hsc_dflags hsc_env)) srcs
+    frontend frontend_plugin
+      (reverse $ frontendPluginOpts (hsc_dflags hsc_env)) srcs
 #endif
 
 -- -----------------------------------------------------------------------------
index 46fdc7d..efe17ef 100644 (file)
@@ -34,7 +34,7 @@ T10294a:
 frontend01:
        $(RM) FrontendPlugin.hi FrontendPlugin.o frontend01 frontend01.hi frontend.o
        "$(TEST_HC)" $(TEST_HC_OPTS) $(ghcPluginWayFlags) -Wall -package ghc -c FrontendPlugin.hs
-       "$(TEST_HC)" $(TEST_HC_OPTS) $(ghcPluginWayFlags) --frontend FrontendPlugin -ffrontend-opt foobar frontend01
+       "$(TEST_HC)" $(TEST_HC_OPTS) $(ghcPluginWayFlags) --frontend FrontendPlugin -ffrontend-opt foo -ffrontend-opt bar frontend01
        ./frontend01
 
 # -hide-all-plugin-packages + -package (this should not work!)
index 84950bc..234c91c 100644 (file)
@@ -1,4 +1,4 @@
-["foobar"]
+["foo","bar"]
 [1 of 1] Compiling Main             ( frontend01.hs, frontend01.o )
 Linking frontend01 ...
 hello world