[llvm] r192864 - Expose install_fatal_error_handler() through the C API.
Evgeniy Stepanov
eugeni.stepanov at gmail.com
Tue Oct 22 05:07:36 PDT 2013
LLVM_ENABLE_WERROR=ON build has been broken on Linux for 5 days now.
Please do something.
On Tue, Oct 22, 2013 at 12:17 PM, Kostya Serebryany <kcc at google.com> wrote:
> 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
>>>> 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 <mailto:llvm-commits at cs.uiuc.edu>
>>>> 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
>>>>
>>>
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at cs.uiuc.edu
>>> 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
>
More information about the llvm-commits
mailing list