summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZejun Wu <watashi@fb.com>2019-06-28 15:04:40 -0700
committerRay Shih <rayshih@fb.com>2020-08-10 15:19:14 -0700
commit7422b505e11fb2fd2c0aa55e54f7e697501c2763 (patch)
tree8827c14a8240db1e9a06d591ed2c0f358e43f0f0
parent27f654aa6e36e95f86f75f76af58d187cb1182ff (diff)
downloadhaskell-7422b505e11fb2fd2c0aa55e54f7e697501c2763.tar.gz
Revert "[tp2/ghc] Backport "Add `-optcxx` option (#16477)""
This reverts commit 6917f4cf1ae272b463438732eb7fa14639d6c914. The reason for revert: It doesn't work well without cabal support (cxx-options need be passed as -optcxx now). Let's just wait a bit. Reviewed By: lolotp
-rw-r--r--compiler/main/DriverPhases.hs1
-rw-r--r--compiler/main/DriverPipeline.hs15
-rw-r--r--compiler/main/DynFlags.hs11
-rw-r--r--compiler/main/HscTypes.hs12
-rw-r--r--compiler/main/SysTools.hs1
-rw-r--r--compiler/main/SysTools/ExtraObj.hs2
-rw-r--r--compiler/main/SysTools/Tasks.hs29
-rw-r--r--docs/users_guide/phases.rst7
-rw-r--r--testsuite/tests/driver/T16737.hs2
-rw-r--r--testsuite/tests/ffi/should_compile/all.T9
-rw-r--r--testsuite/tests/ffi/should_compile/cc017.hs19
-rw-r--r--testsuite/tests/th/T13366.hs2
12 files changed, 22 insertions, 88 deletions
diff --git a/compiler/main/DriverPhases.hs b/compiler/main/DriverPhases.hs
index 01224e19b1..d923262987 100644
--- a/compiler/main/DriverPhases.hs
+++ b/compiler/main/DriverPhases.hs
@@ -378,3 +378,4 @@ isHaskellSigFilename f = isHaskellSigSuffix (drop 1 $ takeExtension f)
isObjectFilename, isDynLibFilename :: Platform -> FilePath -> Bool
isObjectFilename platform f = isObjectSuffix platform (drop 1 $ takeExtension f)
isDynLibFilename platform f = isDynLibSuffix platform (drop 1 $ takeExtension f)
+
diff --git a/compiler/main/DriverPipeline.hs b/compiler/main/DriverPipeline.hs
index 08b7c5b7e9..bf79ea5d02 100644
--- a/compiler/main/DriverPipeline.hs
+++ b/compiler/main/DriverPipeline.hs
@@ -1272,8 +1272,17 @@ runPhase (RealPhase cc_phase) input_fn dflags
ghcVersionH <- liftIO $ getGhcVersionPathName dflags
- liftIO $ SysTools.runCc (phaseForeignLanguage cc_phase) dflags (
- [ SysTools.FileOption "" input_fn
+ let gcc_lang_opt | cc_phase `eqPhase` Ccxx = "c++"
+ | cc_phase `eqPhase` Cobjc = "objective-c"
+ | cc_phase `eqPhase` Cobjcxx = "objective-c++"
+ | otherwise = "c"
+ liftIO $ SysTools.runCc dflags (
+ -- force the C compiler to interpret this file as C when
+ -- compiling .hc files, by adding the -x c option.
+ -- Also useful for plain .c files, just in case GHC saw a
+ -- -x c option.
+ [ SysTools.Option "-x", SysTools.Option gcc_lang_opt
+ , SysTools.FileOption "" input_fn
, SysTools.Option "-o"
, SysTools.FileOption "" output_fn
]
@@ -2084,7 +2093,7 @@ doCpp dflags raw input_fn output_fn = do
let verbFlags = getVerbFlags dflags
let cpp_prog args | raw = SysTools.runCpp dflags args
- | otherwise = SysTools.runCc Nothing dflags (SysTools.Option "-E" : args)
+ | otherwise = SysTools.runCc dflags (SysTools.Option "-E" : args)
let target_defs =
[ "-D" ++ HOST_OS ++ "_BUILD_OS",
diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs
index 20f1ba0293..b67d657e69 100644
--- a/compiler/main/DynFlags.hs
+++ b/compiler/main/DynFlags.hs
@@ -94,8 +94,7 @@ module DynFlags (
extraGccViaCFlags, systemPackageConfig,
pgm_L, pgm_P, pgm_F, pgm_c, pgm_s, pgm_a, pgm_l, pgm_dll, pgm_T,
pgm_windres, pgm_libtool, pgm_ar, pgm_ranlib, pgm_lo, pgm_lc,
- pgm_lcc, pgm_i,
- opt_L, opt_P, opt_F, opt_c, opt_cxx, opt_a, opt_l, opt_i,
+ pgm_lcc, pgm_i, opt_L, opt_P, opt_F, opt_c, opt_a, opt_l, opt_i,
opt_P_signature,
opt_windres, opt_lo, opt_lc, opt_lcc,
@@ -1349,7 +1348,6 @@ data Settings = Settings {
-- See Note [Repeated -optP hashing]
sOpt_F :: [String],
sOpt_c :: [String],
- sOpt_cxx :: [String],
sOpt_a :: [String],
sOpt_l :: [String],
sOpt_windres :: [String],
@@ -1435,8 +1433,6 @@ opt_F dflags = sOpt_F (settings dflags)
opt_c :: DynFlags -> [String]
opt_c dflags = concatMap (wayOptc (targetPlatform dflags)) (ways dflags)
++ sOpt_c (settings dflags)
-opt_cxx :: DynFlags -> [String]
-opt_cxx dflags = sOpt_cxx (settings dflags)
opt_a :: DynFlags -> [String]
opt_a dflags = sOpt_a (settings dflags)
opt_l :: DynFlags -> [String]
@@ -2545,7 +2541,7 @@ setObjectDir, setHiDir, setHieDir, setStubDir, setDumpDir, setOutputDir,
setDynObjectSuf, setDynHiSuf,
setDylibInstallName,
setObjectSuf, setHiSuf, setHieSuf, setHcSuf, parseDynLibLoaderMode,
- setPgmP, addOptl, addOptc, addOptcxx, addOptP,
+ setPgmP, addOptl, addOptc, addOptP,
addCmdlineFramework, addHaddockOpts, addGhciScript,
setInteractivePrint
:: String -> DynFlags -> DynFlags
@@ -2661,7 +2657,6 @@ setDumpPrefixForce f d = d { dumpPrefixForce = f}
setPgmP f = let (pgm:args) = words f in alterSettings (\s -> s { sPgm_P = (pgm, map Option args)})
addOptl f = alterSettings (\s -> s { sOpt_l = f : sOpt_l s})
addOptc f = alterSettings (\s -> s { sOpt_c = f : sOpt_c s})
-addOptcxx f = alterSettings (\s -> s { sOpt_cxx = f : sOpt_cxx s})
addOptP f = alterSettings (\s -> s { sOpt_P = f : sOpt_P s
, sOpt_P_fingerprint = fingerprintStrings (f : sOpt_P s)
})
@@ -3066,8 +3061,6 @@ dynamic_flags_deps = [
(hasArg (\f -> alterSettings (\s -> s { sOpt_F = f : sOpt_F s})))
, make_ord_flag defFlag "optc"
(hasArg addOptc)
- , make_ord_flag defFlag "optcxx"
- (hasArg addOptcxx)
, make_ord_flag defFlag "opta"
(hasArg (\f -> alterSettings (\s -> s { sOpt_a = f : sOpt_a s})))
, make_ord_flag defFlag "optl"
diff --git a/compiler/main/HscTypes.hs b/compiler/main/HscTypes.hs
index b70fb8ac95..e46574ba05 100644
--- a/compiler/main/HscTypes.hs
+++ b/compiler/main/HscTypes.hs
@@ -30,7 +30,6 @@ module HscTypes (
ModGuts(..), CgGuts(..), ForeignStubs(..), appendStubC,
ImportedMods, ImportedBy(..), importedByUser, ImportedModsVal(..), SptEntry(..),
ForeignSrcLang(..),
- phaseForeignLanguage,
ModSummary(..), ms_imps, ms_installed_mod, ms_mod_name, ms_home_imps,
home_imps, ms_home_allimps, ms_home_srcimps, showModMsg, isBootSummary,
@@ -186,7 +185,6 @@ import CmdLineParser
import DynFlags
import DriverPhases ( Phase, HscSource(..), hscSourceString
, isHsBootOrSig, isHsigFile )
-import qualified DriverPhases as Phase
import BasicTypes
import IfaceSyn
import Maybes
@@ -3203,13 +3201,3 @@ moduleRetainsAllBindings hsc_env mod
case thisModSummary of
Just summary -> Just fp == (ml_hs_file . ms_location) summary
Nothing -> False
-
--- | Foreign language of the phase if the phase deals with a foreign code
-phaseForeignLanguage :: Phase -> Maybe ForeignSrcLang
-phaseForeignLanguage phase = case phase of
- Phase.Cc -> Just LangC
- Phase.Ccxx -> Just LangCxx
- Phase.Cobjc -> Just LangObjc
- Phase.Cobjcxx -> Just LangObjcxx
- Phase.HCc -> Just LangC
- _ -> Nothing
diff --git a/compiler/main/SysTools.hs b/compiler/main/SysTools.hs
index 6d14fd1229..9bbce19602 100644
--- a/compiler/main/SysTools.hs
+++ b/compiler/main/SysTools.hs
@@ -315,7 +315,6 @@ initSysTools top_dir
sOpt_P_fingerprint = fingerprint0,
sOpt_F = [],
sOpt_c = [],
- sOpt_cxx = [],
sOpt_a = [],
sOpt_l = [],
sOpt_windres = [],
diff --git a/compiler/main/SysTools/ExtraObj.hs b/compiler/main/SysTools/ExtraObj.hs
index 149d3a678a..774884a0d7 100644
--- a/compiler/main/SysTools/ExtraObj.hs
+++ b/compiler/main/SysTools/ExtraObj.hs
@@ -40,7 +40,7 @@ mkExtraObj dflags extn xs
oFile <- newTempName dflags TFL_GhcSession "o"
writeFile cFile xs
ccInfo <- liftIO $ getCompilerInfo dflags
- runCc Nothing dflags
+ runCc dflags
([Option "-c",
FileOption "" cFile,
Option "-o",
diff --git a/compiler/main/SysTools/Tasks.hs b/compiler/main/SysTools/Tasks.hs
index 72f01f63bc..ce71ccb170 100644
--- a/compiler/main/SysTools/Tasks.hs
+++ b/compiler/main/SysTools/Tasks.hs
@@ -10,7 +10,6 @@ module SysTools.Tasks where
import Exception
import ErrUtils
-import HscTypes
import DynFlags
import Outputable
import Platform
@@ -59,18 +58,13 @@ runPp dflags args = do
runSomething dflags "Haskell pre-processor" prog (args ++ opts)
-- | Run compiler of C-like languages and raw objects (such as gcc or clang).
-runCc :: Maybe ForeignSrcLang -> DynFlags -> [Option] -> IO ()
-runCc mLanguage dflags args = do
+runCc :: DynFlags -> [Option] -> IO ()
+runCc dflags args = do
let (p, args0) = pgm_c dflags
- filteredArgs0 =
- if mLanguage == Just LangCxx
- then filter (/= Option "-std=gnu99") args0 -- it's default for C++
- else args0
- args1 = map Option userOpts
- args2 = filteredArgs0 ++ languageOptions ++ args ++ args1
-
-- We take care to pass -optc flags in args1 last to ensure that the
-- user can override flags passed by GHC. See #14452.
+ args1 = map Option (getOpts dflags opt_c)
+ args2 = args0 ++ args ++ args1
mb_env <- getGccEnv args2
runSomethingResponseFile dflags cc_filter "C Compiler" p args2 mb_env
where
@@ -124,21 +118,6 @@ runCc mLanguage dflags args = do
| "warning: call-clobbered register used" `isContainedIn` w = False
| otherwise = True
- -- force the C compiler to interpret this file as C when
- -- compiling .hc files, by adding the -x c option.
- -- Also useful for plain .c files, just in case GHC saw a
- -- -x c option.
- (languageOptions, userOpts) = case mLanguage of
- Nothing -> ([], userOpts_c)
- Just language -> ([Option "-x", Option languageName], opts) where
- (languageName, opts) = case language of
- LangCxx -> ("c++", userOpts_cxx)
- LangObjc -> ("objective-c", userOpts_c)
- LangObjcxx -> ("objective-c++", userOpts_cxx)
- _ -> ("c", userOpts_c)
- userOpts_c = getOpts dflags opt_c
- userOpts_cxx = getOpts dflags opt_cxx
-
isContainedIn :: String -> String -> Bool
xs `isContainedIn` ys = any (xs `isPrefixOf`) (tails ys)
diff --git a/docs/users_guide/phases.rst b/docs/users_guide/phases.rst
index 2a17edbba7..f5f735b81b 100644
--- a/docs/users_guide/phases.rst
+++ b/docs/users_guide/phases.rst
@@ -154,13 +154,6 @@ the following flags:
Pass ⟨option⟩ to the C compiler.
-.. ghc-flag:: -optcxx ⟨option⟩
- :shortdesc: pass ⟨option⟩ to the C++ compiler
- :type: dynamic
- :category: phase-options
-
- Pass ⟨option⟩ to the C++ compiler.
-
.. ghc-flag:: -optlo ⟨option⟩
:shortdesc: pass ⟨option⟩ to the LLVM optimiser
:type: dynamic
diff --git a/testsuite/tests/driver/T16737.hs b/testsuite/tests/driver/T16737.hs
index facc15cb43..0abe5457b0 100644
--- a/testsuite/tests/driver/T16737.hs
+++ b/testsuite/tests/driver/T16737.hs
@@ -1,5 +1,5 @@
{-# LANGUAGE TemplateHaskell #-}
-{-# OPTIONS_GHC -DFOO=2 -optP=-DBAR=3 -optc=-DBAZ=5 -optcxx=-DBAZ=5 #-}
+{-# OPTIONS_GHC -DFOO=2 -optP=-DBAR=3 -optc=-DBAZ=5 #-}
import Language.Haskell.TH.Syntax
diff --git a/testsuite/tests/ffi/should_compile/all.T b/testsuite/tests/ffi/should_compile/all.T
index 1aa32c87d5..0f2f3901c4 100644
--- a/testsuite/tests/ffi/should_compile/all.T
+++ b/testsuite/tests/ffi/should_compile/all.T
@@ -32,12 +32,3 @@ test('cc016', normal, compile, [''])
test('T10460', normal, compile, [''])
test('T11983', [omit_ways(['ghci'])], compile, ['T11983.c'])
test('T14125', normal, compile, [''])
-test(
- 'cc017',
- normal,
- compile,
- [
- '-optc=-DC -optcxx=-DCXX -optcxx=-std=c++11'
- + (' -optcxx=-stdlib=libc++' if opsys('darwin') else '')
- ],
-)
diff --git a/testsuite/tests/ffi/should_compile/cc017.hs b/testsuite/tests/ffi/should_compile/cc017.hs
deleted file mode 100644
index a0ff8163db..0000000000
--- a/testsuite/tests/ffi/should_compile/cc017.hs
+++ /dev/null
@@ -1,19 +0,0 @@
-{-# LANGUAGE TemplateHaskell #-}
-
-import Language.Haskell.TH.Syntax
-
--- Check -optc and -optcxx options passing.
--- This file must be compiled with -optc=-DC -optcxx=-DCXX
-
-do addForeignSource LangC
- "int CXX = 0; // -DCXX must not be passed to C \n\
- \_Static_assert(C, \"name C must come from -DC\"); "
-
- addForeignSource LangCxx
- "int C = 0; // -DC must not be passed to C++ \n\
- \static_assert(CXX, \"name CXX must come from -DCXX\"); "
-
- pure []
-
-main :: IO ()
-main = pure ()
diff --git a/testsuite/tests/th/T13366.hs b/testsuite/tests/th/T13366.hs
index 7d998f2ae8..6a3bda3d09 100644
--- a/testsuite/tests/th/T13366.hs
+++ b/testsuite/tests/th/T13366.hs
@@ -1,6 +1,6 @@
{-# LANGUAGE ForeignFunctionInterface #-}
{-# LANGUAGE TemplateHaskell #-}
-{-# OPTIONS_GHC -optc-DA_MACRO=1 -optcxx-DA_MACRO=1 #-}
+{-# OPTIONS_GHC -optc-DA_MACRO=1 #-}
import Language.Haskell.TH.Syntax
import System.IO (hFlush, stdout)