[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