mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-01 00:33:09 +00:00
Add a lint check for returning the address of stack memory.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@104936 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
28d2e0a39f
commit
292fc87fe2
@ -310,6 +310,12 @@ void Lint::visitReturnInst(ReturnInst &I) {
|
||||
Assert1(!F->doesNotReturn(),
|
||||
"Unusual: Return statement in function with noreturn attribute",
|
||||
&I);
|
||||
|
||||
if (Value *V = I.getReturnValue()) {
|
||||
Value *Obj = V->getUnderlyingObject();
|
||||
Assert1(!isa<AllocaInst>(Obj) && !isa<VAArgInst>(Obj),
|
||||
"Unusual: Returning alloca or va_arg value", &I);
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Add a length argument and check that the reference is in bounds
|
||||
|
@ -97,3 +97,10 @@ define void @use_tail(i8* %valist) {
|
||||
tail call void @tailcallee(i8* %s)
|
||||
ret void
|
||||
}
|
||||
|
||||
; CHECK: Unusual: Returning alloca or va_arg value
|
||||
define i8* @return_local(i32 %n, i32 %m) {
|
||||
%t = alloca i8, i32 %n
|
||||
%s = getelementptr i8* %t, i32 %m
|
||||
ret i8* %s
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user