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

Kostya Serebryany kcc at google.com
Mon Oct 21 02:03:51 PDT 2013


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/20131021/9ccc10cf/attachment.html>


More information about the llvm-commits mailing list