diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp
index aed0676..cc460c5 100644
--- a/lib/CodeGen/CodeGenModule.cpp
+++ b/lib/CodeGen/CodeGenModule.cpp
@@ -369,7 +369,7 @@
 
 void CodeGenModule::EmitAliases() {
   for (unsigned i = 0, e = Aliases.size(); i != e; ++i) {
-    const FunctionDecl *D = Aliases[i];
+    const ValueDecl *D = Aliases[i];
     const AliasAttr *AA = D->getAttr<AliasAttr>();
 
     // This is something of a hack, if the FunctionDecl got overridden
@@ -380,7 +380,7 @@
       continue;
 
     const std::string& aliaseeName = AA->getAliasee();
-    llvm::Function *aliasee = getModule().getFunction(aliaseeName);
+    llvm::GlobalValue *aliasee = getModule().getNamedValue(aliaseeName);
     if (!aliasee) {
       // FIXME: This isn't unsupported, this is just an error, which
       // sema should catch, but...
@@ -539,16 +539,14 @@
 }
 
 void CodeGenModule::EmitGlobal(const ValueDecl *Global) {
-  if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(Global)) {
-    // Aliases are deferred until code for everything else has been
-    // emitted.
-    if (FD->getAttr<AliasAttr>()) {
-      assert(!FD->isThisDeclarationADefinition() && 
-             "Function alias cannot have a definition!");
-      Aliases.push_back(FD);
-      return;
-    }
+  // Aliases are deferred until code for everything else has been
+  // emitted.
+  if (Global->getAttr<AliasAttr>()) {
+    Aliases.push_back(Global);
+    return;
+  }
 
+  if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(Global)) {
     // Forward declarations are emitted lazily on first use.
     if (!FD->isThisDeclarationADefinition())
       return;
