<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 --- - LLDB expressions confused by overloading"
   href="https://llvm.org/bugs/show_bug.cgi?id=25433">25433</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>LLDB expressions confused by overloading
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>lldb
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>unspecified
          </td>
        </tr>

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

        <tr>
          <th>OS</th>
          <td>Windows NT
          </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>All Bugs
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>lldb-dev@lists.llvm.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>aidan@codeplay.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>Created <span class=""><a href="attachment.cgi?id=15235" name="attach_15235" title="Test case for lldbs testsuite to reproduce this problem.">attachment 15235</a> <a href="attachment.cgi?id=15235&action=edit" title="Test case for lldbs testsuite to reproduce this problem.">[details]</a></span>
Test case for lldbs testsuite to reproduce this problem.

If a function is inconsistently overloaded and both mangled and unmangled
versions are exported, it is possible that the expression parser will become
confused and will call any of them, regardless of the function arguments.  This
could cause an expression, which calling a function like this to segfault the
target.

A test case is attached that will run as part of the lldb test suite which will
reproduce this problem.

Details of this problem were emailed to the lldb mailing list on the 5th nov
2015.


The test case is setup as follows:
I have one shared library, liba.so which exports a C function:
    int foo(float* v);

I have another shared library, libb.so, which exports two functions with the
overloaded attribute:
    int __attribute__((overloadable)) foo(float* f);
    int __attribute__((overloadable)) foo(int* f2);


Additionaly, liba.so should be compiled without any debugging information,
however libb.so can be compiled with debug info.


I have a main executable which is linked against both of these shared
libraries.
If I try to call foo(int* f2) by passing in an int pointer as parameter, it
will instead incorrectly execute the float version.


Further more, if libb.so containst debug info, on one target I have seen lldb
execute which ever version of the function it can find that has dwarf info
associated with it.
It seems inconsistent as to wether the test case exhibits this additional
behaviour, however farther effort will be put into pinning this down.


I think there is a case to be made for first trying to mangle the function the
expression is calling and searching for that and as a fall back checking for
the presence of the unmangled version.
I belive this should correct this problem.</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are the assignee for the bug.</li>
      </ul>
    </body>
</html>