diff options
author | Jason Merrill <jason@redhat.com> | 2020-09-04 12:14:19 -0400 |
---|---|---|
committer | Jason Merrill <jason@redhat.com> | 2020-09-17 23:19:59 -0400 |
commit | f627125855075f7ffde74e48481ee961f0bc4c7b (patch) | |
tree | 573d2cffbec860f231a7005ce0184d8c4f2d7a7e | |
parent | 2aad20c094b9ec47c678b4ca219a7342f4f22376 (diff) | |
download | gcc-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.c | 4 |
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. */ |