Hello! I am trying to use LLVM 2.4 in a project built with MS Visual Studio 2008. I've been building LLVM with the llvm/win32/llvm.sln solution successfully for x86 and x64. I haven't yet tried to move to the CMake build process, so I'd be interested to hear if the following issues have been resolved on that path.<br>
<br>The problem that I've run into is that the LLVM codebase does certain "idiomatic" things with STL containers that cause assertion failures in the Microsoft runtime. Most notably:<br>- Taking the address of the "first element" of an emtpy vector (either &v[0] or &*v.begin())<br>
- Using an iterator into a collection (even if just for iterator comparison) after an erase() or similar on that collection has invalidated all iterators<br>These assertions can occur in both debug and release configurations
(Microsoft includes certain assertions in the release runtime for
"security").<br>
<br>I do *not* want to start a flamewar on the subject of who is right in this conflict. The Microsoft STL simply assert-fails on things that are officially undefined in the spec for the STL (as a matter of policy), and LLVM just relies on certain pieces of undefined behavior that are typically benign in most implementations.<br>
<br>I'd be interested to hear if other LLVM users have seen these problems or if any have solutions to propose. I have a few possible solutions in mind, but will refrain from going into any of them until I've heard from the community.<br>
<br>- Tim Foley<br>