diff options
author | Reid Kleckner <reid@kleckner.net> | 2015-02-19 21:13:45 +0000 |
---|---|---|
committer | Reid Kleckner <reid@kleckner.net> | 2015-02-19 21:13:45 +0000 |
commit | 4343922ddef51199854243d3beded0443fcd3a3e (patch) | |
tree | f44429ca0f3526b8d80b2dc60b5634408ea11ff0 | |
parent | 1174fea31c85219563798784024a0637bb470309 (diff) | |
download | bcm5719-llvm-4343922ddef51199854243d3beded0443fcd3a3e.tar.gz bcm5719-llvm-4343922ddef51199854243d3beded0443fcd3a3e.zip |
Avoid using a COMDAT for sized delete on MachO
llvm-svn: 229915
-rw-r--r-- | clang/lib/CodeGen/CodeGenFunction.cpp | 5 | ||||
-rw-r--r-- | clang/test/CodeGenCXX/implicit-allocation-functions.cpp | 15 |
2 files changed, 13 insertions, 7 deletions
diff --git a/clang/lib/CodeGen/CodeGenFunction.cpp b/clang/lib/CodeGen/CodeGenFunction.cpp index fa9697ec51e..1802d2b5cd6 100644 --- a/clang/lib/CodeGen/CodeGenFunction.cpp +++ b/clang/lib/CodeGen/CodeGenFunction.cpp @@ -806,8 +806,9 @@ static void EmitSizedDeallocationFunction(CodeGenFunction &CGF, const FunctionDecl *UnsizedDealloc) { // This is a weak discardable definition of the sized deallocation function. CGF.CurFn->setLinkage(llvm::Function::LinkOnceAnyLinkage); - CGF.CurFn->setComdat( - CGF.CGM.getModule().getOrInsertComdat(CGF.CurFn->getName())); + if (CGF.CGM.supportsCOMDAT()) + CGF.CurFn->setComdat( + CGF.CGM.getModule().getOrInsertComdat(CGF.CurFn->getName())); // Call the unsized deallocation function and forward the first argument // unchanged. diff --git a/clang/test/CodeGenCXX/implicit-allocation-functions.cpp b/clang/test/CodeGenCXX/implicit-allocation-functions.cpp index c3eada2bc93..8988e94326e 100644 --- a/clang/test/CodeGenCXX/implicit-allocation-functions.cpp +++ b/clang/test/CodeGenCXX/implicit-allocation-functions.cpp @@ -2,8 +2,9 @@ // RUN: %clang_cc1 -emit-llvm -triple x86_64-unknown-unknown -o - -std=c++11 -fvisibility hidden %s 2>&1 | FileCheck %s -check-prefix=CHECKHID -check-prefix=CHECK11 // RUN: %clang_cc1 -emit-llvm -triple x86_64-unknown-unknown -o - -std=c++14 %s 2>&1 | FileCheck %s -check-prefix=CHECKDEF -check-prefix=CHECK14 -check-prefix=CHECK14UND // RUN: %clang_cc1 -emit-llvm -triple x86_64-unknown-unknown -o - -std=c++14 -fvisibility hidden %s 2>&1 | FileCheck %s -check-prefix=CHECKHID -check-prefix=CHECK14 -check-prefix=CHECK14UND -// RUN: %clang_cc1 -emit-llvm -triple x86_64-unknown-unknown -o - -std=c++14 -fdefine-sized-deallocation %s 2>&1 | FileCheck %s -check-prefix=CHECKDEF -check-prefix=CHECK14 -check-prefix=CHECK14DEF -// RUN: %clang_cc1 -emit-llvm -triple x86_64-unknown-unknown -o - -std=c++14 -fdefine-sized-deallocation -fvisibility hidden %s 2>&1 | FileCheck %s -check-prefix=CHECKHID -check-prefix=CHECK14 -check-prefix=CHECK14DEF +// RUN: %clang_cc1 -emit-llvm -triple x86_64-unknown-unknown -o - -std=c++14 -fdefine-sized-deallocation %s 2>&1 | FileCheck %s -check-prefix=CHECKDEF -check-prefix=CHECK14 -check-prefix=CHECK14DEFCOMDAT +// RUN: %clang_cc1 -emit-llvm -triple x86_64-unknown-unknown -o - -std=c++14 -fdefine-sized-deallocation -fvisibility hidden %s 2>&1 | FileCheck %s -check-prefix=CHECKHID -check-prefix=CHECK14 -check-prefix=CHECK14DEFCOMDAT +// RUN: %clang_cc1 -emit-llvm -triple x86_64-apple-macosx -o - -std=c++14 -fdefine-sized-deallocation %s | FileCheck %s -check-prefix=CHECKDEF -check-prefix=CHECK14 -check-prefix=CHECK14DEFNOCOMDAT // PR22419: Implicit sized deallocation functions always have default visibility. // Generalized to all implicit allocation functions. @@ -30,8 +31,10 @@ void foo(A* is) { // CHECK14-DAG: declare noalias i8* @_Znwm(i64) // CHECK14UND-DAG: declare void @_ZdlPvm(i8*, i64) -// CHECK14DEF-DAG: define linkonce void @_ZdlPvm(i8*, i64) #{{[0-9]+}} comdat -// CHECK14DEF-DAG: declare void @_ZdlPv(i8*) +// CHECK14DEFCOMDAT-DAG: define linkonce void @_ZdlPvm(i8*, i64) #{{[0-9]+}} comdat { +// CHECK14DEFCOMDAT-DAG: declare void @_ZdlPv(i8*) +// CHECK14DEFNOCOMDAT-DAG: define linkonce void @_ZdlPvm(i8*, i64) #{{[0-9]+}} { +// CHECK14DEFNOCOMDAT-DAG: declare void @_ZdlPv(i8*) // CHECK14-DAG: %struct.B = type { i8 } struct B { ~B() { }}; @@ -54,5 +57,7 @@ void f(B *p) { // CHECK14-DAG: declare noalias i8* @_Znam(i64) // CHECK14UND-DAG: declare void @_ZdaPvm(i8*, i64) -// CHECK14DEF-DAG: define linkonce void @_ZdaPvm(i8*, i64) #{{[0-9]+}} comdat +// CHECK14DEF-DAG: define linkonce void @_ZdaPvm(i8*, i64) #{{[0-9]+}} comdat { // CHECK14DEF-DAG: declare void @_ZdaPv(i8*) +// CHECK14DEFNOCOMDAT-DAG: define linkonce void @_ZdaPvm(i8*, i64) #{{[0-9]+}} { +// CHECK14DEFNOCOMDAT-DAG: declare void @_ZdaPv(i8*) |