Author: yln Date: Fri Feb 1 18:05:16 2019 New Revision: 352948 URL: http://llvm.org/viewvc/llvm-project?rev=352948&view=rev Log: [ASan] Do not instrument other runtime functions with `__asan_handle_no_return`
Summary: Currently, ASan inserts a call to `__asan_handle_no_return` before every `noreturn` function call/invoke. This is unnecessary for calls to other runtime funtions. This patch changes ASan to skip instrumentation for functions calls marked with `!nosanitize` metadata. Reviewers: TODO Differential Revision: https://reviews.llvm.org/D57489 Modified: cfe/trunk/lib/CodeGen/CGCall.cpp cfe/trunk/test/CodeGen/ubsan-asan-noreturn.c Modified: cfe/trunk/lib/CodeGen/CGCall.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGCall.cpp?rev=352948&r1=352947&r2=352948&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/CGCall.cpp (original) +++ cfe/trunk/lib/CodeGen/CGCall.cpp Fri Feb 1 18:05:16 2019 @@ -4394,8 +4394,8 @@ RValue CodeGenFunction::EmitCall(const C // Strip away the noreturn attribute to better diagnose unreachable UB. if (SanOpts.has(SanitizerKind::Unreachable)) { - // Also remove from function since CI->hasFnAttr(..) also checks attributes - // of the called function. + // Also remove from function since CallBase::hasFnAttr additionally checks + // attributes of the called function. if (auto *F = CI->getCalledFunction()) F->removeFnAttr(llvm::Attribute::NoReturn); CI->removeAttribute(llvm::AttributeList::FunctionIndex, Modified: cfe/trunk/test/CodeGen/ubsan-asan-noreturn.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/ubsan-asan-noreturn.c?rev=352948&r1=352947&r2=352948&view=diff ============================================================================== --- cfe/trunk/test/CodeGen/ubsan-asan-noreturn.c (original) +++ cfe/trunk/test/CodeGen/ubsan-asan-noreturn.c Fri Feb 1 18:05:16 2019 @@ -9,8 +9,7 @@ void calls_noreturn() { my_longjmp(); // CHECK: @__asan_handle_no_return{{.*}} !nosanitize // CHECK-NEXT: @my_longjmp(){{[^#]*}} - // CHECK: @__asan_handle_no_return() - // CHECK-NEXT: @__ubsan_handle_builtin_unreachable{{.*}} !nosanitize + // CHECK: @__ubsan_handle_builtin_unreachable{{.*}} !nosanitize // CHECK-NEXT: unreachable } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits