Fix alias generation and bring back the tests for it.

llvm-svn: 210207
diff --git a/dragonegg/src/Backend.cpp b/dragonegg/src/Backend.cpp
index 484a05c..5737d85 100644
--- a/dragonegg/src/Backend.cpp
+++ b/dragonegg/src/Backend.cpp
@@ -983,11 +983,11 @@
   GlobalValue::LinkageTypes Linkage = GetLinkageForAlias(decl);
 
   if (Linkage != GlobalValue::InternalLinkage && !IsWeakRef) {
-    // Create the LLVM alias.
-    // FIXME: handle alias to aliases.
-    auto *GO = cast<GlobalObject>(Aliasee);
+    auto *GV = cast<GlobalValue>(Aliasee->stripPointerCasts());
+    if (auto *GA = llvm::dyn_cast<GlobalAlias>(GV))
+      GV = cast<GlobalValue>(GA->getAliasee()->stripPointerCasts());
     auto *GA = GlobalAlias::create(Aliasee->getType()->getElementType(), 0,
-                                   Linkage, "", GO);
+                                   Linkage, "", GV);
     handleVisibility(decl, GA);
 
     // Associate it with decl instead of V.
diff --git a/dragonegg/test/validator/c/FunctionAlias.c.disabled b/dragonegg/test/validator/c/FunctionAlias.c
similarity index 74%
rename from dragonegg/test/validator/c/FunctionAlias.c.disabled
rename to dragonegg/test/validator/c/FunctionAlias.c
index ec0e202..de05965 100644
--- a/dragonegg/test/validator/c/FunctionAlias.c.disabled
+++ b/dragonegg/test/validator/c/FunctionAlias.c
@@ -4,6 +4,6 @@
 void foo(void) __attribute__ ((alias ("qux")));
 // CHECK: @foo = alias void ()* @qux
 void bar(void) __attribute__ ((weak, alias ("foo")));
-// CHECK: @bar = alias weak void ()* @{{foo|qux}}
+// CHECK: @bar = alias weak void ()* @qux
 void baz(void) __attribute__ ((alias ("bar")));
-// CHECK: @baz = alias void ()* @bar
+// CHECK: @baz = alias void ()* @qux
diff --git a/dragonegg/test/validator/c/VariableAlias.c.disabled b/dragonegg/test/validator/c/VariableAlias.c
similarity index 74%
rename from dragonegg/test/validator/c/VariableAlias.c.disabled
rename to dragonegg/test/validator/c/VariableAlias.c
index 2b899eb..7381caa 100644
--- a/dragonegg/test/validator/c/VariableAlias.c.disabled
+++ b/dragonegg/test/validator/c/VariableAlias.c
@@ -4,6 +4,6 @@
 extern int foo __attribute__ ((alias ("qux")));
 // CHECK: @foo = alias i32* @qux
 extern int bar __attribute__ ((weak, alias ("foo")));
-// CHECK: @bar = alias weak i32* @{{foo|qux}}
+// CHECK: @bar = alias weak i32* @qux
 extern int baz __attribute__ ((alias ("bar")));
-// CHECK: @baz = alias i32* @bar
+// CHECK: @baz = alias i32* @qux