* ldlang.c (lang_output_section_statement_lookup_1): Don't cast a
unary & address operator, as that breaks GCC's strict aliasing rules.
This commit is contained in:
parent
bec15d1f6a
commit
8980686623
2 changed files with 12 additions and 1 deletions
|
@ -1,3 +1,9 @@
|
|||
2005-07-28 DJ Delorie <dj@redhat.com>
|
||||
|
||||
* ldlang.c (lang_output_section_statement_lookup_1): Don't cast a
|
||||
unary & address operator, as that breaks GCC's strict aliasing
|
||||
rules.
|
||||
|
||||
2005-07-25 Jan Hubicka <jh@suse.cz>
|
||||
H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
|
|
|
@ -1010,6 +1010,7 @@ static lang_output_section_statement_type *
|
|||
lang_output_section_statement_lookup_1 (const char *const name, int constraint)
|
||||
{
|
||||
lang_output_section_statement_type *lookup;
|
||||
lang_output_section_statement_type **nextp;
|
||||
|
||||
lookup = lang_output_section_find_1 (name, constraint);
|
||||
if (lookup == NULL)
|
||||
|
@ -1038,9 +1039,13 @@ lang_output_section_statement_lookup_1 (const char *const name, int constraint)
|
|||
lookup->update_dot_tree = NULL;
|
||||
lookup->phdrs = NULL;
|
||||
|
||||
/* GCC's strict aliasing rules prevent us from just casting the
|
||||
address, so we store the pointer in a variable and cast that
|
||||
instead. */
|
||||
nextp = &lookup->next;
|
||||
lang_statement_append (&lang_output_section_statement,
|
||||
(lang_statement_union_type *) lookup,
|
||||
(lang_statement_union_type **) &lookup->next);
|
||||
(lang_statement_union_type **) nextp);
|
||||
}
|
||||
return lookup;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue