In gcc/:
* coverage.c (coverage_checksum_string): Update comment. * dwarf2out.c (switch_to_eh_frame_section): Update for removal of get_file_function_name. * cgraphunit.c (cgraph_build_static_cdtor): Update for rename of get_file_function_name_long. * tree.c (get_file_function_name): Rename from get_file_function_name_long; improve comment; handle 'I' and 'D' specially when the target has ctor/dtor support; remove special handling for 'F'. (get_file_function_name): Remove. * tree.h (get_file_function_name): Rename from get_file_function_name_long. (get_file_function_name): Remove prototype. In gcc/cp/: * name-lookup.c (get_anonymous_namespace_name): New. (push_namespace_with_attribs): Use get_anonymous_namespace_name. * decl2.c (start_objects): Update for rename of get_file_function_name_long. In gcc/fortran/: * trans-decl.c (gfc_generate_constructors): Update for removal of get_file_function_name. From-SVN: r118360
This commit is contained in:
parent
4d04fa0539
commit
5880f14fe8
|
@ -1,3 +1,19 @@
|
|||
2006-10-31 Geoffrey Keating <geoffk@apple.com>
|
||||
|
||||
* coverage.c (coverage_checksum_string): Update comment.
|
||||
* dwarf2out.c (switch_to_eh_frame_section): Update for removal
|
||||
of get_file_function_name.
|
||||
* cgraphunit.c (cgraph_build_static_cdtor): Update for rename
|
||||
of get_file_function_name_long.
|
||||
* tree.c (get_file_function_name): Rename from
|
||||
get_file_function_name_long; improve comment; handle 'I' and 'D'
|
||||
specially when the target has ctor/dtor support; remove special
|
||||
handling for 'F'.
|
||||
(get_file_function_name): Remove.
|
||||
* tree.h (get_file_function_name): Rename from
|
||||
get_file_function_name_long.
|
||||
(get_file_function_name): Remove prototype.
|
||||
|
||||
2006-10-31 Geoffrey Keating <geoffk@apple.com>
|
||||
|
||||
* config/i386/darwin.h (PREFERRED_DEBUGGING_TYPE): Remove.
|
||||
|
|
|
@ -1675,7 +1675,7 @@ cgraph_build_static_cdtor (char which, tree body, int priority)
|
|||
tree decl, name, resdecl;
|
||||
|
||||
sprintf (which_buf, "%c_%d", which, counter++);
|
||||
name = get_file_function_name_long (which_buf);
|
||||
name = get_file_function_name (which_buf);
|
||||
|
||||
decl = build_decl (FUNCTION_DECL, name,
|
||||
build_function_type (void_type_node, void_list_node));
|
||||
|
|
|
@ -433,7 +433,7 @@ coverage_checksum_string (unsigned chksum, const char *string)
|
|||
char *dup = NULL;
|
||||
|
||||
/* Look for everything that looks if it were produced by
|
||||
get_file_function_name_long and zero out the second part
|
||||
get_file_function_name and zero out the second part
|
||||
that may result from flag_random_seed. This is not critical
|
||||
as the checksums are used only for sanity checking. */
|
||||
for (i = 0; string[i]; i++)
|
||||
|
|
|
@ -1,3 +1,10 @@
|
|||
2006-10-31 Geoffrey Keating <geoffk@apple.com>
|
||||
|
||||
* name-lookup.c (get_anonymous_namespace_name): New.
|
||||
(push_namespace_with_attribs): Use get_anonymous_namespace_name.
|
||||
* decl2.c (start_objects): Update for rename of
|
||||
get_file_function_name_long.
|
||||
|
||||
2006-10-30 Dirk Mueller <dmueller@suse.de>
|
||||
|
||||
PR c++/28704
|
||||
|
|
|
@ -2324,7 +2324,7 @@ start_objects (int method_type, int initp)
|
|||
sprintf (type, "%c", method_type);
|
||||
|
||||
fndecl = build_lang_decl (FUNCTION_DECL,
|
||||
get_file_function_name_long (type),
|
||||
get_file_function_name (type),
|
||||
build_function_type (void_type_node,
|
||||
void_list_node));
|
||||
start_preparsed_function (fndecl, /*attrs=*/NULL_TREE, SF_PRE_PARSED);
|
||||
|
|
|
@ -61,6 +61,24 @@ tree global_namespace;
|
|||
unit. */
|
||||
static GTY(()) tree anonymous_namespace_name;
|
||||
|
||||
/* Initialise anonymous_namespace_name if necessary, and return it. */
|
||||
|
||||
static tree
|
||||
get_anonymous_namespace_name(void)
|
||||
{
|
||||
if (!anonymous_namespace_name)
|
||||
{
|
||||
/* The anonymous namespace has to have a unique name
|
||||
if typeinfo objects are being compared by name. */
|
||||
if (! flag_weak || ! SUPPORTS_ONE_ONLY)
|
||||
anonymous_namespace_name = get_file_function_name ("N");
|
||||
else
|
||||
/* The demangler expects anonymous namespaces to be called
|
||||
something starting with '_GLOBAL__N_'. */
|
||||
anonymous_namespace_name = get_identifier ("_GLOBAL__N_1");
|
||||
}
|
||||
return anonymous_namespace_name;
|
||||
}
|
||||
|
||||
/* Compute the chain index of a binding_entry given the HASH value of its
|
||||
name and the total COUNT of chains. COUNT is assumed to be a power
|
||||
|
@ -3011,11 +3029,7 @@ push_namespace_with_attribs (tree name, tree attributes)
|
|||
|
||||
if (anon)
|
||||
{
|
||||
/* The name of anonymous namespace is unique for the translation
|
||||
unit. */
|
||||
if (!anonymous_namespace_name)
|
||||
anonymous_namespace_name = get_file_function_name ('N');
|
||||
name = anonymous_namespace_name;
|
||||
name = get_anonymous_namespace_name();
|
||||
d = IDENTIFIER_NAMESPACE_VALUE (name);
|
||||
if (d)
|
||||
/* Reopening anonymous namespace. */
|
||||
|
|
|
@ -2030,7 +2030,7 @@ switch_to_eh_frame_section (void)
|
|||
/* We have no special eh_frame section. Put the information in
|
||||
the data section and emit special labels to guide collect2. */
|
||||
switch_to_section (data_section);
|
||||
label = get_file_function_name ('F');
|
||||
label = get_file_function_name ("F");
|
||||
ASM_OUTPUT_ALIGN (asm_out_file, floor_log2 (PTR_SIZE));
|
||||
targetm.asm_out.globalize_label (asm_out_file,
|
||||
IDENTIFIER_POINTER (label));
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2006-10-31 Geoffrey Keating <geoffk@apple.com>
|
||||
|
||||
* trans-decl.c (gfc_generate_constructors): Update for removal
|
||||
of get_file_function_name.
|
||||
|
||||
2006-11-01 Bernhard Fischer <aldot@gcc.gnu.org>
|
||||
|
||||
PR fortran/29537
|
||||
|
|
|
@ -3299,7 +3299,7 @@ gfc_generate_constructors (void)
|
|||
if (gfc_static_ctors == NULL_TREE)
|
||||
return;
|
||||
|
||||
fnname = get_file_function_name ('I');
|
||||
fnname = get_file_function_name ("I");
|
||||
type = build_function_type (void_type_node,
|
||||
gfc_chainon_list (NULL_TREE, void_type_node));
|
||||
|
||||
|
|
65
gcc/tree.c
65
gcc/tree.c
|
@ -6042,41 +6042,48 @@ clean_symbol_name (char *p)
|
|||
*p = '_';
|
||||
}
|
||||
|
||||
/* Generate a name for a function unique to this translation unit.
|
||||
/* Generate a name for a special-purpose function function.
|
||||
The generated name may need to be unique across the whole link.
|
||||
TYPE is some string to identify the purpose of this function to the
|
||||
linker or collect2. */
|
||||
linker or collect2; it must start with an uppercase letter,
|
||||
one of:
|
||||
I - for constructors
|
||||
D - for destructors
|
||||
N - for C++ anonymous namespaces
|
||||
F - for DWARF unwind frame information. */
|
||||
|
||||
tree
|
||||
get_file_function_name_long (const char *type)
|
||||
get_file_function_name (const char *type)
|
||||
{
|
||||
char *buf;
|
||||
const char *p;
|
||||
char *q;
|
||||
|
||||
/* If we already have a name we know to be unique, just use that. */
|
||||
if (first_global_object_name)
|
||||
p = first_global_object_name;
|
||||
/* If the target is handling the constructors/destructors, they
|
||||
will be local to this file and the name is only necessary for
|
||||
debugging purposes. */
|
||||
else if ((type[0] == 'I' || type[0] == 'D') && targetm.have_ctors_dtors)
|
||||
{
|
||||
p = first_global_object_name;
|
||||
|
||||
/* For type 'F', the generated name must be unique not only to this
|
||||
translation unit but also to any given link. Since global names
|
||||
can be overloaded, we concatenate the first global object name
|
||||
with a string derived from the file name of this object. */
|
||||
if (!strcmp (type, "F"))
|
||||
{
|
||||
const char *file = main_input_filename;
|
||||
|
||||
if (! file)
|
||||
file = input_filename;
|
||||
|
||||
q = alloca (strlen (p) + 10);
|
||||
sprintf (q, "%s_%08X", p, crc32_string (0, file));
|
||||
|
||||
p = q;
|
||||
}
|
||||
const char *file = main_input_filename;
|
||||
if (! file)
|
||||
file = input_filename;
|
||||
/* Just use the file's basename, because the full pathname
|
||||
might be quite long. */
|
||||
p = strrchr (file, '/');
|
||||
if (p)
|
||||
p++;
|
||||
else
|
||||
p = file;
|
||||
p = q = ASTRDUP (p);
|
||||
clean_symbol_name (q);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* We don't have anything that we know to be unique to this translation
|
||||
/* Otherwise, the name must be unique across the entire link.
|
||||
We don't have anything that we know to be unique to this translation
|
||||
unit, so use what we do have and throw in some randomness. */
|
||||
unsigned len;
|
||||
const char *name = weak_global_object_name;
|
||||
|
@ -6108,20 +6115,6 @@ get_file_function_name_long (const char *type)
|
|||
|
||||
return get_identifier (buf);
|
||||
}
|
||||
|
||||
/* If KIND=='I', return a suitable global initializer (constructor) name.
|
||||
If KIND=='D', return a suitable global clean-up (destructor) name. */
|
||||
|
||||
tree
|
||||
get_file_function_name (int kind)
|
||||
{
|
||||
char p[2];
|
||||
|
||||
p[0] = kind;
|
||||
p[1] = 0;
|
||||
|
||||
return get_file_function_name_long (p);
|
||||
}
|
||||
|
||||
#if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007)
|
||||
|
||||
|
|
|
@ -4150,7 +4150,7 @@ extern GTY(()) const char * current_function_func_begin_label;
|
|||
/* In tree.c */
|
||||
extern unsigned crc32_string (unsigned, const char *);
|
||||
extern void clean_symbol_name (char *);
|
||||
extern tree get_file_function_name_long (const char *);
|
||||
extern tree get_file_function_name (const char *);
|
||||
extern tree get_callee_fndecl (tree);
|
||||
extern void change_decl_assembler_name (tree, tree);
|
||||
extern int type_num_arguments (tree);
|
||||
|
@ -4488,10 +4488,6 @@ extern void gimplify_function_tree (tree);
|
|||
extern const char *get_name (tree);
|
||||
extern tree unshare_expr (tree);
|
||||
extern void sort_case_labels (tree);
|
||||
|
||||
/* If KIND=='I', return a suitable global initializer (constructor) name.
|
||||
If KIND=='D', return a suitable global clean-up (destructor) name. */
|
||||
extern tree get_file_function_name (int);
|
||||
|
||||
/* Interface of the DWARF2 unwind info support. */
|
||||
|
||||
|
|
Loading…
Reference in New Issue