d: Don't generate per-module wrapper for calling DSO constructor/destructor.
The static constructor/destructor list only ever has one function to call in it, so mark the gdc.dso_ctor and gdc.dso_dtor functions as static ctor/dtor directly instead. gcc/d/ChangeLog: * config-lang.in (gtfiles): Remove modules.cc. * modules.cc (struct module_info): Remove GTY marker. (static_ctor_list): Remove variable. (static_dtor_list): Remove variable. (register_moduleinfo): Directly set DECL_STATIC_CONSTRUCTOR on dso_ctor, and DECL_STATIC_DESTRUCTOR on dso_dtor. (d_finish_compilation): Remove static ctor/dtor handling. gcc/testsuite/ChangeLog: * gdc.dg/gdc270a.d: Removed. * gdc.dg/gdc270b.d: Removed.
This commit is contained in:
parent
d21001c793
commit
65c001bfaf
@ -45,7 +45,7 @@ case "${noconfigdirs}" in
|
||||
;;
|
||||
esac
|
||||
|
||||
gtfiles="\$(srcdir)/d/d-tree.h \$(srcdir)/d/d-builtins.cc \$(srcdir)/d/d-lang.cc \$(srcdir)/d/modules.cc \$(srcdir)/d/typeinfo.cc"
|
||||
gtfiles="\$(srcdir)/d/d-tree.h \$(srcdir)/d/d-builtins.cc \$(srcdir)/d/d-lang.cc \$(srcdir)/d/typeinfo.cc"
|
||||
|
||||
# Do not build by default.
|
||||
build_by_default="no"
|
||||
|
||||
@ -75,7 +75,7 @@ static tree stop_minfo_node;
|
||||
/* Record information about module initialization, termination,
|
||||
unit testing, and thread local storage in the compilation. */
|
||||
|
||||
struct GTY(()) module_info
|
||||
struct module_info
|
||||
{
|
||||
vec <tree, va_gc> *ctors;
|
||||
vec <tree, va_gc> *dtors;
|
||||
@ -121,11 +121,6 @@ static module_info *current_testing_module;
|
||||
|
||||
static Module *current_module_decl;
|
||||
|
||||
/* Static constructors and destructors (not D `static this'). */
|
||||
|
||||
static GTY(()) vec <tree, va_gc> *static_ctor_list;
|
||||
static GTY(()) vec <tree, va_gc> *static_dtor_list;
|
||||
|
||||
/* Returns an internal function identified by IDENT. This is used
|
||||
by both module initialization and dso handlers. */
|
||||
|
||||
@ -460,10 +455,12 @@ register_moduleinfo (Module *decl, tree minfo)
|
||||
|
||||
/* Declare dso_ctor() and dso_dtor(). */
|
||||
tree dso_ctor = build_dso_cdtor_fn (true);
|
||||
vec_safe_push (static_ctor_list, dso_ctor);
|
||||
DECL_STATIC_CONSTRUCTOR (dso_ctor) = 1;
|
||||
decl_init_priority_insert (dso_ctor, DEFAULT_INIT_PRIORITY);
|
||||
|
||||
tree dso_dtor = build_dso_cdtor_fn (false);
|
||||
vec_safe_push (static_dtor_list, dso_dtor);
|
||||
DECL_STATIC_DESTRUCTOR (dso_dtor) = 1;
|
||||
decl_fini_priority_insert (dso_dtor, DEFAULT_INIT_PRIORITY);
|
||||
|
||||
first_module = false;
|
||||
}
|
||||
@ -908,27 +905,4 @@ d_finish_compilation (tree *vec, int len)
|
||||
tree decl = vec[i];
|
||||
wrapup_global_declarations (&decl, 1);
|
||||
}
|
||||
|
||||
/* If the target does not directly support static constructors,
|
||||
static_ctor_list contains a list of all static constructors defined
|
||||
so far. This routine will create a function to call all of those
|
||||
and is picked up by collect2. */
|
||||
if (static_ctor_list)
|
||||
{
|
||||
tree decl = build_funcs_gates_fn (get_file_function_name ("I"),
|
||||
static_ctor_list, NULL);
|
||||
DECL_STATIC_CONSTRUCTOR (decl) = 1;
|
||||
decl_init_priority_insert (decl, DEFAULT_INIT_PRIORITY);
|
||||
}
|
||||
|
||||
if (static_dtor_list)
|
||||
{
|
||||
tree decl = build_funcs_gates_fn (get_file_function_name ("D"),
|
||||
static_dtor_list, NULL);
|
||||
DECL_STATIC_DESTRUCTOR (decl) = 1;
|
||||
decl_fini_priority_insert (decl, DEFAULT_INIT_PRIORITY);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#include "gt-d-modules.h"
|
||||
|
||||
@ -1,11 +0,0 @@
|
||||
// https://bugzilla.gdcproject.org/show_bug.cgi?id=270
|
||||
// { dg-do compile }
|
||||
|
||||
module gdc270;
|
||||
|
||||
void foo()
|
||||
{
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "_GLOBAL__D_6gdc270" } } */
|
||||
/* { dg-final { scan-assembler "_GLOBAL__I_6gdc270" } } */
|
||||
@ -1,7 +0,0 @@
|
||||
// https://bugzilla.gdcproject.org/show_bug.cgi?id=270
|
||||
// { dg-do compile }
|
||||
|
||||
module gdc270;
|
||||
|
||||
/* { dg-final { scan-assembler "_GLOBAL__D_6gdc270" } } */
|
||||
/* { dg-final { scan-assembler "_GLOBAL__I_6gdc270" } } */
|
||||
Loading…
Reference in New Issue
Block a user