[llvm] [BPF] Support for `DW_TAG_variant_part` in BTF generation (PR #155783)

Michal R via llvm-commits llvm-commits at lists.llvm.org
Mon Sep 1 07:08:37 PDT 2025


================
@@ -0,0 +1,95 @@
+; RUN: llc -mtriple=bpfel -filetype=obj -o %t1 %s
+; RUN: llvm-objcopy --dump-section='.BTF'=%t2 %t1
+; RUN: %python %p/print_btf.py %t2 | FileCheck -check-prefixes=CHECK-BTF %s
+; RUN: llc -mtriple=bpfeb -filetype=obj -o %t1 %s
+; RUN: llvm-objcopy --dump-section='.BTF'=%t2 %t1
+; RUN: %python %p/print_btf.py %t2 | FileCheck -check-prefixes=CHECK-BTF %s
+;
+; Source:
+;   #![no_std]
+;   #![no_main]
+;   
+;   pub enum DataCarryingEnum {
+;       First { a: u32, b: i32 },
+;       Second(u32, i32),
+;   }
+;   
+;   #[unsafe(no_mangle)]
+;   pub static X: DataCarryingEnum = DataCarryingEnum::First { a: 54, b: -23 };
+;   #[unsafe(no_mangle)]
+;   pub static Y: DataCarryingEnum = DataCarryingEnum::Second(54, -23);
+;   
+;   #[cfg(not(test))]
+;   #[panic_handler]
+;   fn panic(_info: &core::panic::PanicInfo) -> ! {
+;       loop {}
+;   }
+; Compilation flag:
+;   cargo +nightly rustc -Zbuild-std=core --target=bpfel-unknown-none -- --emit=llvm-bc
+;   llvm-extract --glob=X --glob=Y $(find target/ -name "*.bc" | head -n 1) -o data-carrying-enum.bc
+;   llvm-dis data-carrying.bc -o data-carrying-enum.ll
+
+; ModuleID = 'data_carrying.bc'
+source_filename = "c0znihgkvro8hs0n88fgrtg6x"
+target datalayout = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128"
+target triple = "bpfel"
+
+ at X = constant [12 x i8] c"\00\00\00\006\00\00\00\E9\FF\FF\FF", align 4, !dbg !0
+ at Y = constant [12 x i8] c"\01\00\00\006\00\00\00\E9\FF\FF\FF", align 4, !dbg !23
+
+!llvm.module.flags = !{!25, !26, !27, !28}
+!llvm.ident = !{!29}
+!llvm.dbg.cu = !{!30}
+
+; CHECK-BTF:      [1] STRUCT 'DataCarryingEnum' size=12 vlen=1
+; CHECK-BTF-NEXT:         '(anon)' type_id=2 bits_offset=0
+; CHECK-BTF-NEXT: [2] STRUCT '(anon)' size=12 vlen=2
----------------
vadorovsky wrote:

Good point. After applying your other suggestions, it became an `UNION` without any further changes.

https://github.com/llvm/llvm-project/pull/155783


More information about the llvm-commits mailing list