+2012-04-10 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
+
+ PR middle-end/52894
+ * varasm.c (process_pending_assemble_externals): Set
+ pending_assemble_externals_processed true.
+ (assemble_external): Call assemble_external_real if the pending
+ assemble externals have been processed.
+
2012-04-09 Eric Botcazou <ebotcazou@adacore.com>
PR target/52717
the entire pending_assemble_externals list. See assemble_external(). */
static struct pointer_set_t *pending_assemble_externals_set;
+/* Some targets delay some output to final using TARGET_ASM_FILE_END.
+ As a result, assemble_external can be called after the list of externals
+ is processed and the pointer set destroyed. */
+static bool pending_assemble_externals_processed;
+
#ifdef ASM_OUTPUT_EXTERNAL
/* True if DECL is a function decl for which no out-of-line copy exists.
It is assumed that DECL's assembler name has been set. */
assemble_external_real (TREE_VALUE (list));
pending_assemble_externals = 0;
+ pending_assemble_externals_processed = true;
pointer_set_destroy (pending_assemble_externals_set);
#endif
}
weak_decls = tree_cons (NULL, decl, weak_decls);
#ifdef ASM_OUTPUT_EXTERNAL
+ if (pending_assemble_externals_processed)
+ {
+ assemble_external_real (decl);
+ return;
+ }
+
if (! pointer_set_insert (pending_assemble_externals_set, decl))
pending_assemble_externals = tree_cons (NULL, decl,
pending_assemble_externals);