From 18bc5398c1526d6a852b2f18152ebcfe6b706dcf Mon Sep 17 00:00:00 2001 From: Steven Bosscher Date: Fri, 7 May 2010 20:49:29 +0000 Subject: [PATCH] c-pragma.c (pending_weak_d, [...]): New. * 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. From-SVN: r159172 --- gcc/ChangeLog | 7 +++++++ gcc/c-pragma.c | 43 ++++++++++++++++++++++++++++++------------- 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 + + * 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 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