<html>
    <head>
      <base href="https://bugs.llvm.org/">
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - ifunc turns into alias when using LTO"
   href="https://bugs.llvm.org/show_bug.cgi?id=40368">40368</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>ifunc turns into alias when using LTO
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>libraries
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>trunk
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>PC
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Linux
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>normal
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>Linker
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>sjc@immunant.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvm-bugs@lists.llvm.org
          </td>
        </tr></table>
      <p>
        <div>
        <pre>Created <span class=""><a href="attachment.cgi?id=21349" name="attach_21349" title="Minimal ifunc test case that does not build with -flto">attachment 21349</a> <a href="attachment.cgi?id=21349&action=edit" title="Minimal ifunc test case that does not build with -flto">[details]</a></span>
Minimal ifunc test case that does not build with -flto

Functions declared with the "ifunc" attribute are correctly handled without
LTO, but as soon as LTO is enabled (full or thin), the bitcode linking drops
the ifunc and treats it as an alias. This leads to completely incorrect code
generation for the ifunc.

ifunc.o (compiled with -flto -c):

    @foo = dso_local ifunc i8* (i8*, i32, i64), bitcast (i8* (i8*, i32, i64)*
()* @foo_resolver to i8* (i8*, i32, i64)*)

a.out.0.0.preopt.bc (linked with -flto -Wl,--plugin-opt,save-temps):

    @foo = dso_local alias i8* (i8*, i32, i64), bitcast (i8* (i8*, i32, i64)*
()* @foo_resolver to i8* (i8*, i32, i64)*)</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>