summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorReid Kleckner <reid@kleckner.net>2015-02-19 21:13:45 +0000
committerReid Kleckner <reid@kleckner.net>2015-02-19 21:13:45 +0000
commit4343922ddef51199854243d3beded0443fcd3a3e (patch)
treef44429ca0f3526b8d80b2dc60b5634408ea11ff0
parent1174fea31c85219563798784024a0637bb470309 (diff)
downloadbcm5719-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.cpp5
-rw-r--r--clang/test/CodeGenCXX/implicit-allocation-functions.cpp15
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*)
OpenPOWER on IntegriCloud