On Thu, Jan 13, 2022 at 2:45 AM Qing Zhao <qing.z...@oracle.com> wrote: > > Hi, Richard, > > This is the updated version for the second patch, which is mainly the change > for "Enable -Wuninitialized + -ftrivial-auto-var-init for address taken > variables”. > > In this update, I mainly made the following change: > > 1. Delete “repl_var”, use the var_def_stmt, i.e, the call to .DEFERRED_INIT > to record the warning suppressed info. > 2. Add and change the comments in multiple places to make the change more > readable. > > Now, for the deleted variable, we will get the necessary info to report > warning from the call to .DEFERRED_INIT. > > A. the name string of DECL from the 3rd parameter of the call; > B. the location of the DECL from the location of the call; > C. the call can also be used to hold the information on whether the > warning > has been issued or not to suppress warning messages when needed; > > Please see the detailed description below for the problem and solution of > this patch. > > This patch has been bootstrapped and regressing tested on both X86 and > aarch64. > > Okay for GCC12?
I think the change to split "%qD is used uninitialized" is bad for i8n though it seems like none of the strings passed to warn_uninit are currently marked for localization. I suppose there's lazy matching with the exact same strings passed to warning_at around like 641 but after your change those will no longer match up, at least for the "%qs ..." case constructed. I think a better way (for i8n) would be to pass down a flag whether it is "may" or "is" and have the full translatable strings literally passed to warning_at at the expense of some code duplication. Actually the extra flag is unnecessary, the OPT_W... we pass is already fully specifying that. Instead of doing + if (gimple_call_internal_p (var_def_stmt, IFN_DEFERRED_INIT)) + { + /* Ignore the call to .DEFERRED_INIT that define the original + var itself as the following case: + temp = .DEFERRED_INIT (4, 2, â~@~\alt_reloc"); + alt_reloc = temp; + In order to avoid generating warning for the fake usage + at alt_reloc = temp. ... I thought of many options, none really very appealing so I guess we have to go with this for now. So OK with the i8n thing sorted out - please post one hopefully last update for the patch. Thanks for your patience, Richard. > thanks. > > Qing. > > ======================== > Enable -Wuninitialized + -ftrivial-auto-var-init for address > taken variables. > > With -ftrivial-auto-var-init, the address taken auto variable is replaced with > a temporary variable during gimplification, and the original auto variable > might > be eliminated by compiler optimization completely. As a result, the current > uninitialized warning analysis cannot get enough information from the IR, > therefore the uninitialized warnings for address taken variable cannot be > issued based on the current implemenation of -ftrival-auto-var-init. > > For more info please refer to: > https://gcc.gnu.org/pipermail/gcc-patches/2021-August/577431.html > > In order to improve this situation, we can improve uninitialized analysis > for address taken auto variables with -ftrivial-auto-var-init as following: > > for the following stmt: > > _1 = .DEFERRED_INIT (4, 2, &"alt_reloc"[0]); > if (_1 != 0) > > The original variable DECL has been eliminated from the IR, all the necessary > information that is needed for reporting the warnings for DECL can be acquired > from the call to .DEFERRED_INIT. > > A. the name string of DECL from the 3rd parameter of the call; > B. the location of the DECL from the location of the call; > C. the call can also be used to hold the information on whether the > warning > has been issued or not to suppress warning messages when needed; > > The current testing cases for uninitialized warnings + -ftrivial-auto-var-init > are adjusted to reflect the fact that we can issue warnings for address taken > variables. > > gcc/ChangeLog: > > 2022-01-12 qing zhao <qing.z...@oracle.com> > > * tree-ssa-uninit.c (warn_uninit): Handle .DEFERRED_INIT call with an > anonymous SSA_NAME specially. > (check_defs): Likewise. > (warn_uninit_phi_uses): Adjust the message format for warn_uninit. > (warn_uninitialized_vars): Likewise. > (warn_uninitialized_phi): Likewise > > gcc/testsuite/ChangeLog: > > 2022-01-12 qing zhao <qing.z...@oracle.com> > > * gcc.dg/auto-init-uninit-16.c (testfunc): Delete xfail to reflect > the fact that address taken variable can be warned. > * gcc.dg/auto-init-uninit-34.c (warn_scalar_1): Likewise. > (warn_scalar_2): Likewise. > * gcc.dg/auto-init-uninit-37.c (T1): Likewise. > (T2): Likewise. > * gcc.dg/auto-init-uninit-B.c (baz): Likewise. > > The complete patch is attached: >