[cfe-dev] Does clang support -fno-enforce-eh-specs option of gcc

Richard Smith richard at metafoo.co.uk
Tue Nov 13 12:15:27 PST 2012


On Tue, Nov 13, 2012 at 10:51 AM, Matthieu Monrocq
<matthieu.monrocq at gmail.com> wrote:
>
>
> On Tue, Nov 13, 2012 at 7:44 PM, Konstantin Tokarev <annulen at yandex.ru>
> wrote:
>>
>>
>> 13.11.2012, 22:39, "Devchandra L Meetei" <dlmeetei at gmail.com>:
>> > Hi all
>> > is the above flag supported.
>>
>> No.
>>
>> > Will also appreciate if some one can tell best practices to follow while
>> > using clang for reducing size of the resultant binaries?
>>
>> -Os -fno-rtti -fno-exceptions
>>
>> --
>> Regards,
>> Konstantin
>
>
> I would note that this not exactly similar:
>
> -fno-enforce-eh-specs
>     Don't check for violation of exception specifications at runtime. This
> option violates the C++ standard, but may be useful for reducing code size
> in production builds, much like defining NDEBUG. The compiler will still
> optimize based on the exception specifications.
>
> This means that -fno-enforce-eh-specs let's you keep using exceptions.
>
>
> A better alternative to `throw()` combined with `-fno-enforce-eh-specs` is
> `noexcept` in C++11. If you throw, you are into undefined behavior land
> because there is no runtime check.

That was true for a while when the 'noexcept' feature was being
designed, but is no longer the case. Just as a 'throw()' exception
specification calls 'std::unexpected' when an exception is thrown, a
'noexcept' exception specification calls 'std::terminate'. See C++11
[except.spec] p9.



More information about the cfe-dev mailing list