&gt; the libraries are vast, don&#x27;t have stable binary interfaces, and don&#x27;t validate parameters, which means that if you get anything wrong it tends to just segfault deep inside somewhere.<p>Did you compile LLVM in Debug+Asserts mode? I rarely ever get segfaults from LLVM in this mode: I just get assertions when constructing invalid IR nodes.<p>&gt; Plus, distribution support has always been pretty poor. e.g. Debian&#x27;s 3.3 package&#x27;s llvm-config tries to link your program against the static libraries rather than the dynamic ones, which leads to painfully large link times.<p>The link times aren&#x27;t so bad if you use gold.<p>&gt; You have a standardised intermediate format which you can throw at any compiler, which is trivially verifiable<p>I wouldn&#x27;t say it&#x27;s trivially verifiable. The undefined behavior rules of C are vast, and compiler authors have to know them incredibly well.<p>&gt; But biggest of all, you don&#x27;t have to keep knowledge of the LLVM API in your brain while you&#x27;re trying to get work done.<p>But you have to keep C&#x27;s undefined behavior rules in the back of your brain (such as signed overflow == UB!), which is worse.