[llvm] [AArch64] Null check TargetStreamer before emitting .variant_pcs (PR #138924)
Benjamin Maxwell via llvm-commits
llvm-commits at lists.llvm.org
Wed May 7 10:51:42 PDT 2025
https://github.com/MacDue created https://github.com/llvm/llvm-project/pull/138924
This was causing crashes on Mach-O targets as we don't construct a TargetStreamer for that object format. Other uses of the TargetStreamer (TS) appear to be limited to ELF and COFF platforms (where it is none null, so don't need changing).
>From 899c9515f00fc955b7a73be906652558da695a23 Mon Sep 17 00:00:00 2001
From: Benjamin Maxwell <benjamin.maxwell at arm.com>
Date: Wed, 7 May 2025 17:00:22 +0000
Subject: [PATCH] [AArch64] Null check TargetStreamer before emitting
.variant_pcs
This was causing crashes on Mach-O targets as we don't construct a
TargetStreamer for that object format. Other uses of the TargetStreamer
(TS) appear to be limited to ELF and COFF platforms (where it is none
null, so don't need changing).
---
llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp | 3 ++-
llvm/test/CodeGen/AArch64/variant-pcs.ll | 3 +++
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp b/llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp
index 870df4c387ca4..1166a78bf1088 100644
--- a/llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp
+++ b/llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp
@@ -1372,7 +1372,8 @@ void AArch64AsmPrinter::emitFunctionEntryLabel() {
MF->getInfo<AArch64FunctionInfo>()->isSVECC()) {
auto *TS =
static_cast<AArch64TargetStreamer *>(OutStreamer->getTargetStreamer());
- TS->emitDirectiveVariantPCS(CurrentFnSym);
+ if (TS)
+ TS->emitDirectiveVariantPCS(CurrentFnSym);
}
AsmPrinter::emitFunctionEntryLabel();
diff --git a/llvm/test/CodeGen/AArch64/variant-pcs.ll b/llvm/test/CodeGen/AArch64/variant-pcs.ll
index 49c504177358e..0c995b5b0e8ef 100644
--- a/llvm/test/CodeGen/AArch64/variant-pcs.ll
+++ b/llvm/test/CodeGen/AArch64/variant-pcs.ll
@@ -2,6 +2,9 @@
; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve -filetype=obj -o - %s \
; RUN: | llvm-readobj --symbols - | FileCheck %s --check-prefix=CHECK-OBJ
+; Check we don't crash when using a Mach-O object format.
+; RUN: llc -mtriple=arm64-apple-macosx15.0.0 -mattr=+sve -filetype=obj -o /dev/null %s
+
define i32 @base_pcs() {
; CHECK-ASM-LABEL: base_pcs:
; CHECK-ASM-NOT: .variant_pcs
More information about the llvm-commits
mailing list