r320982 - Revert r320978 "No -fsanitize=function warning when calling noexcept function through non-noexcept pointer in C++17"

Stephan Bergmann via cfe-commits cfe-commits at lists.llvm.org
Tue Dec 19 05:23:41 PST 2017


On 12/19/2017 01:58 PM, Richard Smith wrote:
> On 18 Dec 2017 15:23, "Stephan Bergmann via cfe-commits" 
> <cfe-commits at lists.llvm.org <mailto:cfe-commits at lists.llvm.org>> wrote:
> 
>     On 12/18/2017 03:05 PM, Richard Smith wrote:
> 
>         Can we just strip the noexcept from the function type before
>         emitting the fsan type info?
> 
> 
>     As is apparently already done when emitting the (not
>     noexcept-annotated) __cxxabiv1::__function_type_info referenced from
>     a noexcept-annotated __cxxabiv1::__pointer_type_info?
> 
>     That would indeed look like a better way to address this, then.  But
>     wouldn't that also prevent -fsanitize=function from finding
>     mismatches where a non-noexcept function is called through a
>     noexcept pointer, as in
> 
>        void f() {}
>        void g(void (*p)() noexcept) { p(); }
>        int main() { g(reinterpret_cast<void (*)() noexcept>(f)); }
> 
> 
> That call seems OK to me; if the function does throw, std::terminate() 
> will be called.

I would have assumed that should be UB.  But that arguably could depend 
on whether and how that DR about calling noexpect functions through 
non-noexcept pointers that both you and I reported will be resolved. 
(It's a bit unfortunate that no information about those DR filings is 
yet available at 
<http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html>.)

One more argument in favour of resolving this issue as per 
<https://reviews.llvm.org/D40720#958730> for now.  So I'll look into that.


More information about the cfe-commits mailing list