<html>
    <head>
      <base href="https://llvm.org/bugs/" />
    </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 --- - Linker wronlgy renames an external function"
   href="https://llvm.org/bugs/show_bug.cgi?id=26152">26152</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Linker wronlgy renames an external function
          </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>eugeni.stepanov@gmail.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>llvm-bugs@lists.llvm.org
          </td>
        </tr>

        <tr>
          <th>Classification</th>
          <td>Unclassified
          </td>
        </tr></table>
      <p>
        <div>
        <pre>I'm linking 2 modules, where the first calls an external function A(), and the
second defines A() and also an alias for it.

The resulting module does not export A(). Instead it exports A.1().

The behavior depends on the order of modules in the link command line.

$ cat 1.ll
define void @B() {
  call void @A()
  ret void
}

declare void @A()

$ cat 2.ll
@C = alias void (), void ()* @A

define void @D() {
  call void @C()
  ret void
}

define void @A() {
  ret void
}

$ llvm-link 1.ll 2.ll -S -o - 
; ModuleID = 'llvm-link'

@C = alias void (), void ()* @A.1

define void @B() {
  call void @A.1()
  ret void
}

define void @D() {
  call void @C()
  ret void
}

define void @A.1() {
  ret void
}</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>