diff --git a/gcc/d/d-tree.h b/gcc/d/d-tree.h index a514bc3902f..303d52390c2 100644 --- a/gcc/d/d-tree.h +++ b/gcc/d/d-tree.h @@ -600,6 +600,7 @@ extern tree d_signed_type (tree); extern void d_keep (tree); /* In decl.cc. */ +extern const char *mangle_decl (Dsymbol *); extern tree mangle_internal_decl (Dsymbol *, const char *, const char *); extern void build_decl_tree (Dsymbol *); extern tree get_symbol_decl (Declaration *); diff --git a/gcc/d/decl.cc b/gcc/d/decl.cc index 49723649230..90871b4c90b 100644 --- a/gcc/d/decl.cc +++ b/gcc/d/decl.cc @@ -59,7 +59,7 @@ along with GCC; see the file COPYING3. If not see /* Return identifier for the external mangled name of DECL. */ -static const char * +const char * mangle_decl (Dsymbol *decl) { if (decl->isFuncDeclaration ()) diff --git a/gcc/d/typeinfo.cc b/gcc/d/typeinfo.cc index bbd3961181d..a678b7938a6 100644 --- a/gcc/d/typeinfo.cc +++ b/gcc/d/typeinfo.cc @@ -1107,8 +1107,12 @@ public: CONSTRUCTOR_APPEND_ELT (elms, size_int (i), build_typeinfo (d->loc, arg->type)); } + + const char *prefix = concat (GDC_PREFIX ("__tuple"), + mangle_decl (Module::rootModule), NULL); + tree ctor = build_constructor (build_ctype (satype), elms); - tree decl = build_artificial_decl (TREE_TYPE (ctor), ctor); + tree decl = build_artificial_decl (TREE_TYPE (ctor), ctor, prefix); /* The internal pointer reference should be public, but not visible outside the compilation unit, as it's referencing COMDAT decls. */