From: Jason Merrill Date: Fri, 4 Sep 2020 16:14:19 +0000 (-0400) Subject: c++: Layout decls with newly-complete type. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f627125855075f7ffde74e48481ee961f0bc4c7b;p=gcc.git c++: Layout decls with newly-complete type. 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. gcc/cp/ChangeLog: * decl.c (complete_vars): Call layout_var_decl. --- 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. */