<div dir="auto"><div><div class="gmail_extra"><div class="gmail_quote">On 18 Dec 2017 15:23, "Stephan Bergmann via cfe-commits" <<a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a>> wrote:<br type="attribution"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="quoted-text">On 12/18/2017 03:05 PM, Richard Smith wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Can we just strip the noexcept from the function type before emitting the fsan type info?<br>
</blockquote>
<br></div>
As is apparently already done when emitting the (not noexcept-annotated) __cxxabiv1::__function_type_in<wbr>fo referenced from a noexcept-annotated __cxxabiv1::__pointer_type_inf<wbr>o?<br>
<br>
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<br>
<br>
void f() {}<br>
void g(void (*p)() noexcept) { p(); }<br>
int main() { g(reinterpret_cast<void (*)() noexcept>(f)); }</blockquote></div></div></div><div dir="auto"><br></div><div dir="auto">That call seems OK to me; if the function does throw, std::terminate() will be called.</div><div dir="auto"><br></div><div dir="auto"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="elided-text">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On 18 Dec 2017 13:52, "Stephan Bergmann via cfe-commits" <<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a> <mailto:<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm<wbr>.org</a>>> wrote:<br>
<br>
Author: sberg<br>
Date: Mon Dec 18 05:51:48 2017<br>
New Revision: 320982<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=320982&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject?rev=320982&view=rev</a><br>
<<a href="http://llvm.org/viewvc/llvm-project?rev=320982&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-p<wbr>roject?rev=320982&view=rev</a>><br>
Log:<br>
Revert r320978 "No -fsanitize=function warning when calling noexcept<br>
function through non-noexcept pointer in C++17"<br>
<br>
At least<br>
<<a href="http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-android/" rel="noreferrer" target="_blank">http://lab.llvm.org:8011/buil<wbr>ders/sanitizer-x86_64-linux-<wbr>android/</a><br>
builds/6013/steps/annotate/log<wbr>s/stdio<br>
<<a href="http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-android/" rel="noreferrer" target="_blank">http://lab.llvm.org:8011/buil<wbr>ders/sanitizer-x86_64-linux-<wbr>android/</a><br>
builds/6013/steps/annotate/log<wbr>s/stdio>> complains about<br>
__ubsan::__ubsan_handle_functi<wbr>on_type_mismatch_abort (compiler-rt<br>
lib/ubsan/ubsan_handlers.cc) returning now despite being declared<br>
'noreturn', so<br>
looks like a different approach is needed for the<br>
function_type_mismatch check<br>
to be called also in cases that may ultimately succeed.<br>
<br>
Modified:<br>
cfe/trunk/lib/CodeGen/CGExpr.c<wbr>pp<br>
<br>
Modified: cfe/trunk/lib/CodeGen/CGExpr.c<wbr>pp<br>
URL:<br>
<a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExpr.cpp?rev=320982&r1=320981&r2=320982&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-pr<wbr>oject/cfe/trunk/lib/CodeGen/CG<wbr>Expr.cpp?rev=320982&r1=320981&<wbr>r2=320982&view=diff</a><br>
<<a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExpr.cpp?rev=320982&r1=320981&r2=320982&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-p<wbr>roject/cfe/trunk/lib/CodeGen/C<wbr>GExpr.cpp?rev=320982&r1=320981<wbr>&r2=320982&view=diff</a>><br>
==============================<wbr>==============================<wbr>==================<br>
--- cfe/trunk/lib/CodeGen/CGExpr.c<wbr>pp (original)<br>
+++ cfe/trunk/lib/CodeGen/CGExpr.c<wbr>pp Mon Dec 18 05:51:48 2017<br>
@@ -4504,14 +4504,10 @@ RValue CodeGenFunction::EmitCall(Qual<wbr>Typ<br>
Builder.CreateICmpEQ(CalleeRT<wbr>TI, FTRTTIConst);<br>
llvm::Constant *StaticData[] = {<br>
EmitCheckSourceLocation(E->ge<wbr>tLocStart()),<br>
- EmitCheckTypeDescriptor(Callee<wbr>Type),<br>
- cast<FunctionProtoType>(FnType<wbr>)->isNothrow(getContext())<br>
- ? llvm::Constant::getNullValue(F<wbr>TRTTIConst->getType())<br>
- : FTRTTIConst<br>
+ EmitCheckTypeDescriptor(Callee<wbr>Type)<br>
};<br>
EmitCheck(std::make_pair(Call<wbr>eeRTTIMatch,<br>
SanitizerKind::Function),<br>
- SanitizerHandler::FunctionType<wbr>Mismatch, StaticData,<br>
- {CalleePtr, CalleeRTTI});<br>
+ SanitizerHandler::FunctionType<wbr>Mismatch, StaticData,<br>
CalleePtr);<br>
<br>
Builder.CreateBr(Cont);<br>
EmitBlock(Cont);<br>
</blockquote>
______________________________<wbr>_________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-commits</a><br>
</div></blockquote></div><br></div></div></div>