LLVM behandelt das Erreichen eines Status, der eine Ausnahme als sofortigen Absturz auslösen würde. Wenn die verwendeten Implementierungs-/Kompilierungseinstellungen Ausnahmen aktivieren, wird eine Instanz abgesetzt und findet keinen Catch-Handler und ruft std::terminate
auf. Wenn die Implementierungs-/Kompilierungseinstellungen Ausnahmen deaktivieren, muss die Implementierung ein alternatives Verhalten bereitstellen. Die meisten werden sofort auf die eine oder andere Weise abstürzen.
Entwickler auf LLVM testen ihren Code mit genau diesen Einstellungen und sind vorsichtig, Umstände zu vermeiden, die möglicherweise werfen könnten.
Ein Umstand, der nicht direkt vermieden werden kann, sind Zuordnungsfehler. LLVM unterstützt einfach keine Plattformen, bei denen Zuteilungen fehlschlagen und der Benutzer bad_alloc
fangen muss. Wenn die Plattform zu irgendeinem Zeitpunkt keinen Speicher zuweist, stürzt LLVM ab.
Es stellt sich heraus, dass die überwiegende Mehrheit der nicht eingebetteten Plattformen heute eine Form von overcommit verwenden. Und aufgrund der Art und Weise, wie LLVM entwickelt wird, haben wir keinen besonders nützlichen Mechanismus, um vernünftig auf eine fehlgeschlagene Speicherzuweisung zu reagieren. Als Konsequenz wird dies als fataler und nicht behebbarer Fehler angesehen. Ob wir Ausnahmen zulassen oder nicht, wir werden den Prozess an diesem Punkt beenden.
Es sagt im Zitat, dass es sie ausschaltet, was trivialerweise mit '-fno-rtti' oder-' fno-exceptions' gemacht wird. –