Objective-C++, Darwin : Make metadata 'extern "C"'.

For current system toolchains NeXT runtime metadata symbols are not
mangled for Objective-C++ (i.e. they are considered to be
'extern "C"').

This change becomes essential when we start to emit metadata refs
as hidden and weak which is required by later editions of the runtime
and linkers.

gcc/objc/ChangeLog:

	* objc-runtime-shared-support.c (start_var_decl): Make the
	decl_assembler_name follow the metadata name for C++ on NeXT
	runtime platforms.
This commit is contained in:
Iain Sandoe 2020-10-06 18:50:22 +01:00
parent 1174b08b14
commit 1cc7476610

View File

@ -117,14 +117,17 @@ add_field_decl (tree type, const char *name, tree **chain)
tree
start_var_decl (tree type, const char *name)
{
tree var = build_decl (input_location,
VAR_DECL, get_identifier (name), type);
TREE_STATIC (var) = 1;
tree name_id = get_identifier (name);
tree var = build_decl (input_location, VAR_DECL, name_id, type);
DECL_INITIAL (var) = error_mark_node; /* A real initializer is coming... */
TREE_STATIC (var) = 1;
DECL_IGNORED_P (var) = 1;
DECL_ARTIFICIAL (var) = 1;
DECL_CONTEXT (var) = NULL_TREE;
#ifdef OBJCPLUS
/* Meta-data for the NeXT runtime is expected to be 'extern "C"'. */
if (flag_next_runtime)
SET_DECL_ASSEMBLER_NAME (var, name_id);
DECL_THIS_STATIC (var) = 1; /* squash redeclaration errors */
#endif
return var;