<div dir="ltr">Ah, sorry, was confused a bit because you talked about "deleting constructors" and I thought you meant in the C++ sense of "= delete".<br><br>You mean Clang didn't produce an actual llvm::Function for a constructor when the constructor is trivial? Right right.<br><br>I'd suggest you start with the small/simple example of a non-trivial ctor like and one with a trivial dtor:<br><br>struct t1 { t1(); };<br>struct t2 { };<br>int main() {<div>  t1 v1;<br>  t2 v2;<br>}<br><br>(I'd actually write these in two different programs, rather than all in one)<br><br>Then compile each of the two examples - run the compiler under a debugger, break on, maybe llvm::Function's ctor, eventually you'll break on LLVM making the ctor function, and you can trace back through the two debuggers to try to figure out why one does make the ctor and why one doesn't and modify the code there to always make it.<br><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Mar 23, 2020 at 7:45 PM Yuseok Jeon via cfe-dev <<a href="mailto:cfe-dev@lists.llvm.org">cfe-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">




<div dir="ltr">
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<div>Dear all,</div>
<div><br>
</div>
<div></div>
<span>I checked that clang deletes (checked IR code) structure's constructor when a structure is declared with a structure pointer (e.g., structure "Item" in the below example code).</span></div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<span><br>
</span><span>On the other hand, clang did not delete constructor when structure declared with variable (not a pointer) as structure "Item2" in the
<span style="font-family:Calibri,Arial,Helvetica,sans-serif;background-color:rgb(255,255,255);display:inline">
below</span> example code.</span></div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">
<br>
<div></div>
<div><u>[Example Code]</u></div>
<div>
<div style="margin:0px">
<table width="" style="border-collapse:collapse">
<tbody>
<tr style="background-color:rgb(255,255,255)">
<td style="width:519px;border-width:1px;border-style:solid;border-color:rgb(171,171,171)">
<div style="margin:0px;font-family:Calibri,Arial,Helvetica,sans-serif;background-color:rgb(255,255,255)">
class DataSet<br>
</div>
<div style="margin:0px;font-family:Calibri,Arial,Helvetica,sans-serif;background-color:rgb(255,255,255)">
{<br>
</div>
<div style="margin:0px;font-family:Calibri,Arial,Helvetica,sans-serif;background-color:rgb(255,255,255)">
public:<br>
</div>
<div style="margin:0px;font-family:Calibri,Arial,Helvetica,sans-serif;background-color:rgb(255,255,255)">
   struct Item<br>
</div>
<div style="margin:0px;font-family:Calibri,Arial,Helvetica,sans-serif;background-color:rgb(255,255,255)">
   {<br>
</div>
<div style="margin:0px;font-family:Calibri,Arial,Helvetica,sans-serif;background-color:rgb(255,255,255)">
      int  info;<br>
</div>
<div style="margin:0px;font-family:Calibri,Arial,Helvetica,sans-serif;background-color:rgb(255,255,255)">
      Item() {};</div>
<div style="margin:0px;font-family:Calibri,Arial,Helvetica,sans-serif;background-color:rgb(255,255,255)">
   }* theitem;<br>
</div>
<div style="margin:0px;font-family:Calibri,Arial,Helvetica,sans-serif;background-color:rgb(255,255,255)">
<br>
</div>
<div style="margin:0px;font-family:Calibri,Arial,Helvetica,sans-serif;background-color:rgb(255,255,255)">
   struct Item2<br>
</div>
<div style="margin:0px;font-family:Calibri,Arial,Helvetica,sans-serif;background-color:rgb(255,255,255)">
   {<br>
</div>
<div style="margin:0px;font-family:Calibri,Arial,Helvetica,sans-serif;background-color:rgb(255,255,255)">
     int  info;      <span style="margin:0px"> </span><br>
</div>
<div style="margin:0px;font-family:Calibri,Arial,Helvetica,sans-serif;background-color:rgb(255,255,255)">
     Item2() {};<br>
</div>
<div style="margin:0px;font-family:Calibri,Arial,Helvetica,sans-serif;background-color:rgb(255,255,255)">
   } theitem2;      <br>
</div>
<div style="margin:0px;font-family:Calibri,Arial,Helvetica,sans-serif;background-color:rgb(255,255,255)">
<br>
</div>
<div style="margin:0px;font-family:Calibri,Arial,Helvetica,sans-serif;background-color:rgb(255,255,255)">
   int themax;<br>
</div>
<div style="margin:0px;font-family:Calibri,Arial,Helvetica,sans-serif;background-color:rgb(255,255,255)">
};<br>
</div>
<div style="margin:0px;font-family:Calibri,Arial,Helvetica,sans-serif;background-color:rgb(255,255,255)">
 <span style="margin:0px"> </span><br>
</div>
<div style="margin:0px;font-family:Calibri,Arial,Helvetica,sans-serif;background-color:rgb(255,255,255)">
int main() {<br>
</div>
<div style="margin:0px;font-family:Calibri,Arial,Helvetica,sans-serif;background-color:rgb(255,255,255)">
  DataSet T;<br>
</div>
<div style="margin:0px;font-family:Calibri,Arial,Helvetica,sans-serif;background-color:rgb(255,255,255)">
  return 0;</div>
<div style="margin:0px;font-family:Calibri,Arial,Helvetica,sans-serif;background-color:rgb(255,255,255)">
}</div>
</td>
</tr>
</tbody>
</table>
<br>
</div>
<div style="margin:0px"></div>
</div>
<span>I can understand this clang's behavior (for optimization).<br>
</span>
<div>However, for research purposes, I need to keep constructor although structure declared with a structure pointer.<br>
</div>
<div><br>
</div>
<span>If you don't mind, could you please advise how I find this optimization function (remove constructor) in clang (I plan to update this code)?</span>
<div></div>
<div>
<ul>
<li>I tried to forcibly insert constructor using "DeclareImplicitDefaultConstructor or DefineImplicitDefaultConstructor" and check other possible functions such as "ShouldDeleteSpecialMember" (in SemaDeclCXX.cpp). </li><li>However, I could not find an answer yet.</li></ul>
<div>Thank you very much.<br>
</div>
<div><br>
</div>
<div>Best regards,</div>
<div>Y. Jeon.</div>
</div>
</div>
</div>

_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@lists.llvm.org" target="_blank">cfe-dev@lists.llvm.org</a><br>
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev</a><br>
</blockquote></div>