mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-15 23:31:37 +00:00
[asan] instrument invoke insns with noreturn attribute (as well as call insns)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@175617 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
af3a5420ae
commit
1479c9bb39
@ -35,6 +35,7 @@
|
||||
#include "llvm/IR/Module.h"
|
||||
#include "llvm/IR/Type.h"
|
||||
#include "llvm/InstVisitor.h"
|
||||
#include "llvm/Support/CallSite.h"
|
||||
#include "llvm/Support/CommandLine.h"
|
||||
#include "llvm/Support/DataTypes.h"
|
||||
#include "llvm/Support/Debug.h"
|
||||
@ -1130,12 +1131,12 @@ bool AddressSanitizer::runOnFunction(Function &F) {
|
||||
} else if (isa<MemIntrinsic>(BI) && ClMemIntrin) {
|
||||
// ok, take it.
|
||||
} else {
|
||||
if (CallInst *CI = dyn_cast<CallInst>(BI)) {
|
||||
CallSite CS(BI);
|
||||
if (CS) {
|
||||
// A call inside BB.
|
||||
TempsToInstrument.clear();
|
||||
if (CI->doesNotReturn()) {
|
||||
NoReturnCalls.push_back(CI);
|
||||
}
|
||||
if (CS.doesNotReturn())
|
||||
NoReturnCalls.push_back(CS.getInstruction());
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
; RUN: opt < %s -asan -S | FileCheck %s
|
||||
; AddressSanitizer must insert __asan_handle_no_return
|
||||
; before every noreturn call.
|
||||
; before every noreturn call or invoke.
|
||||
|
||||
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
|
||||
target triple = "x86_64-unknown-linux-gnu"
|
||||
@ -26,3 +26,24 @@ entry:
|
||||
; CHECK-NEXT: unreachable
|
||||
unreachable
|
||||
}
|
||||
|
||||
declare i32 @__gxx_personality_v0(...)
|
||||
|
||||
define i64 @Invoke1(i8** %esc) nounwind uwtable ssp address_safety {
|
||||
entry:
|
||||
invoke void @MyNoReturnFunc(i32 1)
|
||||
to label %invoke.cont unwind label %lpad
|
||||
|
||||
invoke.cont:
|
||||
ret i64 0
|
||||
|
||||
lpad:
|
||||
%0 = landingpad { i8*, i32 } personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*)
|
||||
filter [0 x i8*] zeroinitializer
|
||||
ret i64 1
|
||||
}
|
||||
; CHECK: @Invoke1
|
||||
; CHECK: call void @__asan_handle_no_return
|
||||
; CHECK-NEXT: invoke void @MyNoReturnFunc
|
||||
; CHECK: ret i64 0
|
||||
; CHECK: ret i64 1
|
||||
|
Loading…
x
Reference in New Issue
Block a user