diff options
author | Filipe Cabecinhas <me@filcab.net> | 2015-01-31 23:05:51 +0000 |
---|---|---|
committer | Filipe Cabecinhas <me@filcab.net> | 2015-01-31 23:05:51 +0000 |
commit | f2a3aec5c77475b7eefed464e3cc5cd93303989e (patch) | |
tree | fc3316391ddb93ae1f1cda036ec2b5c306e49d8a /clang/lib/Driver/Tools.cpp | |
parent | 8251d741f454cf0268da59a58ea0442e08fc2f93 (diff) | |
download | bcm5719-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.cpp | 14 |
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); |