mirror of
https://github.com/ziglang/zig.git
synced 2025-01-23 18:31:44 +00:00
parent
569cf286ff
commit
b4e42042cf
@ -11314,6 +11314,8 @@ static TypeTableEntry *ir_analyze_container_field_ptr(IrAnalyze *ira, Buf *field
|
||||
|
||||
if (ptr_val->data.x_ptr.special != ConstPtrSpecialHardCodedAddr) {
|
||||
ConstExprValue *struct_val = const_ptr_pointee(ira->codegen, ptr_val);
|
||||
if (type_is_invalid(struct_val->type))
|
||||
return ira->codegen->builtin_types.entry_invalid;
|
||||
ConstExprValue *field_val = &struct_val->data.x_struct.fields[field->src_index];
|
||||
TypeTableEntry *ptr_type = get_pointer_to_type_extra(ira->codegen, field_val->type,
|
||||
is_const, is_volatile, align_bytes,
|
||||
@ -11732,6 +11734,9 @@ static TypeTableEntry *ir_analyze_instruction_store_ptr(IrAnalyze *ira, IrInstru
|
||||
}
|
||||
ir_add_error(ira, &store_ptr_instruction->base,
|
||||
buf_sprintf("cannot store runtime value in compile time variable"));
|
||||
ConstExprValue *dest_val = const_ptr_pointee(ira->codegen, &ptr->value);
|
||||
dest_val->type = ira->codegen->builtin_types.entry_invalid;
|
||||
|
||||
return ira->codegen->builtin_types.entry_invalid;
|
||||
}
|
||||
}
|
||||
|
@ -2186,4 +2186,49 @@ pub fn addCases(cases: &tests.CompileErrorContext) {
|
||||
,
|
||||
".tmp_source.zig:3:5: error: alignstack set twice",
|
||||
".tmp_source.zig:2:5: note: first set here");
|
||||
|
||||
cases.add("storing runtime value in compile time variable then using it",
|
||||
\\const Mode = @import("builtin").Mode;
|
||||
\\
|
||||
\\fn Free(comptime filename: []const u8) -> TestCase {
|
||||
\\ TestCase {
|
||||
\\ .filename = filename,
|
||||
\\ .problem_type = ProblemType.Free,
|
||||
\\ }
|
||||
\\}
|
||||
\\
|
||||
\\fn LibC(comptime filename: []const u8) -> TestCase {
|
||||
\\ TestCase {
|
||||
\\ .filename = filename,
|
||||
\\ .problem_type = ProblemType.LinkLibC,
|
||||
\\ }
|
||||
\\}
|
||||
\\
|
||||
\\const TestCase = struct {
|
||||
\\ filename: []const u8,
|
||||
\\ problem_type: ProblemType,
|
||||
\\};
|
||||
\\
|
||||
\\const ProblemType = enum {
|
||||
\\ Free,
|
||||
\\ LinkLibC,
|
||||
\\};
|
||||
\\
|
||||
\\export fn entry() {
|
||||
\\ const tests = []TestCase {
|
||||
\\ Free("001"),
|
||||
\\ Free("002"),
|
||||
\\ LibC("078"),
|
||||
\\ Free("116"),
|
||||
\\ Free("117"),
|
||||
\\ };
|
||||
\\
|
||||
\\ for ([]Mode { Mode.Debug, Mode.ReleaseSafe, Mode.ReleaseFast }) |mode| {
|
||||
\\ inline for (tests) |test_case| {
|
||||
\\ const foo = test_case.filename ++ ".zig";
|
||||
\\ }
|
||||
\\ }
|
||||
\\}
|
||||
,
|
||||
".tmp_source.zig:37:16: error: cannot store runtime value in compile time variable");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user