diff mbox series

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

Message ID B76F0A46-E0FC-4C56-90D3-0CFD65527011@sandoe.co.uk
State New
Headers show
Series [pushed] Objective-C++, Darwin : Make metadata 'extern "C"'. | expand

Commit Message

Iain Sandoe Oct. 11, 2020, 11:13 a.m. UTC
Hi,

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.

tested across the Darwin range and on x86_64-linux
pushed to master
thanks
Iain

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.
---
 gcc/objc/objc-runtime-shared-support.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)
diff mbox series

Patch

diff --git a/gcc/objc/objc-runtime-shared-support.c b/gcc/objc/objc-runtime-shared-support.c
index 4aecc7f339f..16d4d63c86f 100644
--- a/gcc/objc/objc-runtime-shared-support.c
+++ b/gcc/objc/objc-runtime-shared-support.c
@@ -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;