mirror of
https://github.com/ziglang/zig.git
synced 2026-01-21 06:45:24 +00:00
parent
839492d0e8
commit
2e562a5f36
@ -1187,8 +1187,11 @@ ZigType *get_fn_type(CodeGen *g, FnTypeId *fn_type_id) {
|
||||
if ((err = type_resolve(g, type_entry, ResolveStatusZeroBitsKnown)))
|
||||
return g->builtin_types.entry_invalid;
|
||||
|
||||
if (is_c_abi)
|
||||
if (is_c_abi) {
|
||||
if ((err = type_resolve(g, type_entry, ResolveStatusSizeKnown)))
|
||||
return g->builtin_types.entry_invalid;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (type_has_bits(type_entry)) {
|
||||
ZigType *gen_type;
|
||||
@ -4464,7 +4467,7 @@ bool handle_is_ptr(ZigType *type_entry) {
|
||||
return type_has_bits(type_entry->data.maybe.child_type) &&
|
||||
!type_is_codegen_pointer(type_entry->data.maybe.child_type);
|
||||
case ZigTypeIdUnion:
|
||||
assert(type_entry->data.unionation.complete);
|
||||
assert(type_entry->data.unionation.zero_bits_known);
|
||||
if (type_entry->data.unionation.gen_field_count == 0)
|
||||
return false;
|
||||
if (!type_has_bits(type_entry))
|
||||
|
||||
@ -14640,6 +14640,12 @@ static ZigType *ir_analyze_instruction_elem_ptr(IrAnalyze *ira, IrInstructionEle
|
||||
|
||||
} else {
|
||||
// runtime known element index
|
||||
if (type_requires_comptime(return_type)) {
|
||||
ir_add_error(ira, elem_index,
|
||||
buf_sprintf("values of type '%s' must be comptime known, but index value is runtime known",
|
||||
buf_ptr(&return_type->data.pointer.child_type->name)));
|
||||
return ira->codegen->builtin_types.entry_invalid;
|
||||
}
|
||||
if (ptr_align < abi_align) {
|
||||
if (elem_size >= ptr_align && elem_size % ptr_align == 0) {
|
||||
return_type = adjust_ptr_align(ira->codegen, return_type, ptr_align);
|
||||
|
||||
@ -1,6 +1,22 @@
|
||||
const tests = @import("tests.zig");
|
||||
|
||||
pub fn addCases(cases: *tests.CompileErrorContext) void {
|
||||
cases.add(
|
||||
"runtime index into comptime type slice",
|
||||
\\const Struct = struct {
|
||||
\\ a: u32,
|
||||
\\};
|
||||
\\fn getIndex() usize {
|
||||
\\ return 2;
|
||||
\\}
|
||||
\\export fn entry() void {
|
||||
\\ const index = getIndex();
|
||||
\\ const field = @typeInfo(Struct).Struct.fields[index];
|
||||
\\}
|
||||
,
|
||||
".tmp_source.zig:9:51: error: values of type 'StructField' must be comptime known, but index value is runtime known",
|
||||
);
|
||||
|
||||
cases.add(
|
||||
"compile log statement inside function which must be comptime evaluated",
|
||||
\\fn Foo(comptime T: type) type {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user