]> granicus.if.org Git - clang/commitdiff
[Devirtualization] insert placement new barrier with -O0
authorPiotr Padlewski <piotr.padlewski@gmail.com>
Sat, 20 May 2017 08:56:18 +0000 (08:56 +0000)
committerPiotr Padlewski <piotr.padlewski@gmail.com>
Sat, 20 May 2017 08:56:18 +0000 (08:56 +0000)
Summary:
To not break LTO with different optimizations levels, we should insert
the barrier regardles of optimization level.

Reviewers: rjmccall, rsmith, mehdi_amini

Reviewed By: mehdi_amini

Subscribers: mehdi_amini, cfe-commits

Differential Revision: https://reviews.llvm.org/D32401

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@303488 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGExprCXX.cpp

index 104b50d806ce86eefdece150bf5b609d45c18bf5..a9865f3703d4a5b35cbba311f7348a00de070dd1 100644 (file)
@@ -1658,8 +1658,9 @@ llvm::Value *CodeGenFunction::EmitCXXNewExpr(const CXXNewExpr *E) {
 
   // Passing pointer through invariant.group.barrier to avoid propagation of
   // vptrs information which may be included in previous type.
+  // To not break LTO with different optimizations levels, we do it regardless
+  // of optimization level.
   if (CGM.getCodeGenOpts().StrictVTablePointers &&
-      CGM.getCodeGenOpts().OptimizationLevel > 0 &&
       allocator->isReservedGlobalPlacementOperator())
     result = Address(Builder.CreateInvariantGroupBarrier(result.getPointer()),
                      result.getAlignment());