summaryrefslogtreecommitdiffstats
path: root/clang/lib/Driver/Tools.cpp
diff options
context:
space:
mode:
authorFilipe Cabecinhas <me@filcab.net>2015-01-31 23:05:51 +0000
committerFilipe Cabecinhas <me@filcab.net>2015-01-31 23:05:51 +0000
commitf2a3aec5c77475b7eefed464e3cc5cd93303989e (patch)
treefc3316391ddb93ae1f1cda036ec2b5c306e49d8a /clang/lib/Driver/Tools.cpp
parent8251d741f454cf0268da59a58ea0442e08fc2f93 (diff)
downloadbcm5719-llvm-f2a3aec5c77475b7eefed464e3cc5cd93303989e.tar.gz
bcm5719-llvm-f2a3aec5c77475b7eefed464e3cc5cd93303989e.zip
Tweak behavior due to -fexceptions, in C++ mode, imply -fcxx-exceptions
Added test llvm-svn: 227695
Diffstat (limited to 'clang/lib/Driver/Tools.cpp')
-rw-r--r--clang/lib/Driver/Tools.cpp14
1 files changed, 11 insertions, 3 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp
index 512aad2ca69..35e3691ec26 100644
--- a/clang/lib/Driver/Tools.cpp
+++ b/clang/lib/Driver/Tools.cpp
@@ -3949,6 +3949,7 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
if (!Args.hasFlag(options::OPT_frtti, options::OPT_fno_rtti,
!Triple.isPS4CPU()) ||
KernelOrKext) {
+ bool IsCXX = types::isCXX(InputType);
bool RTTIEnabled = false;
Arg *NoRTTIArg = Args.getLastArg(
options::OPT_mkernel, options::OPT_fapple_kext, options::OPT_fno_rtti);
@@ -3956,11 +3957,18 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
// PS4 requires rtti when exceptions are enabled. If -fno-rtti was
// explicitly passed, error out. Otherwise enable rtti and emit a
// warning.
- if (Triple.isPS4CPU()) {
- if (Arg *A = Args.getLastArg(options::OPT_fcxx_exceptions)) {
+ Arg *Exceptions = Args.getLastArg(
+ options::OPT_fcxx_exceptions, options::OPT_fno_cxx_exceptions,
+ options::OPT_fexceptions, options::OPT_fno_exceptions);
+ if (Triple.isPS4CPU() && Exceptions) {
+ bool CXXExceptions =
+ (IsCXX &&
+ Exceptions->getOption().matches(options::OPT_fexceptions)) ||
+ Exceptions->getOption().matches(options::OPT_fcxx_exceptions);
+ if (CXXExceptions) {
if (NoRTTIArg)
D.Diag(diag::err_drv_argument_not_allowed_with)
- << NoRTTIArg->getAsString(Args) << A->getAsString(Args);
+ << NoRTTIArg->getAsString(Args) << Exceptions->getAsString(Args);
else {
RTTIEnabled = true;
D.Diag(diag::warn_drv_enabling_rtti_with_exceptions);
OpenPOWER on IntegriCloud