[llvm] 5aa0482 - LoongArch: Register a null target streamer (#226497)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 29 03:32:09 PDT 2026
Author: Matt Arsenault
Date: 2026-09-29T12:32:03+02:00
New Revision: 5aa04826046edad5122d959688c0b8e9950f261f
URL: https://github.com/llvm/llvm-project/commit/5aa04826046edad5122d959688c0b8e9950f261f
DIFF: https://github.com/llvm/llvm-project/commit/5aa04826046edad5122d959688c0b8e9950f261f.diff
LOG: LoongArch: Register a null target streamer (#226497)
Emitting a TLS variable's debug location calls into the target streamer,
which was only registered for asm and object output. -filetype=null
therefore null dereferenced.
Co-authored-by: Claude Opus 5 <noreply at anthropic.com>
Added:
llvm/test/CodeGen/LoongArch/null-streamer.ll
Modified:
llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchMCTargetDesc.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchMCTargetDesc.cpp b/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchMCTargetDesc.cpp
index 741bc27eff386..10b3ddafcbe9f 100644
--- a/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchMCTargetDesc.cpp
+++ b/llvm/lib/Target/LoongArch/MCTargetDesc/LoongArchMCTargetDesc.cpp
@@ -93,6 +93,10 @@ createLoongArchAsmTargetStreamer(MCStreamer &S, formatted_raw_ostream &OS,
return new LoongArchTargetAsmStreamer(S, OS);
}
+static MCTargetStreamer *createLoongArchNullTargetStreamer(MCStreamer &S) {
+ return new LoongArchTargetStreamer(S);
+}
+
namespace {
class LoongArchMCInstrAnalysis : public MCInstrAnalysis {
@@ -301,5 +305,7 @@ LLVMInitializeLoongArchTargetMC() {
*T, createLoongArchObjectTargetStreamer);
TargetRegistry::RegisterAsmTargetStreamer(*T,
createLoongArchAsmTargetStreamer);
+ TargetRegistry::RegisterNullTargetStreamer(
+ *T, createLoongArchNullTargetStreamer);
}
}
diff --git a/llvm/test/CodeGen/LoongArch/null-streamer.ll b/llvm/test/CodeGen/LoongArch/null-streamer.ll
new file mode 100644
index 0000000000000..0a1d65af0c33b
--- /dev/null
+++ b/llvm/test/CodeGen/LoongArch/null-streamer.ll
@@ -0,0 +1,20 @@
+; Check the MCNullStreamer operates correctly. The TLS debug
+; expression below reaches the target streamer
+;
+; RUN: llc -O0 -mtriple=loongarch32 -filetype=null %s
+; RUN: llc -O0 -mtriple=loongarch64 -filetype=null %s
+
+ at x = thread_local global i32 5, align 4, !dbg !0
+
+!llvm.dbg.cu = !{!2}
+!llvm.module.flags = !{!7, !8}
+
+!0 = !DIGlobalVariableExpression(var: !1, expr: !DIExpression())
+!1 = distinct !DIGlobalVariable(name: "x", scope: !2, file: !3, line: 1, type: !6, isLocal: false, isDefinition: true)
+!2 = distinct !DICompileUnit(language: DW_LANG_C99, file: !3, isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !4, globals: !5)
+!3 = !DIFile(filename: "tls.c", directory: "/tmp")
+!4 = !{}
+!5 = !{!0}
+!6 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
+!7 = !{i32 2, !"Dwarf Version", i32 4}
+!8 = !{i32 2, !"Debug Info Version", i32 3}
More information about the llvm-commits
mailing list