[cfe-commits] r102882 - in /cfe/trunk/lib/CodeGen: CGClass.cpp CGDecl.cpp CGExpr.cpp CGExprCXX.cpp CGObjC.cpp CGTemporaries.cpp CodeGenFunction.h

Anders Carlsson andersca at mac.com
Sun May 2 16:29:11 PDT 2010


Author: andersca
Date: Sun May  2 18:29:11 2010
New Revision: 102882

URL: http://llvm.org/viewvc/llvm-project?rev=102882&view=rev
Log:
Add the same 'ForVirtualBase' parameter to EmitCXXDestructorCall.

Modified:
    cfe/trunk/lib/CodeGen/CGClass.cpp
    cfe/trunk/lib/CodeGen/CGDecl.cpp
    cfe/trunk/lib/CodeGen/CGExpr.cpp
    cfe/trunk/lib/CodeGen/CGExprCXX.cpp
    cfe/trunk/lib/CodeGen/CGObjC.cpp
    cfe/trunk/lib/CodeGen/CGTemporaries.cpp
    cfe/trunk/lib/CodeGen/CodeGenFunction.h

Modified: cfe/trunk/lib/CodeGen/CGClass.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGClass.cpp?rev=102882&r1=102881&r2=102882&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGClass.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGClass.cpp Sun May  2 18:29:11 2010
@@ -626,7 +626,7 @@
     CodeGenFunction::EHCleanupBlock Cleanup(CGF);
 
     CXXDestructorDecl *DD = BaseClassDecl->getDestructor(CGF.getContext());
-    CGF.EmitCXXDestructorCall(DD, Dtor_Base, V);
+    CGF.EmitCXXDestructorCall(DD, Dtor_Base, isBaseVirtual, V);
   }
 }
 
@@ -685,7 +685,8 @@
       LValue LHS = CGF.EmitLValueForField(ThisPtr, Field, 0);
 
       CXXDestructorDecl *DD = RD->getDestructor(CGF.getContext());
-      CGF.EmitCXXDestructorCall(DD, Dtor_Complete, LHS.getAddress());
+      CGF.EmitCXXDestructorCall(DD, Dtor_Complete, /*ForVirtualBase=*/false,
+                                LHS.getAddress());
     }
   }
 }
@@ -843,7 +844,8 @@
   // variant, then call the appropriate operator delete() on the way
   // out.
   if (DtorType == Dtor_Deleting) {
-    EmitCXXDestructorCall(Dtor, Dtor_Complete, LoadCXXThis());
+    EmitCXXDestructorCall(Dtor, Dtor_Complete, /*ForVirtualBase=*/false,
+                          LoadCXXThis());
     SkipBody = true;
 
   // If this is the complete variant, just invoke the base variant;
@@ -851,7 +853,8 @@
   // this optimization if the body is a function-try-block, because
   // we'd introduce *two* handler blocks.
   } else if (!isTryBody && DtorType == Dtor_Complete) {
-    EmitCXXDestructorCall(Dtor, Dtor_Base, LoadCXXThis());
+    EmitCXXDestructorCall(Dtor, Dtor_Base, /*ForVirtualBase=*/false,
+                          LoadCXXThis());
     SkipBody = true;
       
   // Otherwise, we're in the base variant, so we need to ensure the
@@ -936,7 +939,7 @@
         GetAddressOfDirectBaseInCompleteClass(LoadCXXThis(),
                                               ClassDecl, BaseClassDecl,
                                               /*BaseIsVirtual=*/true);
-      EmitCXXDestructorCall(D, Dtor_Base, V);
+      EmitCXXDestructorCall(D, Dtor_Base, /*ForVirtualBase=*/true, V);
     }
     return;
   }
@@ -990,7 +993,8 @@
                                 Array, BaseAddrPtr);
     } else
       EmitCXXDestructorCall(FieldClassDecl->getDestructor(getContext()),
-                            Dtor_Complete, LHS.getAddress());
+                            Dtor_Complete, /*ForVirtualBase=*/false,
+                            LHS.getAddress());
   }
 
   // Destroy non-virtual bases.
@@ -1012,7 +1016,7 @@
     
     llvm::Value *V = OldGetAddressOfBaseClass(LoadCXXThis(),
                                               ClassDecl, BaseClassDecl);
-    EmitCXXDestructorCall(D, Dtor_Base, V);
+    EmitCXXDestructorCall(D, Dtor_Base, /*ForVirtualBase=*/false, V);
   }
 }
 
@@ -1160,7 +1164,7 @@
   Counter = Builder.CreateLoad(IndexPtr);
   Counter = Builder.CreateSub(Counter, One);
   llvm::Value *Address = Builder.CreateInBoundsGEP(This, Counter, "arrayidx");
-  EmitCXXDestructorCall(D, Dtor_Complete, Address);
+  EmitCXXDestructorCall(D, Dtor_Complete, /*ForVirtualBase=*/false, Address);
 
   EmitBlock(ContinueBlock);
 
@@ -1318,6 +1322,7 @@
 
 void CodeGenFunction::EmitCXXDestructorCall(const CXXDestructorDecl *DD,
                                             CXXDtorType Type,
+                                            bool ForVirtualBase,
                                             llvm::Value *This) {
   llvm::Value *VTT = GetVTTParameter(*this, GlobalDecl(DD, Type));
   llvm::Value *Callee = CGM.GetAddrOfCXXDestructor(DD, Type);

Modified: cfe/trunk/lib/CodeGen/CGDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDecl.cpp?rev=102882&r1=102881&r2=102882&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGDecl.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGDecl.cpp Sun May  2 18:29:11 2010
@@ -676,14 +676,16 @@
         } else {
           {
             DelayedCleanupBlock Scope(*this);
-            EmitCXXDestructorCall(D, Dtor_Complete, DeclPtr);
+            EmitCXXDestructorCall(D, Dtor_Complete, /*ForVirtualBase=*/false,
+                                  DeclPtr);
 
             // Make sure to jump to the exit block.
             EmitBranch(Scope.getCleanupExitBlock());
           }
           if (Exceptions) {
             EHCleanupBlock Cleanup(*this);
-            EmitCXXDestructorCall(D, Dtor_Complete, DeclPtr);
+            EmitCXXDestructorCall(D, Dtor_Complete, /*ForVirtualBase=*/false,
+                                  DeclPtr);
           }
         }
       }

Modified: cfe/trunk/lib/CodeGen/CGExpr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExpr.cpp?rev=102882&r1=102881&r2=102882&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGExpr.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGExpr.cpp Sun May  2 18:29:11 2010
@@ -208,6 +208,7 @@
             {
               DelayedCleanupBlock Scope(*this);
               EmitCXXDestructorCall(Dtor, Dtor_Complete,
+                                    /*ForVirtualBase=*/false,
                                     Val.getAggregateAddr());
               
               // Make sure to jump to the exit block.
@@ -216,6 +217,7 @@
             if (Exceptions) {
               EHCleanupBlock Cleanup(*this);
               EmitCXXDestructorCall(Dtor, Dtor_Complete,
+                                    /*ForVirtualBase=*/false,
                                     Val.getAggregateAddr());
             }
           }

Modified: cfe/trunk/lib/CodeGen/CGExprCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprCXX.cpp?rev=102882&r1=102881&r2=102882&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGExprCXX.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGExprCXX.cpp Sun May  2 18:29:11 2010
@@ -765,7 +765,8 @@
           // The dtor took care of deleting the object.
           ShouldCallDelete = false;
         } else 
-          EmitCXXDestructorCall(Dtor, Dtor_Complete, Ptr);
+          EmitCXXDestructorCall(Dtor, Dtor_Complete, /*ForVirtualBase=*/false,
+                                Ptr);
       }
     }
   }

Modified: cfe/trunk/lib/CodeGen/CGObjC.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGObjC.cpp?rev=102882&r1=102881&r2=102882&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGObjC.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGObjC.cpp Sun May  2 18:29:11 2010
@@ -451,7 +451,8 @@
       }
       else 
         EmitCXXDestructorCall(FieldClassDecl->getDestructor(CGM.getContext()),
-                              Dtor_Complete, LV.getAddress());
+                              Dtor_Complete, /*ForVirtualBase=*/false,
+                              LV.getAddress());
     }    
   }
   FinishFunction();

Modified: cfe/trunk/lib/CodeGen/CGTemporaries.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGTemporaries.cpp?rev=102882&r1=102881&r2=102882&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGTemporaries.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGTemporaries.cpp Sun May  2 18:29:11 2010
@@ -61,7 +61,8 @@
     }
 
     EmitCXXDestructorCall(Info.Temporary->getDestructor(),
-                          Dtor_Complete, Info.ThisPtr);
+                          Dtor_Complete, /*ForVirtualBase=*/false,
+                          Info.ThisPtr);
 
     if (CondEnd) {
       // Reset the condition. to false.
@@ -104,7 +105,7 @@
   }
 
   EmitCXXDestructorCall(Info.Temporary->getDestructor(),
-                        Dtor_Complete, Info.ThisPtr);
+                        Dtor_Complete, /*ForVirtualBase=*/false, Info.ThisPtr);
 
   if (CondEnd) {
     // Reset the condition. to false.

Modified: cfe/trunk/lib/CodeGen/CodeGenFunction.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenFunction.h?rev=102882&r1=102881&r2=102882&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CodeGenFunction.h (original)
+++ cfe/trunk/lib/CodeGen/CodeGenFunction.h Sun May  2 18:29:11 2010
@@ -845,7 +845,7 @@
                                                 llvm::Value *This);
 
   void EmitCXXDestructorCall(const CXXDestructorDecl *D, CXXDtorType Type,
-                             llvm::Value *This);
+                             bool ForVirtualBase, llvm::Value *This);
 
   void PushCXXTemporary(const CXXTemporary *Temporary, llvm::Value *Ptr);
   void PopCXXTemporary();





More information about the cfe-commits mailing list