1; RUN: opt -S -stack-tagging %s -o - | FileCheck %s 2 3target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128" 4target triple = "aarch64-arm-unknown-eabi" 5 6define void @f() local_unnamed_addr #0 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) { 7start: 8; CHECK-LABEL: start: 9 %a = alloca i8, i32 48, align 8 10 call void @llvm.lifetime.start.p0i8(i64 48, i8* nonnull %a) #2 11; CHECK: call void @llvm.aarch64.settag(i8* %a.tag, i64 48) 12 %b = alloca i8, i32 48, align 8 13 call void @llvm.lifetime.start.p0i8(i64 48, i8* nonnull %b) #2 14; CHECK: call void @llvm.aarch64.settag(i8* %b.tag, i64 48) 15 invoke void @g (i8 * nonnull %a, i8 * nonnull %b) to label %next0 unwind label %lpad0 16; CHECK-NOT: settag 17 18next0: 19; CHECK-LABEL: next0: 20 call void @llvm.lifetime.end.p0i8(i64 40, i8* nonnull %a) 21 call void @llvm.lifetime.end.p0i8(i64 40, i8* nonnull %b) 22 br label %exit 23; CHECK-NOT: settag 24 25lpad0: 26; CHECK-LABEL: lpad0: 27 %pad0v = landingpad { i8*, i32 } catch i8* null 28 %v = extractvalue { i8*, i32 } %pad0v, 0 29 %x = call i8* @__cxa_begin_catch(i8* %v) #2 30 invoke void @__cxa_end_catch() to label %next1 unwind label %lpad1 31; CHECK-NOT: settag 32 33next1: 34; CHECK-LABEL: next1: 35 br label %exit 36; CHECK-NOT: settag 37 38lpad1: 39; CHECK-LABEL: lpad1: 40; CHECK-DAG: call void @llvm.aarch64.settag(i8* %a, i64 48) 41; CHECK-DAG: call void @llvm.aarch64.settag(i8* %b, i64 48) 42 %pad1v = landingpad { i8*, i32 } cleanup 43 resume { i8*, i32 } %pad1v 44 45exit: 46; CHECK-LABEL: exit: 47; CHECK-DAG: call void @llvm.aarch64.settag(i8* %a, i64 48) 48; CHECK-DAG: call void @llvm.aarch64.settag(i8* %b, i64 48) 49 ret void 50; CHECK: ret void 51} 52 53declare void @g(i8 *, i8 *) #0 54 55declare dso_local i32 @__gxx_personality_v0(...) 56 57declare dso_local i8* @__cxa_begin_catch(i8*) local_unnamed_addr 58 59declare dso_local void @__cxa_end_catch() local_unnamed_addr 60 61; Function Attrs: argmemonly nounwind willreturn 62declare void @llvm.lifetime.start.p0i8(i64 immarg, i8* nocapture) #1 63 64; Function Attrs: argmemonly nounwind willreturn 65declare void @llvm.lifetime.end.p0i8(i64 immarg, i8* nocapture) #1 66 67attributes #0 = { sanitize_memtag "correctly-rounded-divide-sqrt-fp-math"="false" "denormal-fp-math"="preserve-sign" "disable-tail-calls"="false" "frame-pointer"="none" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "no-infs-fp-math"="true" "no-jump-tables"="false" "no-nans-fp-math"="true" "no-signed-zeros-fp-math"="true" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="generic" "target-features"="+mte,+neon,+v8.5a" "unsafe-fp-math"="false" "use-soft-float"="false" } 68attributes #1 = { argmemonly nounwind willreturn } 69attributes #2 = { nounwind } 70