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

Kostya Serebryany kcc at google.com
Tue Oct 22 01:17:04 PDT 2013


Filip,
  ping.


On Mon, Oct 21, 2013 at 1:03 PM, Kostya Serebryany <kcc at google.com> wrote:

> This seems to be still unfixed.
>
> --kcc
>
>
> On Thu, Oct 17, 2013 at 11:50 AM, Kai Nacke <kai.nacke at redstar.de> wrote:
>
>> Yes - I see it with clang 3.4 on Linux.
>>
>> Regards
>> Kai
>>
>>
>> On 17.10.2013 09:41, Kostya Serebryany wrote:
>>
>>> 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
>>> <mailto: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<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<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<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 <mailto:llvm-commits at cs.uiuc.**edu<llvm-commits at cs.uiuc.edu>
>>> >
>>>     http://lists.cs.uiuc.edu/**mailman/listinfo/llvm-commits<http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits>
>>>
>>>
>>>
>>>
>>>
>>> ______________________________**_________________
>>> llvm-commits mailing list
>>> llvm-commits at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/**mailman/listinfo/llvm-commits<http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits>
>>>
>>>
>> ______________________________**_________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/**mailman/listinfo/llvm-commits<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/20131022/dc09239b/attachment.html>


More information about the llvm-commits mailing list