diff options
| author | Saleem Abdulrasool <compnerd@compnerd.org> | 2016-06-10 20:12:00 +0000 |
|---|---|---|
| committer | Saleem Abdulrasool <compnerd@compnerd.org> | 2016-06-10 20:12:00 +0000 |
| commit | 094f17beebea8fb909e99747979707a1bc1ceec4 (patch) | |
| tree | ca0e9e013cc8afed9d8d5ca246aec01cde17f88c | |
| parent | 6c42aa777e65e8ef2a3ae08aa6eaf083306b28dd (diff) | |
| download | bcm5719-llvm-094f17beebea8fb909e99747979707a1bc1ceec4.tar.gz bcm5719-llvm-094f17beebea8fb909e99747979707a1bc1ceec4.zip | |
Driver: make it easier to select the SjLj EH model
GCC still permits enabling the SjLj EH model. This is something which can be
done on various targets. Hoist the -fsjlj-exceptions option into the driver and
pass it through. This allows one to opt into the alternative EH model while
retaining the default to be the target's default.
Resolves PR27749!
llvm-svn: 272424
| -rw-r--r-- | clang/include/clang/Driver/CC1Options.td | 2 | ||||
| -rw-r--r-- | clang/include/clang/Driver/Options.td | 2 | ||||
| -rw-r--r-- | clang/lib/Driver/Tools.cpp | 3 | ||||
| -rw-r--r-- | clang/test/Driver/fsjlj-exceptions.c | 8 |
4 files changed, 12 insertions, 3 deletions
diff --git a/clang/include/clang/Driver/CC1Options.td b/clang/include/clang/Driver/CC1Options.td index 3db255e6834..39aac92dc07 100644 --- a/clang/include/clang/Driver/CC1Options.td +++ b/clang/include/clang/Driver/CC1Options.td @@ -527,8 +527,6 @@ def fblocks_runtime_optional : Flag<["-"], "fblocks-runtime-optional">, HelpText<"Weakly link in the blocks runtime">; def fexternc_nounwind : Flag<["-"], "fexternc-nounwind">, HelpText<"Assume all functions with C linkage do not unwind">; -def fsjlj_exceptions : Flag<["-"], "fsjlj-exceptions">, - HelpText<"Use SjLj style exceptions">; def split_dwarf_file : Separate<["-"], "split-dwarf-file">, HelpText<"File name to use for split dwarf debug info output">; def fno_wchar : Flag<["-"], "fno-wchar">, diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 0ac697dc6c6..67a3ea1ac6a 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -584,6 +584,8 @@ def fencoding_EQ : Joined<["-"], "fencoding=">, Group<f_Group>; def ferror_limit_EQ : Joined<["-"], "ferror-limit=">, Group<f_Group>, Flags<[CoreOption]>; def fexceptions : Flag<["-"], "fexceptions">, Group<f_Group>, Flags<[CC1Option]>, HelpText<"Enable support for exception handling">; +def fsjlj_exceptions : Flag<["-"], "fsjlj-exceptions">, Group<f_Group>, + Flags<[CC1Option]>, HelpText<"Use SjLj style exceptions">; def fexcess_precision_EQ : Joined<["-"], "fexcess-precision=">, Group<clang_ignored_gcc_optimization_f_Group>; def : Flag<["-"], "fexpensive-optimizations">, Group<clang_ignored_gcc_optimization_f_Group>; diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 1190b51b86f..9b715e361e2 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -5495,7 +5495,8 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, addExceptionArgs(Args, InputType, getToolChain(), KernelOrKext, objcRuntime, CmdArgs); - if (getToolChain().UseSjLjExceptions(Args)) + if (Args.hasArg(options::OPT_fsjlj_exceptions) || + getToolChain().UseSjLjExceptions(Args)) CmdArgs.push_back("-fsjlj-exceptions"); // C++ "sane" operator new. diff --git a/clang/test/Driver/fsjlj-exceptions.c b/clang/test/Driver/fsjlj-exceptions.c new file mode 100644 index 00000000000..f44d5b3e1ef --- /dev/null +++ b/clang/test/Driver/fsjlj-exceptions.c @@ -0,0 +1,8 @@ +// RUN: %clang -target armv7-apple-ios -fexceptions -c %s -o /dev/null -### 2>&1 | FileCheck -check-prefix CHECK-IOS %s +// RUN: %clang -target i686-windows-gnu -fexceptions -c %s -o /dev/null -### 2>&1 | FileCheck -check-prefix CHECK-MINGW-DEFAULT %s +// RUN: %clang -target i686-windows-gnu -fexceptions -fsjlj-exceptions -c %s -o /dev/null -### 2>&1 | FileCheck -check-prefix CHECK-MINGW-SJLJ %s + +// CHECK-IOS: -fsjlj-exceptions +// CHECK-MINGW-DEFAULT-NOT: -fsjlj-exceptions +// CHECK-MINGW-SJLJ: -fsjlj-exceptions + |

