forked from OSchip/llvm-project
Add toggling for -fnew-infallible/-fno-new-infallible
Allow toggling of -fnew-infallible so last instance takes precedence Testing: ninja check-all Reviewed By: bruno Differential Revision: https://reviews.llvm.org/D113523
This commit is contained in:
parent
520f641877
commit
47f230ba2c
|
@ -1941,9 +1941,9 @@ Microsoft compiler version number to report in \_MSC\_VER (0 = don't define it (
|
|||
|
||||
Specifies the largest alignment guaranteed by '::operator new(size\_t)'
|
||||
|
||||
.. option:: -fnew-infallible
|
||||
.. option:: -fnew-infallible, -fno-new-infallible
|
||||
|
||||
Treats throwing global C++ operator new as always returning valid memory (annotates with \_\_attribute\_\_((returns\_nonnull)) and throw()). This is detectable in source.
|
||||
Enable treating throwing global C++ operator new as always returning valid memory (annotates with \_\_attribute\_\_((returns\_nonnull)) and throw()). This is detectable in source.
|
||||
|
||||
.. option:: -fnext-runtime
|
||||
|
||||
|
|
|
@ -2789,10 +2789,11 @@ def fvisibility_ms_compat : Flag<["-"], "fvisibility-ms-compat">, Group<f_Group>
|
|||
def fvisibility_global_new_delete_hidden : Flag<["-"], "fvisibility-global-new-delete-hidden">, Group<f_Group>,
|
||||
HelpText<"Give global C++ operator new and delete declarations hidden visibility">, Flags<[CC1Option]>,
|
||||
MarshallingInfoFlag<LangOpts<"GlobalAllocationFunctionVisibilityHidden">>;
|
||||
def fnew_infallible : Flag<["-"], "fnew-infallible">, Group<f_Group>,
|
||||
HelpText<"Treats throwing global C++ operator new as always returning valid memory "
|
||||
"(annotates with __attribute__((returns_nonnull)) and throw()). This is detectable in source.">,
|
||||
Flags<[CC1Option]>, MarshallingInfoFlag<LangOpts<"NewInfallible">>;
|
||||
defm new_infallible : BoolFOption<"new-infallible",
|
||||
LangOpts<"NewInfallible">, DefaultFalse,
|
||||
PosFlag<SetTrue, [], "Enable">, NegFlag<SetFalse, [], "Disable">,
|
||||
BothFlags<[CC1Option], " treating throwing global C++ operator new as always returning valid memory "
|
||||
"(annotates with __attribute__((returns_nonnull)) and throw()). This is detectable in source.">>;
|
||||
defm whole_program_vtables : BoolFOption<"whole-program-vtables",
|
||||
CodeGenOpts<"WholeProgramVTables">, DefaultFalse,
|
||||
PosFlag<SetTrue, [CC1Option], "Enables whole-program vtable optimization. Requires -flto">,
|
||||
|
|
|
@ -5821,9 +5821,12 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
Args.AddLastArg(CmdArgs, options::OPT_fvisibility_inlines_hidden_static_local_var,
|
||||
options::OPT_fno_visibility_inlines_hidden_static_local_var);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_fvisibility_global_new_delete_hidden);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_fnew_infallible);
|
||||
Args.AddLastArg(CmdArgs, options::OPT_ftlsmodel_EQ);
|
||||
|
||||
if (Args.hasFlag(options::OPT_fnew_infallible,
|
||||
options::OPT_fno_new_infallible, false))
|
||||
CmdArgs.push_back("-fnew-infallible");
|
||||
|
||||
if (Args.hasFlag(options::OPT_fno_operator_names,
|
||||
options::OPT_foperator_names, false))
|
||||
CmdArgs.push_back("-fno-operator-names");
|
||||
|
|
|
@ -1,7 +1,16 @@
|
|||
// RUN: %clang_cc1 -emit-llvm -triple x86_64-linux-gnu -fnew-infallible -o - %s | FileCheck %s
|
||||
// RUN: %clang_cc1 -emit-llvm -triple x86_64-linux-gnu -fno-new-infallible -fnew-infallible -o - %s | FileCheck %s
|
||||
// RUN: %clang_cc1 -emit-llvm -triple x86_64-linux-gnu -fno-new-infallible -o - %s | FileCheck %s --check-prefix=NO-NEW-INFALLIBLE
|
||||
// RUN: %clang_cc1 -emit-llvm -triple x86_64-linux-gnu -fnew-infallible -fno-new-infallible -o - %s | FileCheck %s --check-prefix=NO-NEW-INFALLIBLE
|
||||
|
||||
// CHECK: call noalias nonnull i8* @_Znwm(i64 4)
|
||||
|
||||
// CHECK: ; Function Attrs: nobuiltin nounwind allocsize(0)
|
||||
// CHECK-NEXT: declare nonnull i8* @_Znwm(i64)
|
||||
|
||||
// NO-NEW-INFALLIBLE: call noalias nonnull i8* @_Znwm(i64 4)
|
||||
|
||||
// NO-NEW-INFALLIBLE: ; Function Attrs: nobuiltin allocsize(0)
|
||||
// NO-NEW-INFALLIBLE-NEXT: declare nonnull i8* @_Znwm(i64)
|
||||
|
||||
int *new_infallible = new int;
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
// RUN: %clang -### -S -fno-new-infallible -fnew-infallible %s 2>&1 | FileCheck --check-prefix=NEW-INFALLIBLE %s
|
||||
// NEW-INFALLIBLE: "-fnew-infallible"
|
||||
|
||||
// RUN: %clang -### -S -fnew-infallible -fno-new-infallible %s 2>&1 | FileCheck --check-prefix=NO-NEW-INFALLIBLE %s
|
||||
// NO-NEW-INFALLIBLE-NOT: "-fnew-infallible"
|
Loading…
Reference in New Issue