[llvm] r192864 - Expose install_fatal_error_handler() through the C API.

Kostya Serebryany kcc at google.com
Thu Oct 17 00:41:10 PDT 2013


This is causing build errors for me:

/home/kcc/llvm/lib/Support/ErrorHandling.cpp:110:5: error: cast between
pointer-to-function and pointer-to-object is an extension
[-Werror,-Wpedantic]
    reinterpret_cast<LLVMFatalErrorHandler>(user_data);
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/kcc/llvm/lib/Support/ErrorHandling.cpp:116:27: error: cast between
pointer-to-function and pointer-to-object is an extension
[-Werror,-Wpedantic]
    bindingsErrorHandler, reinterpret_cast<void*>(Handler));
                          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Does anyone else see these?

My build config is:
cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_ASSERTIONS=ON \
 -DCMAKE_C_COMPILER=/home/kcc/host_clang/bin/clang \
 -DCMAKE_CXX_COMPILER=/home/kcc/host_clang/bin/clang++ \
 -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
 -DLLVM_ENABLE_WERROR=ON





On Thu, Oct 17, 2013 at 5:38 AM, Filip Pizlo <fpizlo at apple.com> wrote:

> Author: fpizlo
> Date: Wed Oct 16 20:38:28 2013
> New Revision: 192864
>
> URL: http://llvm.org/viewvc/llvm-project?rev=192864&view=rev
> Log:
> Expose install_fatal_error_handler() through the C API.
>
> I expose the API with some caveats:
>
> - The C++ API involves a traditional void* opaque pointer for the fatal
> error callback.  The C API doesn’t do this.  I don’t think that the void*
> opaque pointer makes any sense since this is a global callback - there will
> only be one of them.  So if you need to pass some data to your callback,
> just put it in a global variable.
>
> - The bindings will ignore the gen_crash_diag boolean.  I ignore it because
> (1) I don’t know what it does, (2) it’s not documented AFAIK, and (3) I
> couldn’t imagine any use for it.  I made the gut call that it probably
> wasn’t important enough to expose through the C API.
>
>
> Modified:
>     llvm/trunk/include/llvm-c/Core.h
>     llvm/trunk/lib/Support/ErrorHandling.cpp
>
> Modified: llvm/trunk/include/llvm-c/Core.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm-c/Core.h?rev=192864&r1=192863&r2=192864&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm-c/Core.h (original)
> +++ llvm/trunk/include/llvm-c/Core.h Wed Oct 16 20:38:28 2013
> @@ -416,6 +416,22 @@ void LLVMShutdown();
>  char *LLVMCreateMessage(const char *Message);
>  void LLVMDisposeMessage(char *Message);
>
> +typedef void (*LLVMFatalErrorHandler)(const char *Reason);
> +
> +/**
> + * Install a fatal error handler. By default, if LLVM detects a fatal
> error, it
> + * will call exit(1). This may not be appropriate in many contexts. For
> example,
> + * doing exit(1) will bypass many crash reporting/tracing system tools.
> This
> + * function allows you to install a callback that will be invoked prior
> to the
> + * call to exit(1).
> + */
> +void LLVMInstallFatalErrorHandler(LLVMFatalErrorHandler Handler);
> +
> +/**
> + * Reset the fatal error handler. This resets LLVM's fatal error handling
> + * behavior to the default.
> + */
> +void LLVMResetFatalErrorHandler(void);
>
>  /**
>   * @defgroup LLVMCCoreContext Contexts
>
> Modified: llvm/trunk/lib/Support/ErrorHandling.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/ErrorHandling.cpp?rev=192864&r1=192863&r2=192864&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Support/ErrorHandling.cpp (original)
> +++ llvm/trunk/lib/Support/ErrorHandling.cpp Wed Oct 16 20:38:28 2013
> @@ -20,6 +20,7 @@
>  #include "llvm/Support/Signals.h"
>  #include "llvm/Support/Threading.h"
>  #include "llvm/Support/raw_ostream.h"
> +#include "llvm-c/Core.h"
>  #include <cassert>
>  #include <cstdlib>
>
> @@ -102,3 +103,19 @@ void llvm::llvm_unreachable_internal(con
>    LLVM_BUILTIN_UNREACHABLE;
>  #endif
>  }
> +
> +static void bindingsErrorHandler(void *user_data, const std::string&
> reason,
> +                                 bool gen_crash_diag) {
> +  LLVMFatalErrorHandler handler =
> +    reinterpret_cast<LLVMFatalErrorHandler>(user_data);
> +  handler(reason.c_str());
> +}
> +
> +void LLVMInstallFatalErrorHandler(LLVMFatalErrorHandler Handler) {
> +  install_fatal_error_handler(
> +    bindingsErrorHandler, reinterpret_cast<void*>(Handler));
> +}
> +
> +void LLVMResetFatalErrorHandler() {
> +  remove_fatal_error_handler();
> +}
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20131017/d3cf0c0f/attachment.html>


More information about the llvm-commits mailing list