Skip to content

Commit

Permalink
[mte] fix compiler crash with musttail.
Browse files Browse the repository at this point in the history
see D118852 for matching hwasan fix.

Reviewed By: eugenis

Differential Revision: https://reviews.llvm.org/D118854
  • Loading branch information
fmayer committed Feb 3, 2022
1 parent ded733b commit 29f92da
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 2 deletions.
5 changes: 3 additions & 2 deletions llvm/lib/Target/AArch64/AArch64StackTagging.cpp
Expand Up @@ -579,8 +579,9 @@ bool AArch64StackTagging::runOnFunction(Function &Fn) {
Allocas[AI].LifetimeEnd.push_back(II);
}

if (isa<ReturnInst, ResumeInst, CleanupReturnInst>(&I))
RetVec.push_back(&I);
Instruction *ExitUntag = getUntagLocationIfFunctionExit(I);
if (ExitUntag)
RetVec.push_back(ExitUntag);
}
}

Expand Down
29 changes: 29 additions & 0 deletions llvm/test/CodeGen/AArch64/stack-tagging-musttail.ll
@@ -0,0 +1,29 @@
; Regression test for a compiler bug that caused a crash when instrumenting code
; using musttail.

; RUN: opt -S -aarch64-stack-tagging -stack-tagging-use-stack-safety=0 %s -o - | FileCheck %s

target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
target triple = "aarch64-arm-unknown-eabi"

define dso_local noundef i32 @_Z3bari(i32 noundef %0) sanitize_memtag {
%2 = alloca i32, align 4
store i32 %0, i32* %2, align 4
%3 = load i32, i32* %2, align 4
ret i32 %3
}

define dso_local noundef i32 @_Z3fooi(i32 noundef %0) sanitize_memtag {
%2 = alloca i32, align 4
%3 = alloca i32, align 4
store i32 %0, i32* %2, align 4
store volatile i32 5, i32* %3, align 4
%4 = load i32, i32* %2, align 4
%5 = load volatile i32, i32* %3, align 4
%6 = add nsw i32 %4, %5
; CHECK: call void @llvm.aarch64.settag
; CHECK: musttail call
; CHECK-NOT: call void @llvm.aarch64.settag
%7 = musttail call noundef i32 @_Z3bari(i32 noundef %6)
ret i32 %7
}

0 comments on commit 29f92da

Please sign in to comment.