[Patch][V5][Patch 2/2]Enable -Wuninitialized + -ftrivial-auto-var-init for address taken variables.

Richard Biener richard.guenther@gmail.com
Mon Jan 17 11:36:50 GMT 2022

On Sat, Jan 15, 2022 at 5:49 PM Qing Zhao <qing.zhao@oracle.com> wrote:
> Hi, Richard,
> This is the updated version for the change of "Enable -Wuninitialized + -ftrivial-auto-var-init for  address taken variables”.
> Compared to the previous patch, I mainly made the following change:
> Delete the 4th parameter of “warn_uninit”, construct the warning message string based on the value of OPT and VAR.
> This patch has been bootstrapped and regressing tested on both X86 and aarch64.
> Okay for GCC12?
> 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-14  qing zhao  <qing.zhao@oracle.com>
>         * tree-ssa-uninit.c (warn_uninit): Delete the 4th parameter. Handle
>         .DEFERRED_INIT call with an anonymous SSA_NAME specially.
>         (check_defs): Handle .DEFERRED_INIT call with an anonymous SSA_NAME
>         specially.
>         (warn_uninit_phi_uses): Delete the 4th actual when call warn_uninit.
>         (warn_uninitialized_vars): Likewise.
>         (warn_uninitialized_phi): Likewise.
> The complete patch is:

More information about the Gcc-patches mailing list