]> gcc.gnu.org Git - gcc.git/commitdiff
d: Move call to set_linkage_for_decl to declare_extern_var.
authorIain Buclaw <ibuclaw@gdcproject.org>
Tue, 13 Apr 2021 14:19:03 +0000 (16:19 +0200)
committerIain Buclaw <ibuclaw@gdcproject.org>
Wed, 14 Apr 2021 12:43:38 +0000 (14:43 +0200)
This both prevents against it being called twice for declarations that
are defined, and fixes an issue where variables defined in the
compilation get one kind of linkage (weak), and the same variables
declared via declare_extern_var get another (extern).

gcc/d/ChangeLog:

PR d/99914
* decl.cc (DeclVisitor::visit (StructDeclaration *)): Don't set
DECL_INSTANTIATED on static initializer declarations.
(DeclVisitor::visit (ClassDeclaration *)): Likewise.
(DeclVisitor::visit (EnumDeclaration *)): Likewise.
(d_finish_decl): Move call to set_linkage_for_decl to...
(declare_extern_var): ...here.

gcc/d/decl.cc

index b07068ed6ca33613f11977a5ad25d4d1be17ecff..8948e40e9027e8fb010d10c32ebfdafa49881474 100644 (file)
@@ -387,7 +387,6 @@ public:
     /* Generate static initializer.  */
     d->sinit = aggregate_initializer_decl (d);
     DECL_INITIAL (d->sinit) = layout_struct_initializer (d);
-    DECL_INSTANTIATED (d->sinit) = (d->isInstantiated () != NULL);
     d_finish_decl (d->sinit);
 
     /* Put out the members.  There might be static constructors in the members
@@ -500,7 +499,6 @@ public:
 
     /* Generate static initializer.  */
     DECL_INITIAL (d->sinit) = layout_class_initializer (d);
-    DECL_INSTANTIATED (d->sinit) = (d->isInstantiated () != NULL);
     d_finish_decl (d->sinit);
 
     /* Put out the TypeInfo.  */
@@ -611,7 +609,6 @@ public:
        /* Generate static initializer.  */
        d->sinit = enum_initializer_decl (d);
        DECL_INITIAL (d->sinit) = build_expr (tc->sym->defaultval, true);
-       DECL_INSTANTIATED (d->sinit) = (d->isInstantiated () != NULL);
        d_finish_decl (d->sinit);
       }
 
@@ -1379,6 +1376,8 @@ declare_extern_var (tree ident, tree type)
   /* The decl has not been defined -- yet.  */
   DECL_EXTERNAL (decl) = 1;
 
+  set_linkage_for_decl (decl);
+
   return decl;
 }
 
@@ -1540,7 +1539,6 @@ d_finish_decl (tree decl)
     set_decl_tls_model (decl, decl_default_tls_model (decl));
 
   relayout_decl (decl);
-  set_linkage_for_decl (decl);
 
   if (flag_checking && DECL_INITIAL (decl))
     {
This page took 0.06681 seconds and 5 git commands to generate.