[gcc r11-3274] c++: Layout decls with newly-complete type.
Jason Merrill
jason@gcc.gnu.org
Fri Sep 18 03:20:08 GMT 2020
https://gcc.gnu.org/g:f627125855075f7ffde74e48481ee961f0bc4c7b
commit r11-3274-gf627125855075f7ffde74e48481ee961f0bc4c7b
Author: Jason Merrill <jason@redhat.com>
Date: Fri Sep 4 12:14:19 2020 -0400
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:
---
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. */
More information about the Gcc-cvs
mailing list