Fix c/InternFunctionWeakref.c.
The test was failing when building with gcc 4.8. It looks like weakrefs are
reachable via emit_cgrah_aliases and emit_cgraph_weakref. This causes us to
try to use rauw twice, causing an assert when we get a this->rauw(this).
The patch simply skips weakrefs in emit_cgrah_aliases.
llvm-svn: 208003
diff --git a/dragonegg/src/Backend.cpp b/dragonegg/src/Backend.cpp
index 3e9c981..2e176ca 100644
--- a/dragonegg/src/Backend.cpp
+++ b/dragonegg/src/Backend.cpp
@@ -1655,12 +1655,16 @@
struct ipa_ref *ref;
for (int i = 0;
ipa_ref_list_referring_iterate(&cgraph_symbol(node)->ref_list, i, ref);
- i++)
- if (ref->use == IPA_REF_ALIAS) {
- struct cgraph_node *alias = ipa_ref_referring_node(ref);
- emit_alias(cgraph_symbol(alias)->decl, alias->thunk.alias);
- emit_cgraph_aliases(alias);
- }
+ i++) {
+ if (ref->use != IPA_REF_ALIAS)
+ continue;
+ struct cgraph_node *alias = ipa_ref_referring_node(ref);
+ if (lookup_attribute("weakref",
+ DECL_ATTRIBUTES(cgraph_symbol(alias)->decl)))
+ continue;
+ emit_alias(cgraph_symbol(alias)->decl, alias->thunk.alias);
+ emit_cgraph_aliases(alias);
+ }
#endif
}