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
 }