diff --git a/lib/std/builtin.zig b/lib/std/builtin.zig index bfb92952e2..714c938dbe 100644 --- a/lib/std/builtin.zig +++ b/lib/std/builtin.zig @@ -807,7 +807,7 @@ pub fn default_panic(msg: []const u8, error_return_trace: ?*StackTrace, ret_addr // Didn't have boot_services, just fallback to whatever. std.os.abort(); }, - .cuda => std.os.abort(), + .cuda, .amdhsa => std.os.abort(), else => { const first_trace_addr = ret_addr orelse @returnAddress(); std.debug.panicImpl(error_return_trace, first_trace_addr, msg); diff --git a/lib/std/os.zig b/lib/std/os.zig index 2c49bd9f49..f170eec367 100644 --- a/lib/std/os.zig +++ b/lib/std/os.zig @@ -613,7 +613,7 @@ pub fn abort() noreturn { exit(127); // Pid 1 might not be signalled in some containers. } switch (builtin.os.tag) { - .uefi, .wasi, .cuda => @trap(), + .uefi, .wasi, .cuda, .amdhsa => @trap(), else => system.abort(), } } diff --git a/src/codegen/llvm.zig b/src/codegen/llvm.zig index d42195d7e9..24ff706711 100644 --- a/src/codegen/llvm.zig +++ b/src/codegen/llvm.zig @@ -2435,18 +2435,25 @@ pub const Object = struct { .ty = ty.toType(), .val = null_opt_usize.toValue(), }); + const llvm_wanted_addrspace = toLlvmAddressSpace(.generic, target); + const llvm_actual_addrspace = toLlvmGlobalAddressSpace(.generic, target); const global = o.llvm_module.addGlobalInAddressSpace( llvm_init.typeOf(), "", - toLlvmGlobalAddressSpace(.generic, target), + llvm_actual_addrspace, ); global.setLinkage(.Internal); global.setUnnamedAddr(.True); global.setAlignment(ty.toType().abiAlignment(mod)); global.setInitializer(llvm_init); - o.null_opt_addr = global; - return global; + const addrspace_casted_global = if (llvm_wanted_addrspace != llvm_actual_addrspace) + global.constAddrSpaceCast(o.context.pointerType(llvm_wanted_addrspace)) + else + global; + + o.null_opt_addr = addrspace_casted_global; + return addrspace_casted_global; } /// If the llvm function does not exist, create it.