Skip to content

Commit aef03c9

Browse files
committed
[clang][auto-init] Deprecate -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang
GCC 12 has been released and contains unconditional support for -ftrivial-auto-var-init=zero: https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#index-ftrivial-auto-var-init Maintain compatibility with GCC, and remove the -enable flag for "zero" mode. The flag is left to generate an "unused" warning, though, to not break all the existing users. The flag will be fully removed in Clang 17. Link: llvm#44842 Reviewed By: nickdesaulniers, MaskRay, srhines, xbolva00 Differential Revision: https://reviews.llvm.org/D125142
1 parent facfdbe commit aef03c9

File tree

6 files changed

+17
-17
lines changed

6 files changed

+17
-17
lines changed

clang/docs/ReleaseNotes.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,10 @@ New Compiler Flags
277277

278278
Deprecated Compiler Flags
279279
-------------------------
280+
- ``-enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang``
281+
has been deprecated. The flag will be removed in Clang 18.
282+
``-ftrivial-auto-var-init=zero`` is now available unconditionally, to be
283+
compatible with GCC.
280284

281285
Modified Compiler Flags
282286
-----------------------

clang/include/clang/Basic/DiagnosticDriverKinds.td

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -588,11 +588,6 @@ def warn_drv_darwin_sdk_invalid_settings : Warning<
588588
"SDK settings were ignored as 'SDKSettings.json' could not be parsed">,
589589
InGroup<DiagGroup<"darwin-sdk-settings">>;
590590

591-
def err_drv_trivial_auto_var_init_zero_disabled : Error<
592-
"'-ftrivial-auto-var-init=zero' hasn't been enabled; enable it at your own "
593-
"peril for benchmarking purpose only with "
594-
"'-enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang'">;
595-
596591
def err_drv_trivial_auto_var_init_stop_after_missing_dependency : Error<
597592
"'-ftrivial-auto-var-init-stop-after=*' is used without "
598593
"'-ftrivial-auto-var-init=zero' or '-ftrivial-auto-var-init=pattern'">;

clang/include/clang/Driver/Options.td

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,12 @@ def : Flag<["-"], "fno-slp-vectorize-aggressive">, Group<clang_ignored_legacy_op
247247
def mmpx : Flag<["-"], "mmpx">, Group<clang_ignored_legacy_options_Group>;
248248
def mno_mpx : Flag<["-"], "mno-mpx">, Group<clang_ignored_legacy_options_Group>;
249249

250+
// Retired with clang-16.0, to provide a deprecation period; it should
251+
// be removed in Clang 18 or later.
252+
def enable_trivial_var_init_zero : Flag<["-"], "enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang">,
253+
Flags<[CC1Option, CoreOption, NoArgumentUnused]>,
254+
Group<clang_ignored_legacy_options_Group>;
255+
250256
// Group that ignores all gcc optimizations that won't be implemented
251257
def clang_ignored_gcc_optimization_f_Group : OptionGroup<
252258
"<clang_ignored_gcc_optimization_f_Group>">, Group<f_Group>, Flags<[Ignored]>;
@@ -2791,9 +2797,6 @@ def ftrivial_auto_var_init : Joined<["-"], "ftrivial-auto-var-init=">, Group<f_G
27912797
NormalizedValuesScope<"LangOptions::TrivialAutoVarInitKind">,
27922798
NormalizedValues<["Uninitialized", "Zero", "Pattern"]>,
27932799
MarshallingInfoEnum<LangOpts<"TrivialAutoVarInit">, "Uninitialized">;
2794-
def enable_trivial_var_init_zero : Flag<["-"], "enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang">,
2795-
Flags<[CC1Option, CoreOption, NoArgumentUnused]>,
2796-
HelpText<"Trivial automatic variable initialization to zero is only here for benchmarks, it'll eventually be removed, and I'm OK with that because I'm only using it to benchmark">;
27972800
def ftrivial_auto_var_init_stop_after : Joined<["-"], "ftrivial-auto-var-init-stop-after=">, Group<f_Group>,
27982801
Flags<[CC1Option, CoreOption]>, HelpText<"Stop initializing trivial automatic stack variables after the specified number of instances">,
27992802
MarshallingInfoInt<LangOpts<"TrivialAutoVarInitStopAfter">>;

clang/lib/Driver/ToolChains/Clang.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3458,8 +3458,6 @@ static void RenderTrivialAutoVarInitOptions(const Driver &D,
34583458
}
34593459

34603460
if (!TrivialAutoVarInit.empty()) {
3461-
if (TrivialAutoVarInit == "zero" && !Args.hasArg(options::OPT_enable_trivial_var_init_zero))
3462-
D.Diag(diag::err_drv_trivial_auto_var_init_zero_disabled);
34633461
CmdArgs.push_back(
34643462
Args.MakeArgString("-ftrivial-auto-var-init=" + TrivialAutoVarInit));
34653463
}

clang/test/Driver/cl-options.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -719,7 +719,6 @@
719719
// RUN: -fimplicit-modules \
720720
// RUN: -fno-implicit-modules \
721721
// RUN: -ftrivial-auto-var-init=zero \
722-
// RUN: -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang \
723722
// RUN: --version \
724723
// RUN: -Werror /Zs -- %s 2>&1
725724

clang/test/Driver/clang_f_opts.c

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -569,18 +569,19 @@
569569

570570
// RUN: %clang -### -S -ftrivial-auto-var-init=uninitialized %s 2>&1 | FileCheck -check-prefix=CHECK-TRIVIAL-UNINIT %s
571571
// RUN: %clang -### -S -ftrivial-auto-var-init=pattern %s 2>&1 | FileCheck -check-prefix=CHECK-TRIVIAL-PATTERN %s
572-
// RUN: %clang -### -S -ftrivial-auto-var-init=zero -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang %s 2>&1 | FileCheck -check-prefix=CHECK-TRIVIAL-ZERO-GOOD %s
573-
// RUN: %clang -### -S -ftrivial-auto-var-init=zero %s 2>&1 | FileCheck -check-prefix=CHECK-TRIVIAL-ZERO-BAD %s
572+
// RUN: %clang -### -S -ftrivial-auto-var-init=zero %s 2>&1 | FileCheck -check-prefix=CHECK-TRIVIAL-ZERO %s
573+
// RUN: %clang -### -S -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang \
574+
// RUN: -ftrivial-auto-var-init=zero %s 2>&1 | FileCheck -check-prefix=CHECK-TRIVIAL-ZERO-ENABLE-DEPRECATED %s
574575
// CHECK-TRIVIAL-UNINIT-NOT: hasn't been enabled
575576
// CHECK-TRIVIAL-PATTERN-NOT: hasn't been enabled
576-
// CHECK-TRIVIAL-ZERO-GOOD-NOT: hasn't been enabled
577-
// CHECK-TRIVIAL-ZERO-BAD: hasn't been enabled
577+
// CHECK-TRIVIAL-ZERO-NOT: hasn't been enabled
578+
// CHECK-TRIVIAL-ZERO-ENABLE-DEPRECATED: has been deprecated
578579

579580
// RUN: %clang -### -S -ftrivial-auto-var-init=pattern -ftrivial-auto-var-init-stop-after=1 %s 2>&1 | FileCheck -check-prefix=CHECK-TRIVIAL-PATTERN-STOP-AFTER %s
580-
// RUN: %clang -### -S -ftrivial-auto-var-init=zero -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang -ftrivial-auto-var-init-stop-after=1 %s 2>&1 | FileCheck -check-prefix=CHECK-TRIVIAL-ZERO-STOP-AFTER %s
581+
// RUN: %clang -### -S -ftrivial-auto-var-init=zero -ftrivial-auto-var-init-stop-after=1 %s 2>&1 | FileCheck -check-prefix=CHECK-TRIVIAL-ZERO-STOP-AFTER %s
581582
// RUN: %clang -### -S -ftrivial-auto-var-init-stop-after=0 %s 2>&1 | FileCheck -check-prefix=CHECK-TRIVIAL-STOP-AFTER-MISSING-DEPENDENCY %s
582583
// RUN: %clang -### -S -ftrivial-auto-var-init=pattern -ftrivial-auto-var-init-stop-after=0 %s 2>&1 | FileCheck -check-prefix=CHECK-TRIVIAL-PATTERN-STOP-AFTER-INVALID-VALUE %s
583-
// RUN: %clang -### -S -ftrivial-auto-var-init=zero -enable-trivial-auto-var-init-zero-knowing-it-will-be-removed-from-clang -ftrivial-auto-var-init-stop-after=0 %s 2>&1 | FileCheck -check-prefix=CHECK-TRIVIAL-ZERO-STOP-AFTER-INVALID-VALUE %s
584+
// RUN: %clang -### -S -ftrivial-auto-var-init=zero -ftrivial-auto-var-init-stop-after=0 %s 2>&1 | FileCheck -check-prefix=CHECK-TRIVIAL-ZERO-STOP-AFTER-INVALID-VALUE %s
584585
// CHECK-TRIVIAL-PATTERN-STOP-AFTER-NOT: is used without '-ftrivial-auto-var-init'
585586
// CHECK-TRIVIAL-PATTERN-STOP-AFTER-NOT: only accepts positive integers
586587
// CHECK-TRIVIAL-ZERO-STOP-AFTER-NOT: is used without '-ftrivial-auto-var-init'

0 commit comments

Comments
 (0)