[llvm-branch-commits] [cfe-branch] r242333 - Merging r242293:

Hans Wennborg hans at hanshq.net
Wed Jul 15 14:19:09 PDT 2015


Author: hans
Date: Wed Jul 15 16:19:09 2015
New Revision: 242333

URL: http://llvm.org/viewvc/llvm-project?rev=242333&view=rev
Log:
Merging r242293:
------------------------------------------------------------------------
r242293 | rafael | 2015-07-15 07:48:06 -0700 (Wed, 15 Jul 2015) | 3 lines

Set comdat when an available_externally thunk is converted to linkonce_odr.

Fixes pr24130.
------------------------------------------------------------------------

Modified:
    cfe/branches/release_37/   (props changed)
    cfe/branches/release_37/lib/CodeGen/CGVTables.cpp
    cfe/branches/release_37/test/CodeGenCXX/thunks.cpp

Propchange: cfe/branches/release_37/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Jul 15 16:19:09 2015
@@ -1,4 +1,4 @@
 /cfe/branches/type-system-rewrite:134693-134817
-/cfe/trunk:242244
+/cfe/trunk:242244,242293
 /cfe/trunk/test:170344
 /cfe/trunk/test/SemaTemplate:126920

Modified: cfe/branches/release_37/lib/CodeGen/CGVTables.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_37/lib/CodeGen/CGVTables.cpp?rev=242333&r1=242332&r2=242333&view=diff
==============================================================================
--- cfe/branches/release_37/lib/CodeGen/CGVTables.cpp (original)
+++ cfe/branches/release_37/lib/CodeGen/CGVTables.cpp Wed Jul 15 16:19:09 2015
@@ -56,6 +56,21 @@ static void setThunkVisibility(CodeGenMo
   CGM.setGlobalVisibility(Fn, MD);
 }
 
+static void setThunkProperties(CodeGenModule &CGM, const ThunkInfo &Thunk,
+                               llvm::Function *ThunkFn, bool ForVTable,
+                               GlobalDecl GD) {
+  CGM.setFunctionLinkage(GD, ThunkFn);
+  CGM.getCXXABI().setThunkLinkage(ThunkFn, ForVTable, GD,
+                                  !Thunk.Return.isEmpty());
+
+  // Set the right visibility.
+  const CXXMethodDecl *MD = cast<CXXMethodDecl>(GD.getDecl());
+  setThunkVisibility(CGM, MD, Thunk, ThunkFn);
+
+  if (CGM.supportsCOMDAT() && ThunkFn->isWeakForLinker())
+    ThunkFn->setComdat(CGM.getModule().getOrInsertComdat(ThunkFn->getName()));
+}
+
 #ifndef NDEBUG
 static bool similar(const ABIArgInfo &infoL, CanQualType typeL,
                     const ABIArgInfo &infoR, CanQualType typeR) {
@@ -429,8 +444,7 @@ void CodeGenVTables::emitThunk(GlobalDec
       return;
     }
 
-    // Change the linkage.
-    CGM.setFunctionLinkage(GD, ThunkFn);
+    setThunkProperties(CGM, Thunk, ThunkFn, ForVTable, GD);
     return;
   }
 
@@ -451,16 +465,7 @@ void CodeGenVTables::emitThunk(GlobalDec
     CodeGenFunction(CGM).generateThunk(ThunkFn, FnInfo, GD, Thunk);
   }
 
-  CGM.setFunctionLinkage(GD, ThunkFn);
-  CGM.getCXXABI().setThunkLinkage(ThunkFn, ForVTable, GD,
-                                  !Thunk.Return.isEmpty());
-
-  // Set the right visibility.
-  const CXXMethodDecl *MD = cast<CXXMethodDecl>(GD.getDecl());
-  setThunkVisibility(CGM, MD, Thunk, ThunkFn);
-
-  if (CGM.supportsCOMDAT() && ThunkFn->isWeakForLinker())
-    ThunkFn->setComdat(CGM.getModule().getOrInsertComdat(ThunkFn->getName()));
+  setThunkProperties(CGM, Thunk, ThunkFn, ForVTable, GD);
 }
 
 void CodeGenVTables::maybeEmitThunkForVTable(GlobalDecl GD,

Modified: cfe/branches/release_37/test/CodeGenCXX/thunks.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_37/test/CodeGenCXX/thunks.cpp?rev=242333&r1=242332&r2=242333&view=diff
==============================================================================
--- cfe/branches/release_37/test/CodeGenCXX/thunks.cpp (original)
+++ cfe/branches/release_37/test/CodeGenCXX/thunks.cpp Wed Jul 15 16:19:09 2015
@@ -361,6 +361,23 @@ namespace Test15 {
   // CHECK: declare void @_ZThn8_N6Test151C1fEiz
 }
 
+namespace Test16 {
+struct A {
+  virtual ~A();
+};
+struct B {
+  virtual void foo();
+};
+struct C : public A, public B {
+  void foo() {}
+};
+struct D : public C {
+  ~D();
+};
+D::~D() {}
+// CHECK: define linkonce_odr void @_ZThn8_N6Test161C3fooEv({{.*}}) {{.*}} comdat
+}
+
 /**** The following has to go at the end of the file ****/
 
 // This is from Test5:





More information about the llvm-branch-commits mailing list