fix type info crash on extern lib name
This commit is contained in:
parent
aa60d2a688
commit
f4b8850002
|
@ -18613,10 +18613,11 @@ static Error ir_make_type_info_decls(IrAnalyze *ira, IrInstruction *source_instr
|
|||
true, false, PtrLenUnknown,
|
||||
0, 0, 0, false);
|
||||
fn_decl_fields[6].type = get_optional_type(ira->codegen, get_slice_type(ira->codegen, u8_ptr));
|
||||
if (fn_node->is_extern && buf_len(fn_node->lib_name) > 0) {
|
||||
if (fn_node->is_extern && fn_node->lib_name != nullptr && buf_len(fn_node->lib_name) > 0) {
|
||||
fn_decl_fields[6].data.x_optional = create_const_vals(1);
|
||||
ConstExprValue *lib_name = create_const_str_lit(ira->codegen, fn_node->lib_name);
|
||||
init_const_slice(ira->codegen, fn_decl_fields[6].data.x_optional, lib_name, 0, buf_len(fn_node->lib_name), true);
|
||||
init_const_slice(ira->codegen, fn_decl_fields[6].data.x_optional, lib_name, 0,
|
||||
buf_len(fn_node->lib_name), true);
|
||||
} else {
|
||||
fn_decl_fields[6].data.x_optional = nullptr;
|
||||
}
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
const expect = @import("std").testing.expect;
|
||||
const mem = @import("std").mem;
|
||||
const TypeInfo = @import("builtin").TypeInfo;
|
||||
const TypeId = @import("builtin").TypeId;
|
||||
const std = @import("std");
|
||||
const expect = std.testing.expect;
|
||||
const mem = std.mem;
|
||||
const builtin = @import("builtin");
|
||||
const TypeInfo = builtin.TypeInfo;
|
||||
const TypeId = builtin.TypeId;
|
||||
|
||||
test "type info: tag type, void info" {
|
||||
testBasic();
|
||||
|
@ -317,3 +319,20 @@ test "type info: TypeId -> TypeInfo impl cast" {
|
|||
_ = passTypeInfo(TypeId.Void);
|
||||
_ = comptime passTypeInfo(TypeId.Void);
|
||||
}
|
||||
|
||||
test "type info: extern fns with and without lib names" {
|
||||
const S = struct {
|
||||
extern fn bar1() void;
|
||||
extern "cool" fn bar2() void;
|
||||
};
|
||||
const info = @typeInfo(S);
|
||||
comptime {
|
||||
for (info.Struct.decls) |decl| {
|
||||
if (std.mem.eql(u8, decl.name, "bar1")) {
|
||||
expect(decl.data.Fn.lib_name == null);
|
||||
} else {
|
||||
std.testing.expectEqual(([]const u8)("cool"), decl.data.Fn.lib_name.?);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user