aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2020-09-04 12:14:19 -0400
committerJason Merrill <jason@redhat.com>2020-09-17 23:19:59 -0400
commitf627125855075f7ffde74e48481ee961f0bc4c7b (patch)
tree573d2cffbec860f231a7005ce0184d8c4f2d7a7e
parent2aad20c094b9ec47c678b4ca219a7342f4f22376 (diff)
downloadgcc-f627125855075f7ffde74e48481ee961f0bc4c7b.zip
gcc-f627125855075f7ffde74e48481ee961f0bc4c7b.tar.gz
gcc-f627125855075f7ffde74e48481ee961f0bc4c7b.tar.bz2
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.
-rw-r--r--gcc/cp/decl.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index ad2a30f..746ed10 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. */