diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index 44a83167238..308b0e091ac 100644 --- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -949,6 +949,11 @@ bool AsmPrinter::doFinalization(Module &M) { MCSymbol *Name = getSymbol(I); const GlobalValue *GV = I->getAliasedGlobal(); + if (GV->isDeclaration()) { + report_fatal_error(Name->getName() + + ": Target doesn't support aliases to declarations"); + } + MCSymbol *Target = getSymbol(GV); if (I->hasExternalLinkage() || !MAI->getWeakRefDirective()) diff --git a/test/CodeGen/ARM/aliases.ll b/test/CodeGen/ARM/aliases.ll index 4147bd0be07..f55ae10b247 100644 --- a/test/CodeGen/ARM/aliases.ll +++ b/test/CodeGen/ARM/aliases.ll @@ -16,13 +16,15 @@ ; CHECK: .globl A ; CHECK: A = bar -@bar = external global i32 +@bar = global i32 42 @foo1 = alias i32* @bar @foo2 = alias i32* @bar %FunTy = type i32() -declare i32 @foo_f() +define i32 @foo_f() { + ret i32 0 +} @bar_f = alias weak %FunTy* @foo_f @bar_i = alias internal i32* @bar diff --git a/test/CodeGen/Generic/2009-03-17-LSR-APInt.ll b/test/CodeGen/Generic/2009-03-17-LSR-APInt.ll index 6281ada73fc..3f17ce1e0b1 100644 --- a/test/CodeGen/Generic/2009-03-17-LSR-APInt.ll +++ b/test/CodeGen/Generic/2009-03-17-LSR-APInt.ll @@ -63,30 +63,58 @@ bb47: ; preds = %bb46, %bb44 br label %bb44 } -declare i32 @pthread_once(i32*, void ()*) +define i32 @pthread_once(i32*, void ()*) { + ret i32 0 +} -declare i8* @pthread_getspecific(i32) +define i8* @pthread_getspecific(i32) { + ret i8* null +} -declare i32 @pthread_setspecific(i32, i8*) +define i32 @pthread_setspecific(i32, i8*) { + ret i32 0 +} -declare i32 @pthread_create(i64*, %struct.pthread_attr_t*, i8* (i8*)*, i8*) +define i32 @pthread_create(i64*, %struct.pthread_attr_t*, i8* (i8*)*, i8*) { + ret i32 0 +} -declare i32 @pthread_cancel(i64) +define i32 @pthread_cancel(i64) { + ret i32 0 +} -declare i32 @pthread_mutex_lock(%struct.pthread_mutex_t*) +define i32 @pthread_mutex_lock(%struct.pthread_mutex_t*) { + ret i32 0 +} -declare i32 @pthread_mutex_trylock(%struct.pthread_mutex_t*) +define i32 @pthread_mutex_trylock(%struct.pthread_mutex_t*) { + ret i32 0 +} -declare i32 @pthread_mutex_unlock(%struct.pthread_mutex_t*) +define i32 @pthread_mutex_unlock(%struct.pthread_mutex_t*) { + ret i32 0 +} -declare i32 @pthread_mutex_init(%struct.pthread_mutex_t*, %struct.Alignment*) +define i32 @pthread_mutex_init(%struct.pthread_mutex_t*, %struct.Alignment*) { + ret i32 0 +} -declare i32 @pthread_key_create(i32*, void (i8*)*) +define i32 @pthread_key_create(i32*, void (i8*)*) { + ret i32 0 +} -declare i32 @pthread_key_delete(i32) +define i32 @pthread_key_delete(i32) { + ret i32 0 +} -declare i32 @pthread_mutexattr_init(%struct.Alignment*) +define i32 @pthread_mutexattr_init(%struct.Alignment*) { + ret i32 0 +} -declare i32 @pthread_mutexattr_settype(%struct.Alignment*, i32) +define i32 @pthread_mutexattr_settype(%struct.Alignment*, i32) { + ret i32 0 +} -declare i32 @pthread_mutexattr_destroy(%struct.Alignment*) +define i32 @pthread_mutexattr_destroy(%struct.Alignment*) { + ret i32 0 +} diff --git a/test/CodeGen/PowerPC/mcm-9.ll b/test/CodeGen/PowerPC/mcm-9.ll index e587f61eaf2..7906b6abea6 100644 --- a/test/CodeGen/PowerPC/mcm-9.ll +++ b/test/CodeGen/PowerPC/mcm-9.ll @@ -7,8 +7,7 @@ target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f128:128:128-v128:128:128-n32:64" target triple = "powerpc64-unknown-linux-gnu" -@ei = external global i32 -@a = alias i32* @ei +@a = external global i32 define signext i32 @test_external() nounwind { entry: diff --git a/test/CodeGen/X86/2007-09-06-ExtWeakAliasee.ll b/test/CodeGen/X86/2007-09-06-ExtWeakAliasee.ll index c5d2a46f92c..7e37ef5c40d 100644 --- a/test/CodeGen/X86/2007-09-06-ExtWeakAliasee.ll +++ b/test/CodeGen/X86/2007-09-06-ExtWeakAliasee.ll @@ -1,4 +1,6 @@ ; RUN: llc < %s -march=x86 | grep weak | count 2 @__gthrw_pthread_once = alias weak i32 (i32*, void ()*)* @pthread_once ; [#uses=0] -declare extern_weak i32 @pthread_once(i32*, void ()*) +define weak i32 @pthread_once(i32*, void ()*) { + ret i32 0 +} diff --git a/test/CodeGen/X86/2008-03-14-SpillerCrash.ll b/test/CodeGen/X86/2008-03-14-SpillerCrash.ll index 8946415108f..18b3714f851 100644 --- a/test/CodeGen/X86/2008-03-14-SpillerCrash.ll +++ b/test/CodeGen/X86/2008-03-14-SpillerCrash.ll @@ -45,4 +45,6 @@ bb383: ; preds = %bb374.us, %bb311.split ret i64 0 } -declare i64 @__wcstoll_l(i32*, i32**, i32, %struct.__locale_struct*) nounwind +define i64 @__wcstoll_l(i32*, i32**, i32, %struct.__locale_struct*) nounwind { + ret i64 0 +} diff --git a/test/CodeGen/X86/alias-error.ll b/test/CodeGen/X86/alias-error.ll new file mode 100644 index 00000000000..89b0876a837 --- /dev/null +++ b/test/CodeGen/X86/alias-error.ll @@ -0,0 +1,5 @@ +; RUN: not llc < %s -mtriple=i686-pc-linux-gnu %s 2>&1 | FileCheck %s + +@a = external global i32 +@b = alias i32* @a +; CHECK: b: Target doesn't support aliases to declarations diff --git a/test/CodeGen/X86/aliases.ll b/test/CodeGen/X86/aliases.ll index 025dcfedb62..d0a262d390d 100644 --- a/test/CodeGen/X86/aliases.ll +++ b/test/CodeGen/X86/aliases.ll @@ -1,6 +1,6 @@ ; RUN: llc < %s -mtriple=i686-pc-linux-gnu -asm-verbose=false | FileCheck %s -@bar = external global i32 +@bar = global i32 42 ; CHECK-DAG: .globl foo1 @foo1 = alias i32* @bar @@ -10,7 +10,9 @@ %FunTy = type i32() -declare i32 @foo_f() +define i32 @foo_f() { + ret i32 0 +} ; CHECK-DAG: .weak bar_f @bar_f = alias weak %FunTy* @foo_f diff --git a/test/CodeGen/X86/x86-64-pic-10.ll b/test/CodeGen/X86/x86-64-pic-10.ll index 3ec172b2b65..da8082b9251 100644 --- a/test/CodeGen/X86/x86-64-pic-10.ll +++ b/test/CodeGen/X86/x86-64-pic-10.ll @@ -9,4 +9,6 @@ entry: ret void } -declare extern_weak i32 @f() +define weak i32 @f() { + ret i32 42 +} diff --git a/test/CodeGen/XCore/aliases.ll b/test/CodeGen/XCore/aliases.ll index d4da63c5d9a..b7ad416968f 100644 --- a/test/CodeGen/XCore/aliases.ll +++ b/test/CodeGen/XCore/aliases.ll @@ -1,7 +1,9 @@ ; RUN: llc < %s -march=xcore | FileCheck %s -declare void @a_val() nounwind -@b_val = external constant i32, section ".cp.rodata" -@c_val = external global i32 +define void @a_val() nounwind { + ret void +} +@b_val = constant i32 42, section ".cp.rodata" +@c_val = global i32 42 @a = alias void ()* @a_val @b = alias i32* @b_val