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.

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

Reply via email to