Index: llvm/trunk/docs/CodingStandards.rst =================================================================== --- llvm/trunk/docs/CodingStandards.rst +++ llvm/trunk/docs/CodingStandards.rst @@ -1232,6 +1232,11 @@ code for this branch. If the compiler does not support this, it will fall back to the "abort" implementation. +Neither assertions or ``llvm_unreachable`` will abort the program on a release +build. If the error condition can be triggered by user input, then the +recoverable error mechanism described in :doc:`ProgrammersManual` or +``report_fatal_error`` should be used instead. + Another issue is that values used only by assertions will produce an "unused value" warning when assertions are disabled. For example, this code will warn: Index: llvm/trunk/docs/ProgrammersManual.rst =================================================================== --- llvm/trunk/docs/ProgrammersManual.rst +++ llvm/trunk/docs/ProgrammersManual.rst @@ -441,6 +441,14 @@ as simple as reporting the issue to the user, or it may involve attempts at recovery. +.. note:: + + Ideally, the error handling approach described in this section would be + used throughout LLVM. However, this is not yet the case. For + non-programmatic errors where the ``Error`` scheme cannot easily be + applied, ``report_fatal_error`` should be used to call any installed error + handler and then terminate the program. + Recoverable errors are modeled using LLVM's ``Error`` scheme. This scheme represents errors using function return values, similar to classic C integer error codes, or C++'s ``std::error_code``. However, the ``Error`` class is