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)); }
On 18 Dec 2017 13:52, "Stephan Bergmann via cfe-commits"
<cfe-commits@lists.llvm.org <mailto:cfe-commits@lists.llvm.org>> wrote:
Author: sberg
Date: Mon Dec 18 05:51:48 2017
New Revision: 320982
URL: http://llvm.org/viewvc/llvm-project?rev=320982&view=rev
<http://llvm.org/viewvc/llvm-project?rev=320982&view=rev>
Log:
Revert r320978 "No -fsanitize=function warning when calling noexcept
function through non-noexcept pointer in C++17"
At least
<http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-android/
builds/6013/steps/annotate/logs/stdio
<http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-android/
builds/6013/steps/annotate/logs/stdio>> complains about
__ubsan::__ubsan_handle_function_type_mismatch_abort (compiler-rt
lib/ubsan/ubsan_handlers.cc) returning now despite being declared
'noreturn', so
looks like a different approach is needed for the
function_type_mismatch check
to be called also in cases that may ultimately succeed.
Modified:
cfe/trunk/lib/CodeGen/CGExpr.cpp
Modified: cfe/trunk/lib/CodeGen/CGExpr.cpp
URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExpr.cpp?rev=320982&r1=320981&r2=320982&view=diff
<http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExpr.cpp?rev=320982&r1=320981&r2=320982&view=diff>
==============================================================================
--- cfe/trunk/lib/CodeGen/CGExpr.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGExpr.cpp Mon Dec 18 05:51:48 2017
@@ -4504,14 +4504,10 @@ RValue CodeGenFunction::EmitCall(QualTyp
Builder.CreateICmpEQ(CalleeRTTI, FTRTTIConst);
llvm::Constant *StaticData[] = {
EmitCheckSourceLocation(E->getLocStart()),
- EmitCheckTypeDescriptor(CalleeType),
- cast<FunctionProtoType>(FnType)->isNothrow(getContext())
- ? llvm::Constant::getNullValue(FTRTTIConst->getType())
- : FTRTTIConst
+ EmitCheckTypeDescriptor(CalleeType)
};
EmitCheck(std::make_pair(CalleeRTTIMatch,
SanitizerKind::Function),
- SanitizerHandler::FunctionTypeMismatch, StaticData,
- {CalleePtr, CalleeRTTI});
+ SanitizerHandler::FunctionTypeMismatch, StaticData,
CalleePtr);
Builder.CreateBr(Cont);
EmitBlock(Cont);
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits