On Wed, Mar 13, 2013 at 3:37 PM, Ian Stewart <span dir="ltr"><<a href="mailto:Ian.Stewart@autodesk.com" target="_blank">Ian.Stewart@autodesk.com</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hello,<br>
<br>
I have created a simple program that crashes when running the resulting code generated by Clang.<br>
<br>
        int main( int argc, char *argv[])<br>
        {<br>
                auto first = [&]() { return argc; };<br>
                auto second = [&]() { return first(); };<br>
                return second();<br>
        }<br>
<br>
I have investigated a little, and what I have found is that Clang mistakenly thinks that 'first' and 'second' should have the same implementation, only generates code for one of them, yet calls it for both.<br>

If I change the resulting type of 'first' to differ from 'second', it works:<br>
<br>
        int main( int argc, char *argv[])<br>
        {<br>
                auto first = [&]() -> unsigned int { return argc; };<br>
                auto second = [&]() -> int { return first(); };<br>
                return second();<br>
        }<br>
<br>
LLVM 3.3 @ SVN 176884<br>
clang++.exe -Xclang -cxx-abi -Xclang microsoft -S -emit-llvm lambdafail.cpp -o lambdafail.cpp.bc<br>
lli.exe lambdafail.cpp.bc x y<br></blockquote><div><br></div><div>The implementation of the Microsoft ABI is incomplete. It's quite likely that it does not correctly mangle lambdas yet.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

expected result: 3<br>
<br>
Thank you,<br>
Ian<br>
<br>
_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
</blockquote></div><br>