r229915 - Avoid using a COMDAT for sized delete on MachO

Reid Kleckner reid at kleckner.net
Thu Feb 19 13:13:45 PST 2015


Author: rnk
Date: Thu Feb 19 15:13:45 2015
New Revision: 229915

URL: http://llvm.org/viewvc/llvm-project?rev=229915&view=rev
Log:
Avoid using a COMDAT for sized delete on MachO

Modified:
    cfe/trunk/lib/CodeGen/CodeGenFunction.cpp
    cfe/trunk/test/CodeGenCXX/implicit-allocation-functions.cpp

Modified: cfe/trunk/lib/CodeGen/CodeGenFunction.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenFunction.cpp?rev=229915&r1=229914&r2=229915&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CodeGenFunction.cpp (original)
+++ cfe/trunk/lib/CodeGen/CodeGenFunction.cpp Thu Feb 19 15:13:45 2015
@@ -806,8 +806,9 @@ static void EmitSizedDeallocationFunctio
                                           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.

Modified: cfe/trunk/test/CodeGenCXX/implicit-allocation-functions.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/implicit-allocation-functions.cpp?rev=229915&r1=229914&r2=229915&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenCXX/implicit-allocation-functions.cpp (original)
+++ cfe/trunk/test/CodeGenCXX/implicit-allocation-functions.cpp Thu Feb 19 15:13:45 2015
@@ -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*)





More information about the cfe-commits mailing list