> Am I right that you plan to fix this case in the forthcoming patches?

  Yes, this can be fixed later.

  > Is is possible to split this patch into "fix the base vs complete dtor 
logic in MS ABI" (should be simple enough)
  and then have a separate "handle array delete in MS ABI, with tests" patches?

  I decided to split this patch up by more than that; see D819, D820, D821, 
D822, D823, D824.


================
Comment at: test/CodeGenCXX/microsoft-abi-static-initializers.cpp:14
@@ -13,3 +13,3 @@
 // CHECK: define internal void @"__dtor_\01?s@@3US@@A"() [[NUW]] {
-// CHECK: call x86_thiscallcc void @"\01??1S@@QAE@XZ"
+// CHECK: call x86_thiscallcc void @"\01??_DS@@QAE@XZ"
 // CHECK: ret void
----------------
Timur Iskhodzhanov wrote:
> Should be "?1S@@...", otherwise you might get errors when linking TU compiled 
> with different compilers, right?
Well, we will always define _D when needed, so I don't think so.  (Besides, the 
inliner should take care of this for us at >= -O1).  I modified this test to 
make sure we're emitting _D even when the destructor has no body.

================
Comment at: lib/CodeGen/CodeGenModule.cpp:1223
@@ -1208,2 +1222,3 @@
     return true;
   if (CodeGenOpts.OptimizationLevel == 0 &&
+      !GD.getDecl()->hasAttr<AlwaysInlineAttr>() &&
----------------
Timur Iskhodzhanov wrote:
> how about
> 
>   const FunctionDecl *F = GD.getDecl();
> 
> before the second if?
Done.

================
Comment at: test/CodeGenCXX/microsoft-abi-structors.cpp:69
@@ +68,3 @@
+// DTOR3:        %[[FLAGS_VALUE:[0-9a-z._]+]] = load i32* %[[FLAGS_VAR]]
+// DTOR3:        call x86_thiscallcc void 
@"\01??_DC@basic@@UAE@XZ"(%"struct.basic::C"* %[[THIS:[0-9a-z]+]])
+// DTOR3-NEXT:   %[[CONDITION:[0-9]+]] = icmp eq i32 %[[FLAGS_VALUE]], 0
----------------
Timur Iskhodzhanov wrote:
> Should be "?1C@..." here.
I don't think it needs to be, for the same reason.

================
Comment at: lib/CodeGen/MicrosoftCXXABI.cpp:277
@@ -273,3 +276,3 @@
   } else if (IsDeletingDtor(CGF.CurGD)) {
-    ImplicitParamDecl *ShouldDelete
+    ImplicitParamDecl *Flags
       = ImplicitParamDecl::Create(Context, 0,
----------------
Timur Iskhodzhanov wrote:
> Can you please document that the least significant bit is "whether need to 
> call operator delete at the end" and the second least significant bit is 
> "whether a polymorphic array delete" ? 
Done.


http://llvm-reviews.chandlerc.com/D746
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to