/* Base of all toplevel entries.
Inherited by symtab_node and asm_node. */
-struct GTY ((desc ("%h.type"), tag ("TOPLEVEL_BASE"))) toplevel_node {
+struct GTY ((desc ("%h.type"), tag ("TOPLEVEL_BASE"),
+ chain_next("%h.next"),
+ chain_prev("%h.previous"))) toplevel_node {
/* Constructor. */
explicit toplevel_node (toplevel_type t)
: lto_file_data (NULL), order (-1), type (t)
/* File stream where this node is being written to. */
struct lto_file_decl_data * lto_file_data;
+ /* Linked list of toplevel entries. */
+ toplevel_node *next = nullptr;
+ toplevel_node *previous = nullptr;
+
/* Ordering of all cgraph nodes. */
int order;
/* Base of all entries in the symbol table.
The symtab_node is inherited by cgraph and varpol nodes. */
-struct GTY ((tag ("SYMTAB_SYMBOL"),
- chain_next ("%h.next"), chain_prev ("%h.previous")))
+struct GTY ((tag ("SYMTAB_SYMBOL")))
symtab_node: public toplevel_node
{
public:
/* Declaration representing the symbol. */
tree decl;
- /* Linked list of symbol table entries starting with symtab_nodes. */
- symtab_node *next;
- symtab_node *previous;
-
/* Linked list of symbols with the same asm name. There may be multiple
entries for single symbol name during LTO, because symbols are renamed
only after partitioning.
struct GTY ((tag ("TOPLEVEL_ASM"))) asm_node: public toplevel_node {
explicit asm_node (tree asm_str)
- : toplevel_node (TOPLEVEL_ASM), next (NULL), asm_str (asm_str)
+ : toplevel_node (TOPLEVEL_ASM), asm_str (asm_str)
{}
- /* Next asm node. */
- asm_node *next;
/* String for this asm node. */
tree asm_str;
};
inline symtab_node *
symtab_node::next_defined_symbol (void)
{
- symtab_node *node1 = next;
+ symtab_node *node1 = safe_as_a<symtab_node *>(next);
- for (; node1; node1 = node1->next)
+ for (; node1; node1 = safe_as_a<symtab_node *>(node1->next))
if (node1->definition)
return node1;
if (node->previous)
node->previous->next = node->next;
else
- nodes = node->next;
+ nodes = safe_as_a<symtab_node *>(node->next);
if (node->next)
node->next->previous = node->previous;
/* Walk all symbols. */
#define FOR_EACH_SYMBOL(node) \
- for ((node) = symtab->first_symbol (); (node); (node) = (node)->next)
+ for ((node) = symtab->first_symbol (); (node); \
+ (node) = safe_as_a<symtab_node *>((node)->next))
/* Return first static symbol with definition. */
inline symtab_node *
{
symtab_node *node;
- for (node = nodes; node; node = node->next)
+ for (node = nodes; node;
+ node = safe_as_a<symtab_node *>(node->next))
if (node->definition)
return node;
symbol_table::first_variable (void)
{
symtab_node *node;
- for (node = nodes; node; node = node->next)
+ for (node = nodes; node; node = safe_as_a<symtab_node *>(node->next))
if (varpool_node *vnode = dyn_cast <varpool_node *> (node))
return vnode;
return NULL;
inline varpool_node *
symbol_table::next_variable (varpool_node *node)
{
- symtab_node *node1 = node->next;
- for (; node1; node1 = node1->next)
+ symtab_node *node1 = safe_as_a<symtab_node *>(node->next);
+ for (; node1; node1 = safe_as_a<symtab_node *>(node1->next))
if (varpool_node *vnode1 = dyn_cast <varpool_node *> (node1))
return vnode1;
return NULL;
symbol_table::first_static_initializer (void)
{
symtab_node *node;
- for (node = nodes; node; node = node->next)
+ for (node = nodes; node; node = safe_as_a<symtab_node *>(node->next))
{
varpool_node *vnode = dyn_cast <varpool_node *> (node);
if (vnode && DECL_INITIAL (node->decl))
inline varpool_node *
symbol_table::next_static_initializer (varpool_node *node)
{
- symtab_node *node1 = node->next;
- for (; node1; node1 = node1->next)
+ symtab_node *node1 = safe_as_a<symtab_node *>(node->next);
+ for (; node1; node1 = safe_as_a<symtab_node *>(node1->next))
{
varpool_node *vnode1 = dyn_cast <varpool_node *> (node1);
if (vnode1 && DECL_INITIAL (node1->decl))
symbol_table::first_defined_variable (void)
{
symtab_node *node;
- for (node = nodes; node; node = node->next)
+ for (node = nodes; node; node = safe_as_a<symtab_node *>(node->next))
{
varpool_node *vnode = dyn_cast <varpool_node *> (node);
if (vnode && vnode->definition)
inline varpool_node *
symbol_table::next_defined_variable (varpool_node *node)
{
- symtab_node *node1 = node->next;
- for (; node1; node1 = node1->next)
+ symtab_node *node1 = safe_as_a<symtab_node *>(node->next);
+ for (; node1; node1 = safe_as_a<symtab_node *>(node1->next))
{
varpool_node *vnode1 = dyn_cast <varpool_node *> (node1);
if (vnode1 && vnode1->definition)
symbol_table::first_defined_function (void)
{
symtab_node *node;
- for (node = nodes; node; node = node->next)
+ for (node = nodes; node; node = safe_as_a<symtab_node *>(node->next))
{
cgraph_node *cn = dyn_cast <cgraph_node *> (node);
if (cn && cn->definition)
inline cgraph_node *
symbol_table::next_defined_function (cgraph_node *node)
{
- symtab_node *node1 = node->next;
- for (; node1; node1 = node1->next)
+ symtab_node *node1 = safe_as_a<symtab_node *>(node->next);
+ for (; node1; node1 = safe_as_a<symtab_node *>(node1->next))
{
cgraph_node *cn1 = dyn_cast <cgraph_node *> (node1);
if (cn1 && cn1->definition)
symbol_table::first_function (void)
{
symtab_node *node;
- for (node = nodes; node; node = node->next)
+ for (node = nodes; node; node = safe_as_a<symtab_node *>(node->next))
if (cgraph_node *cn = dyn_cast <cgraph_node *> (node))
return cn;
return NULL;
inline cgraph_node *
symbol_table::next_function (cgraph_node *node)
{
- symtab_node *node1 = node->next;
- for (; node1; node1 = node1->next)
+ symtab_node *node1 = safe_as_a<symtab_node *>(node->next);
+ for (; node1; node1 = safe_as_a<symtab_node *>(node1->next))
if (cgraph_node *cn1 = dyn_cast <cgraph_node *> (node1))
return cn1;
return NULL;
symbol_table::first_function_with_gimple_body (void)
{
symtab_node *node;
- for (node = nodes; node; node = node->next)
+ for (node = nodes; node; node = safe_as_a<symtab_node *>(node->next))
{
cgraph_node *cn = dyn_cast <cgraph_node *> (node);
if (cn && cn->has_gimple_body_p ())
inline cgraph_node *
symbol_table::next_function_with_gimple_body (cgraph_node *node)
{
- symtab_node *node1 = node->next;
- for (; node1; node1 = node1->next)
+ symtab_node *node1 = safe_as_a<symtab_node *>(node->next);
+ for (; node1; node1 = safe_as_a<symtab_node *>(node1->next))
{
cgraph_node *cn1 = dyn_cast <cgraph_node *> (node1);
if (cn1 && cn1->has_gimple_body_p ())
/* First identify the trivially needed symbols. */
for (node = symtab->first_symbol ();
- node != first_analyzed
- && node != first_analyzed_var; node = node->next)
+ node != first_analyzed && node != first_analyzed_var;
+ node = safe_as_a<symtab_node *>(node->next))
{
/* Convert COMDAT group designators to IDENTIFIER_NODEs. */
node->get_comdat_group_id ();
node != first_handled
&& node != first_handled_var; node = next)
{
- next = node->next;
+ next = safe_as_a<symtab_node *>(node->next);
/* For symbols declared locally we clear TREE_READONLY when emitting
the constructor (if one is needed). For external declarations we can
not safely assume that the type is readonly because we may be called
}
node->aux = NULL;
}
- for (;node; node = node->next)
+ for (;node; node = safe_as_a<symtab_node *>(node->next))
node->aux = NULL;
first_analyzed = symtab->first_function ();
first_analyzed_var = symtab->first_variable ();
&& !DECL_HAS_VALUE_EXPR_P (vnode->decl))
nodes.safe_push (cgraph_order_sort (vnode));
- for (anode = symtab->first_asm_symbol (); anode; anode = anode->next)
+ for (anode = symtab->first_asm_symbol (); anode;
+ anode = safe_as_a<asm_node*>(anode->next))
nodes.safe_push (cgraph_order_sort (anode));
/* Sort nodes by order. */