<html>
    <head>
      <base href="http://bugzilla.gdcproject.org/" />
    </head>
    <body><span class="vcard"><a class="email" href="mailto:art.08.09@gmail.com" title="art.08.09@gmail.com">art.08.09@gmail.com</a>
</span> changed
              <a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - GDC emits unnecessary dead struct inits"
   href="http://bugzilla.gdcproject.org/show_bug.cgi?id=147">bug 147</a>
          <br>
             <table border="1" cellspacing="0" cellpadding="8">
          <tr>
            <th>What</th>
            <th>Removed</th>
            <th>Added</th>
          </tr>

         <tr>
           <td style="text-align:right;">CC</td>
           <td>
                
           </td>
           <td>art.08.09@gmail.com
           </td>
         </tr></table>
      <p>
        <div>
            <b><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - GDC emits unnecessary dead struct inits"
   href="http://bugzilla.gdcproject.org/show_bug.cgi?id=147#c2">Comment # 2</a>
              on <a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - GDC emits unnecessary dead struct inits"
   href="http://bugzilla.gdcproject.org/show_bug.cgi?id=147">bug 147</a>
              from <span class="vcard"><a class="email" href="mailto:art.08.09@gmail.com" title="art.08.09@gmail.com">art.08.09@gmail.com</a>
</span></b>
        <pre>I reported this because I was suspecting it was a symptom of some frontend+glue
problem, which was preventing the dead code from being removed. But I've now 
checked what GCC does for similar 'C' cases and apparently the problem exists
there too, it's just not as visible in 'C' because of the lack of default init.
So this might be an upstream issue and could be closed, if you think there
isn't anything that could be done about it in GDC.

Because of the default initialization in D and frequent use of structs for
creating new types, the impact of this missed optimization is much larger than
for C. For example, a bounds-checked int implementation becomes more expensive
because of this.

I tried a few other things, but was not able to find a workaround. Eg

-------------------------------------------------------
void main(string[] argv) {
   S a = void; 

   import gcc.builtins;
   __builtin_memset(&a, 0, S.sizeof);

   a.v = argv.length; /* Modifies the whole struct. */

   if (a.v==42)
      f();
}
-------------------------------------------------------

In this case the memset *is* completely eliminated. But now the unnecessary a.v
store isn't removed...</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are watching all bug changes.</li>
      </ul>
    </body>
</html>