From: Douglas Gregor Date: Mon, 12 Jul 2010 21:08:32 +0000 (+0000) Subject: Speculatively revert r108156; it appears to be breaking self-host. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=27cc6331e33efac4020058d2fda36c9060ec5afa;p=clang Speculatively revert r108156; it appears to be breaking self-host. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@108194 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp index d544d4c233..cb83ffde6f 100644 --- a/lib/CodeGen/CodeGenModule.cpp +++ b/lib/CodeGen/CodeGenModule.cpp @@ -817,22 +817,14 @@ void CodeGenModule::EmitGlobalDefinition(GlobalDecl GD) { if (Method->isVirtual()) getVTables().EmitThunks(GD); - if (const FunctionDecl *Function = dyn_cast(D)) { - // At -O0, don't generate IR for functions with available_externally - // linkage. - if (CodeGenOpts.OptimizationLevel == 0 && - getFunctionLinkage(Function) - == llvm::Function::AvailableExternallyLinkage) - return; - - if (const CXXConstructorDecl *CD = dyn_cast(Function)) - return EmitCXXConstructor(CD, GD.getCtorType()); + if (const CXXConstructorDecl *CD = dyn_cast(D)) + return EmitCXXConstructor(CD, GD.getCtorType()); - if (const CXXDestructorDecl *DD = dyn_cast(Function)) - return EmitCXXDestructor(DD, GD.getDtorType()); + if (const CXXDestructorDecl *DD = dyn_cast(D)) + return EmitCXXDestructor(DD, GD.getDtorType()); + if (isa(D)) return EmitGlobalFunctionDefinition(GD); - } if (const VarDecl *VD = dyn_cast(D)) return EmitGlobalVarDefinition(VD); diff --git a/test/CXX/temp/temp.spec/temp.explicit/p9-linkage.cpp b/test/CXX/temp/temp.spec/temp.explicit/p9-linkage.cpp index 57b012f9a9..e67233c375 100644 --- a/test/CXX/temp/temp.spec/temp.explicit/p9-linkage.cpp +++ b/test/CXX/temp/temp.spec/temp.explicit/p9-linkage.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -O1 -emit-llvm -std=c++0x -o - %s | FileCheck %s +// RUN: %clang_cc1 -emit-llvm -std=c++0x -o - %s | FileCheck %s template struct X0 { diff --git a/test/CodeGen/available-externally-suppress.c b/test/CodeGen/available-externally-suppress.c deleted file mode 100644 index c3b7a213ba..0000000000 --- a/test/CodeGen/available-externally-suppress.c +++ /dev/null @@ -1,12 +0,0 @@ -// RUN: %clang_cc1 -emit-llvm -o - -O0 -triple x86_64-apple-darwin10 %s | FileCheck %s - -// Ensure that we don't emit available_externally functions at -O0. -int x; - -inline void f0(int y) { x = y; } - -// CHECK: define void @test() -// CHECK: declare void @f0(i32) -void test() { - f0(17); -} diff --git a/test/CodeGen/inline.c b/test/CodeGen/inline.c index a6b4b3e448..a17b069929 100644 --- a/test/CodeGen/inline.c +++ b/test/CodeGen/inline.c @@ -1,5 +1,5 @@ // RUN: echo "GNU89 tests:" -// RUN: %clang %s -O1 -emit-llvm -S -o %t -std=gnu89 +// RUN: %clang %s -emit-llvm -S -o %t -std=gnu89 // RUN: grep "define available_externally i32 @ei()" %t // RUN: grep "define i32 @foo()" %t // RUN: grep "define i32 @bar()" %t @@ -14,7 +14,7 @@ // RUN: grep "define available_externally i32 @test5" %t // RUN: echo "\nC99 tests:" -// RUN: %clang %s -O1 -emit-llvm -S -o %t -std=c99 +// RUN: %clang %s -emit-llvm -S -o %t -std=c99 // RUN: grep "define i32 @ei()" %t // RUN: grep "define available_externally i32 @foo()" %t // RUN: grep "define i32 @bar()" %t @@ -29,7 +29,7 @@ // RUN: grep "define available_externally i32 @test5" %t // RUN: echo "\nC++ tests:" -// RUN: %clang %s -O1 -emit-llvm -S -o %t -std=c++98 +// RUN: %clang %s -emit-llvm -S -o %t -std=c++98 // RUN: grep "define linkonce_odr i32 @_Z2eiv()" %t // RUN: grep "define linkonce_odr i32 @_Z3foov()" %t // RUN: grep "define i32 @_Z3barv()" %t diff --git a/test/CodeGen/inline2.c b/test/CodeGen/inline2.c index fca4fff7ca..737b58fa44 100644 --- a/test/CodeGen/inline2.c +++ b/test/CodeGen/inline2.c @@ -1,5 +1,5 @@ -// RUN: %clang_cc1 -O1 -std=gnu89 -triple i386-apple-darwin9 -emit-llvm %s -o - | FileCheck -check-prefix GNU89 %s -// RUN: %clang_cc1 -O1 -std=c99 -triple i386-apple-darwin9 -emit-llvm %s -o - | FileCheck -check-prefix C99 %s +// RUN: %clang_cc1 -std=gnu89 -triple i386-apple-darwin9 -emit-llvm %s -o - | FileCheck -check-prefix GNU89 %s +// RUN: %clang_cc1 -std=c99 -triple i386-apple-darwin9 -emit-llvm %s -o - | FileCheck -check-prefix C99 %s // CHECK-GNU89: define i32 @f0() // CHECK-C99: define i32 @f0() diff --git a/test/CodeGenCXX/template-instantiation.cpp b/test/CodeGenCXX/template-instantiation.cpp index cb6c812316..4a3857542d 100644 --- a/test/CodeGenCXX/template-instantiation.cpp +++ b/test/CodeGenCXX/template-instantiation.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 %s -O1 -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s +// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s // CHECK-NOT: @_ZTVN5test118stdio_sync_filebufIwEE = constant // CHECK-NOT: _ZTVN5test315basic_fstreamXXIcEE diff --git a/test/CodeGenCXX/visibility-hidden-extern-templates.cpp b/test/CodeGenCXX/visibility-hidden-extern-templates.cpp index 7629b77c2c..4c133ec32c 100644 --- a/test/CodeGenCXX/visibility-hidden-extern-templates.cpp +++ b/test/CodeGenCXX/visibility-hidden-extern-templates.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -O1 -emit-llvm -o - -fvisibility hidden %s | FileCheck %s +// RUN: %clang_cc1 -emit-llvm -o - -fvisibility hidden %s | FileCheck %s template struct X {