On Fri, Sep 18, 2020 at 5:20 AM Jason Merrill via Gcc-patches
<gcc-patches@gcc.gnu.org> wrote:
>
> Martin's -Wplacement-new patch ran into a problem with DECL_SIZE not being
> set on an extern variable for which the type was not complete until after
> its declaration.  complete_vars was deliberately not calling layout_decl for
> some reason, instead leaving that for expand_expr_real_1 much later in the
> compilation.  But if we layout decls at declaration time, I don't see any
> reason we shouldn't lay them out here, when their type is newly complete.
>
> Tested x86_64-pc-linux-gnu, applying to trunk.

Seems to break bootstrap in stage2,

/home/rguenther/src/trunk/gcc/dumpfile.c:169:33: error: storage size
of 'optgroup_options' isn't known

Richard.

> gcc/cp/ChangeLog:
>
>         * decl.c (complete_vars): Call layout_var_decl.
> ---
>  gcc/cp/decl.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
> index ad2a30fcf71..746ed101fef 100644
> --- a/gcc/cp/decl.c
> +++ b/gcc/cp/decl.c
> @@ -17460,10 +17460,10 @@ complete_vars (tree type)
>               && (TYPE_MAIN_VARIANT (strip_array_types (type))
>                   == iv->incomplete_type))
>             {
> -             /* Complete the type of the variable.  The VAR_DECL itself
> -                will be laid out in expand_expr.  */
> +             /* Complete the type of the variable.  */
>               complete_type (type);
>               cp_apply_type_quals_to_decl (cp_type_quals (type), var);
> +             layout_var_decl (var);
>             }
>
>           /* Remove this entry from the list.  */
>
> base-commit: 0f079e104a8d1994b6b47169a6b45737615eb2d7
> --
> 2.18.1
>

Reply via email to