summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsteven <steven@138bc75d-0d04-0410-961f-82ee72b054a4>2010-05-07 20:49:29 +0000
committersteven <steven@138bc75d-0d04-0410-961f-82ee72b054a4>2010-05-07 20:49:29 +0000
commitdd821e087f62d2d60874f931b166b4f14bf2b99e (patch)
treea8dfdd0ff86c317f8c7bb14a0c719cb6994ffef2
parentece262d5cc91c44a1088953a63bc3400d7ce0453 (diff)
downloadgcc-dd821e087f62d2d60874f931b166b4f14bf2b99e.tar.gz
* c-pragma.c (pending_weak_d, pending_weak): New.
(pending_weaks): Change the type to VEC((pending_weak,gc) *. (maybe_apply_pragma_weak, maybe_apply_pending_pragma_weaks, handle_pragma_weak): Update the uses of pending_weaks. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@159172 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/c-pragma.c43
2 files changed, 37 insertions, 13 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 5bd72cab4ca..2fd92d9e7df 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2010-05-07 Steven Bosscher <steven@gcc.gnu.org>
+
+ * c-pragma.c (pending_weak_d, pending_weak): New.
+ (pending_weaks): Change the type to VEC((pending_weak,gc) *.
+ (maybe_apply_pragma_weak, maybe_apply_pending_pragma_weaks,
+ handle_pragma_weak): Update the uses of pending_weaks.
+
2010-05-07 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
PR documentation/44016
diff --git a/gcc/c-pragma.c b/gcc/c-pragma.c
index 79b3d132fd7..f3cce3e61d5 100644
--- a/gcc/c-pragma.c
+++ b/gcc/c-pragma.c
@@ -244,7 +244,16 @@ handle_pragma_pack (cpp_reader * ARG_UNUSED (dummy))
}
#endif /* HANDLE_PRAGMA_PACK */
-static GTY(()) tree pending_weaks;
+typedef struct GTY(()) pending_weak_d
+{
+ tree name;
+ tree value;
+} pending_weak;
+
+DEF_VEC_O(pending_weak);
+DEF_VEC_ALLOC_O(pending_weak,gc);
+
+static GTY(()) VEC(pending_weak,gc) *pending_weaks;
#ifdef HANDLE_PRAGMA_WEAK
static void apply_pragma_weak (tree, tree);
@@ -274,7 +283,9 @@ apply_pragma_weak (tree decl, tree value)
void
maybe_apply_pragma_weak (tree decl)
{
- tree *p, t, id;
+ tree id;
+ int i;
+ pending_weak *pe;
/* Avoid asking for DECL_ASSEMBLER_NAME when it's not needed. */
@@ -293,11 +304,11 @@ maybe_apply_pragma_weak (tree decl)
id = DECL_ASSEMBLER_NAME (decl);
- for (p = &pending_weaks; (t = *p) ; p = &TREE_CHAIN (t))
- if (id == TREE_PURPOSE (t))
+ for (i = 0; VEC_iterate (pending_weak, pending_weaks, i, pe); i++)
+ if (id == pe->name)
{
- apply_pragma_weak (decl, TREE_VALUE (t));
- *p = TREE_CHAIN (t);
+ apply_pragma_weak (decl, pe->value);
+ VEC_unordered_remove (pending_weak, pending_weaks, i);
break;
}
}
@@ -307,15 +318,16 @@ maybe_apply_pragma_weak (tree decl)
void
maybe_apply_pending_pragma_weaks (void)
{
- tree *p, t, alias_id, id, decl, *next;
+ tree alias_id, id, decl;
+ int i;
+ pending_weak *pe;
- for (p = &pending_weaks; (t = *p) ; p = next)
+ for (i = 0; VEC_iterate (pending_weak, pending_weaks, i, pe); i++)
{
- next = &TREE_CHAIN (t);
- alias_id = TREE_PURPOSE (t);
- id = TREE_VALUE (t);
+ alias_id = pe->name;
+ id = pe->value;
- if (TREE_VALUE (t) == NULL)
+ if (id == NULL)
continue;
decl = build_decl (UNKNOWN_LOCATION,
@@ -359,7 +371,12 @@ handle_pragma_weak (cpp_reader * ARG_UNUSED (dummy))
assemble_alias (decl, value);
}
else
- pending_weaks = tree_cons (name, value, pending_weaks);
+ {
+ pending_weak *pe;
+ pe = VEC_safe_push (pending_weak, gc, pending_weaks, NULL);
+ pe->name = name;
+ pe->value = value;
+ }
}
#else
void