<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>