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 >