authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-03-01 18:07:46-05:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2019-03-01 18:07:46-05:00
logbed81089e108f24e33073445dd31d30af1232de6
tree74b1bf0c10dd8344eadb8edbd74766e7c0e5a498
parentc4887d7f5430b38787ec01368ab7eba1537f0487
parent9c47bf68faafc42292f8c8aeb1e1b9e00cfda368
signaturebadge-question-mark Signed by PGP key 4AEE18F83AFDEB23

Merge pull request #2020 from ziglang/kill-namespace-type

remove the (namespace) type and make every file an empty struct

35 files changed, 1349 insertions(+), 1271 deletions(-)

doc/langref.html.in+14-11
......@@ -6785,7 +6785,6 @@ pub const TypeId = enum {
67856785 Enum,
67866786 Union,
67876787 Fn,
6788 Namespace,
67896788 Block,
67906789 BoundFn,
67916790 ArgTuple,
......@@ -6820,7 +6819,6 @@ pub const TypeInfo = union(TypeId) {
68206819 Enum: Enum,
68216820 Union: Union,
68226821 Fn: Fn,
6823 Namespace: void,
68246822 BoundFn: Fn,
68256823 ArgTuple: void,
68266824 Opaque: void,
......@@ -8167,17 +8165,18 @@ coding style.
81678165 </p>
81688166 <ul>
81698167 <li>
8170 If {#syntax#}x{#endsyntax#} is a {#syntax#}struct{#endsyntax#} (or an alias of a {#syntax#}struct{#endsyntax#}),
8171 then {#syntax#}x{#endsyntax#} should be {#syntax#}TitleCase{#endsyntax#}.
8168 If {#syntax#}x{#endsyntax#} is a {#syntax#}type{#endsyntax#}
8169 then {#syntax#}x{#endsyntax#} should be {#syntax#}TitleCase{#endsyntax#}, unless it
8170 is a {#syntax#}struct{#endsyntax#} with 0 fields and is never meant to be instantiated,
8171 in which case it is considered to be a "namespace" and uses {#syntax#}snake_case{#endsyntax#}.
81728172 </li>
81738173 <li>
8174 If {#syntax#}x{#endsyntax#} otherwise identifies a type, {#syntax#}x{#endsyntax#} should have {#syntax#}snake_case{#endsyntax#}.
8174 If {#syntax#}x{#endsyntax#} is callable, and {#syntax#}x{#endsyntax#}'s return type is
8175 {#syntax#}type{#endsyntax#}, then {#syntax#}x{#endsyntax#} should be {#syntax#}TitleCase{#endsyntax#}.
81758176 </li>
81768177 <li>
8177 If {#syntax#}x{#endsyntax#} is callable, and {#syntax#}x{#endsyntax#}'s return type is {#syntax#}type{#endsyntax#}, then {#syntax#}x{#endsyntax#} should be {#syntax#}TitleCase{#endsyntax#}.
8178 </li>
8179 <li>
8180 If {#syntax#}x{#endsyntax#} is otherwise callable, then {#syntax#}x{#endsyntax#} should be {#syntax#}camelCase{#endsyntax#}.
8178 If {#syntax#}x{#endsyntax#} is otherwise callable, then {#syntax#}x{#endsyntax#} should
8179 be {#syntax#}camelCase{#endsyntax#}.
81818180 </li>
81828181 <li>
81838182 Otherwise, {#syntax#}x{#endsyntax#} should be {#syntax#}snake_case{#endsyntax#}.
......@@ -8203,7 +8202,9 @@ const const_name = 42;
82038202const primitive_type_alias = f32;
82048203const string_alias = []u8;
82058204
8206const StructName = struct {};
8205const StructName = struct {
8206 field: i32,
8207};
82078208const StructAlias = StructName;
82088209
82098210fn functionName(param_name: TypeName) void {
......@@ -8231,7 +8232,9 @@ const xml_document =
82318232 \\<document>
82328233 \\</document>
82338234;
8234const XmlParser = struct {};
8235const XmlParser = struct {
8236 field: i32,
8237};
82358238
82368239// The initials BE (Big Endian) are just another word in Zig identifier names.
82378240fn readU32Be() u32 {}
src-self-hosted/compilation.zig+1-1
......@@ -47,7 +47,7 @@ pub const ZigCompiler = struct {
4747
4848 var lazy_init_targets = std.lazyInit(void);
4949
50 fn init(loop: *event.Loop) !ZigCompiler {
50 pub fn init(loop: *event.Loop) !ZigCompiler {
5151 lazy_init_targets.get() orelse {
5252 Target.initializeAll();
5353 lazy_init_targets.resolve();
src-self-hosted/type.zig-12
......@@ -39,7 +39,6 @@ pub const Type = struct {
3939 Id.ErrorSet => @fieldParentPtr(ErrorSet, "base", base).destroy(comp),
4040 Id.Enum => @fieldParentPtr(Enum, "base", base).destroy(comp),
4141 Id.Union => @fieldParentPtr(Union, "base", base).destroy(comp),
42 Id.Namespace => @fieldParentPtr(Namespace, "base", base).destroy(comp),
4342 Id.BoundFn => @fieldParentPtr(BoundFn, "base", base).destroy(comp),
4443 Id.ArgTuple => @fieldParentPtr(ArgTuple, "base", base).destroy(comp),
4544 Id.Opaque => @fieldParentPtr(Opaque, "base", base).destroy(comp),
......@@ -73,7 +72,6 @@ pub const Type = struct {
7372 Id.ErrorSet => return @fieldParentPtr(ErrorSet, "base", base).getLlvmType(allocator, llvm_context),
7473 Id.Enum => return @fieldParentPtr(Enum, "base", base).getLlvmType(allocator, llvm_context),
7574 Id.Union => return @fieldParentPtr(Union, "base", base).getLlvmType(allocator, llvm_context),
76 Id.Namespace => unreachable,
7775 Id.BoundFn => return @fieldParentPtr(BoundFn, "base", base).getLlvmType(allocator, llvm_context),
7876 Id.ArgTuple => unreachable,
7977 Id.Opaque => return @fieldParentPtr(Opaque, "base", base).getLlvmType(allocator, llvm_context),
......@@ -89,7 +87,6 @@ pub const Type = struct {
8987 Id.ComptimeInt,
9088 Id.Undefined,
9189 Id.Null,
92 Id.Namespace,
9390 Id.BoundFn,
9491 Id.ArgTuple,
9592 Id.Opaque,
......@@ -123,7 +120,6 @@ pub const Type = struct {
123120 Id.ComptimeInt,
124121 Id.Undefined,
125122 Id.Null,
126 Id.Namespace,
127123 Id.BoundFn,
128124 Id.ArgTuple,
129125 Id.Opaque,
......@@ -1020,14 +1016,6 @@ pub const Type = struct {
10201016 }
10211017 };
10221018
1023 pub const Namespace = struct {
1024 base: Type,
1025
1026 pub fn destroy(self: *Namespace, comp: *Compilation) void {
1027 comp.gpa().destroy(self);
1028 }
1029 };
1030
10311019 pub const BoundFn = struct {
10321020 base: Type,
10331021
src/all_types.hpp+49-48
......@@ -21,7 +21,6 @@
2121#include "libc_installation.hpp"
2222
2323struct AstNode;
24struct ImportTableEntry;
2524struct ZigFn;
2625struct Scope;
2726struct ScopeBlock;
......@@ -317,7 +316,6 @@ struct ConstExprValue {
317316 ConstUnionValue x_union;
318317 ConstArrayValue x_array;
319318 ConstPtrValue x_ptr;
320 ImportTableEntry *x_import;
321319 ConstArgTuple x_arg_tuple;
322320
323321 // populated if special == ConstValSpecialRuntime
......@@ -369,10 +367,8 @@ struct Tld {
369367 VisibMod visib_mod;
370368 AstNode *source_node;
371369
372 ImportTableEntry *import;
370 ZigType *import;
373371 Scope *parent_scope;
374 // set this flag temporarily to detect infinite loops
375 bool dep_loop_flag;
376372 TldResolution resolution;
377373};
378374
......@@ -382,6 +378,7 @@ struct TldVar {
382378 ZigVar *var;
383379 Buf *extern_lib_name;
384380 Buf *section_name;
381 bool analyzing_type; // flag to detect dependency loops
385382};
386383
387384struct TldFn {
......@@ -700,7 +697,7 @@ struct AstNodeUse {
700697 AstNode *expr;
701698
702699 TldResolution resolution;
703 ConstExprValue *value;
700 ConstExprValue *using_namespace_value;
704701};
705702
706703struct AstNodeIfBoolExpr {
......@@ -937,7 +934,7 @@ struct AstNode {
937934 enum NodeType type;
938935 size_t line;
939936 size_t column;
940 ImportTableEntry *owner;
937 ZigType *owner;
941938 union {
942939 AstNodeFnDef fn_def;
943940 AstNodeFnProto fn_proto;
......@@ -1075,12 +1072,32 @@ enum ResolveStatus {
10751072 ResolveStatusSizeKnown,
10761073};
10771074
1075struct ZigPackage {
1076 Buf root_src_dir;
1077 Buf root_src_path; // relative to root_src_dir
1078 Buf pkg_path; // a.b.c.d which follows the package dependency chain from the root package
1079
1080 // reminder: hash tables must be initialized before use
1081 HashMap<Buf *, ZigPackage *, buf_hash, buf_eql_buf> package_table;
1082};
1083
1084// Stuff that only applies to a struct which is the implicit root struct of a file
1085struct RootStruct {
1086 ZigPackage *package;
1087 Buf *path; // relative to root_package->root_src_dir
1088 ZigList<size_t> *line_offsets;
1089 Buf *source_code;
1090 AstNode *c_import_node;
1091 ZigLLVMDIFile *di_file;
1092};
1093
10781094struct ZigTypeStruct {
10791095 AstNode *decl_node;
10801096 TypeStructField *fields;
10811097 ScopeDecls *decls_scope;
10821098 uint64_t size_bytes;
10831099 HashMap<Buf *, TypeStructField *, buf_hash, buf_eql_buf> fields_by_name;
1100 RootStruct *root_struct;
10841101
10851102 uint32_t src_field_count;
10861103 uint32_t gen_field_count;
......@@ -1232,7 +1249,6 @@ enum ZigTypeId {
12321249 ZigTypeIdEnum,
12331250 ZigTypeIdUnion,
12341251 ZigTypeIdFn,
1235 ZigTypeIdNamespace,
12361252 ZigTypeIdBoundFn,
12371253 ZigTypeIdArgTuple,
12381254 ZigTypeIdOpaque,
......@@ -1246,6 +1262,10 @@ enum OnePossibleValue {
12461262 OnePossibleValueYes,
12471263};
12481264
1265struct ZigTypeOpaque {
1266 Buf *bare_name;
1267};
1268
12491269struct ZigType {
12501270 ZigTypeId id;
12511271 Buf name;
......@@ -1268,6 +1288,7 @@ struct ZigType {
12681288 ZigTypeBoundFn bound_fn;
12691289 ZigTypePromise promise;
12701290 ZigTypeVector vector;
1291 ZigTypeOpaque opaque;
12711292 } data;
12721293
12731294 // use these fields to make sure we don't duplicate type table entries for the same type
......@@ -1285,29 +1306,6 @@ struct ZigType {
12851306 bool gen_h_loop_flag;
12861307};
12871308
1288struct PackageTableEntry {
1289 Buf root_src_dir;
1290 Buf root_src_path; // relative to root_src_dir
1291
1292 // reminder: hash tables must be initialized before use
1293 HashMap<Buf *, PackageTableEntry *, buf_hash, buf_eql_buf> package_table;
1294};
1295
1296struct ImportTableEntry {
1297 AstNode *root;
1298 Buf *path; // relative to root_package->root_src_dir
1299 PackageTableEntry *package;
1300 ZigLLVMDIFile *di_file;
1301 Buf *source_code;
1302 ZigList<size_t> *line_offsets;
1303 ScopeDecls *decls_scope;
1304 AstNode *c_import_node;
1305 bool any_imports_failed;
1306 bool scanned;
1307
1308 ZigList<AstNode *> use_decls;
1309};
1310
13111309enum FnAnalState {
13121310 FnAnalStateReady,
13131311 FnAnalStateProbing,
......@@ -1670,7 +1668,7 @@ struct CodeGen {
16701668 LLVMValueRef return_err_fn;
16711669
16721670 // reminder: hash tables must be initialized before use
1673 HashMap<Buf *, ImportTableEntry *, buf_hash, buf_eql_buf> import_table;
1671 HashMap<Buf *, ZigType *, buf_hash, buf_eql_buf> import_table;
16741672 HashMap<Buf *, BuiltinFnEntry *, buf_hash, buf_eql_buf> builtin_fn_table;
16751673 HashMap<Buf *, ZigType *, buf_hash, buf_eql_buf> primitive_type_table;
16761674 HashMap<TypeId, ZigType *, type_id_hash, type_id_eql> type_table;
......@@ -1684,8 +1682,6 @@ struct CodeGen {
16841682 HashMap<Buf *, ConstExprValue *, buf_hash, buf_eql_buf> string_literals_table;
16851683 HashMap<const ZigType *, ConstExprValue *, type_ptr_hash, type_ptr_eql> type_info_cache;
16861684
1687 ZigList<ImportTableEntry *> import_queue;
1688 size_t import_queue_index;
16891685 ZigList<Tld *> resolve_queue;
16901686 size_t resolve_queue_index;
16911687 ZigList<AstNode *> use_queue;
......@@ -1699,14 +1695,14 @@ struct CodeGen {
16991695 ZigList<ErrorTableEntry *> errors_by_index;
17001696 size_t largest_err_name_len;
17011697
1702 PackageTableEntry *std_package;
1703 PackageTableEntry *panic_package;
1704 PackageTableEntry *test_runner_package;
1705 PackageTableEntry *compile_var_package;
1706 ImportTableEntry *compile_var_import;
1707 ImportTableEntry *root_import;
1708 ImportTableEntry *bootstrap_import;
1709 ImportTableEntry *test_runner_import;
1698 ZigPackage *std_package;
1699 ZigPackage *panic_package;
1700 ZigPackage *test_runner_package;
1701 ZigPackage *compile_var_package;
1702 ZigType *compile_var_import;
1703 ZigType *root_import;
1704 ZigType *bootstrap_import;
1705 ZigType *test_runner_import;
17101706
17111707 struct {
17121708 ZigType *entry_bool;
......@@ -1731,7 +1727,6 @@ struct CodeGen {
17311727 ZigType *entry_unreachable;
17321728 ZigType *entry_type;
17331729 ZigType *entry_invalid;
1734 ZigType *entry_namespace;
17351730 ZigType *entry_block;
17361731 ZigType *entry_num_lit_int;
17371732 ZigType *entry_num_lit_float;
......@@ -1851,7 +1846,7 @@ struct CodeGen {
18511846 Buf *root_out_name;
18521847 Buf *test_filter;
18531848 Buf *test_name_prefix;
1854 PackageTableEntry *root_package;
1849 ZigPackage *root_package;
18551850 Buf *zig_lib_dir;
18561851 Buf *zig_std_dir;
18571852
......@@ -1945,13 +1940,17 @@ struct ScopeDecls {
19451940 Scope base;
19461941
19471942 HashMap<Buf *, Tld *, buf_hash, buf_eql_buf> decl_table;
1948 bool safety_off;
1943 ZigList<AstNode *> use_decls;
19491944 AstNode *safety_set_node;
1950 bool fast_math_on;
19511945 AstNode *fast_math_set_node;
1952 ImportTableEntry *import;
1946 ZigType *import;
19531947 // If this is a scope from a container, this is the type entry, otherwise null
19541948 ZigType *container_type;
1949 Buf *bare_name;
1950
1951 bool safety_off;
1952 bool fast_math_on;
1953 bool any_imports_failed;
19551954};
19561955
19571956// This scope comes from a block expression in user code.
......@@ -3477,6 +3476,8 @@ static const size_t stack_trace_ptr_count = 32;
34773476#define ERR_RET_TRACE_PTR_FIELD_NAME "err_ret_trace_ptr"
34783477#define RESULT_PTR_FIELD_NAME "result_ptr"
34793478
3479#define NAMESPACE_SEP_CHAR '.'
3480#define NAMESPACE_SEP_STR "."
34803481
34813482enum FloatMode {
34823483 FloatModeStrict,
......@@ -3508,7 +3509,7 @@ struct FnWalkTypes {
35083509};
35093510
35103511struct FnWalkVars {
3511 ImportTableEntry *import;
3512 ZigType *import;
35123513 LLVMValueRef llvm_fn;
35133514 ZigFn *fn;
35143515 ZigVar *var;
src/analyze.cpp+289-233
......@@ -28,10 +28,14 @@ static Error ATTRIBUTE_MUST_USE resolve_enum_zero_bits(CodeGen *g, ZigType *enum
2828static Error ATTRIBUTE_MUST_USE resolve_union_zero_bits(CodeGen *g, ZigType *union_type);
2929static void analyze_fn_body(CodeGen *g, ZigFn *fn_table_entry);
3030
31static ErrorMsg *add_error_note_token(CodeGen *g, ErrorMsg *parent_msg, ImportTableEntry *owner, Token *token,
32 Buf *msg)
33{
34 if (owner->c_import_node != nullptr) {
31static bool is_top_level_struct(ZigType *import) {
32 return import->id == ZigTypeIdStruct && import->data.structure.root_struct != nullptr;
33}
34
35static ErrorMsg *add_error_note_token(CodeGen *g, ErrorMsg *parent_msg, ZigType *owner, Token *token, Buf *msg) {
36 assert(is_top_level_struct(owner));
37 RootStruct *root_struct = owner->data.structure.root_struct;
38 if (root_struct->c_import_node != nullptr) {
3539 // if this happens, then translate_c generated code that
3640 // failed semantic analysis, which isn't supposed to happen
3741
......@@ -46,18 +50,20 @@ static ErrorMsg *add_error_note_token(CodeGen *g, ErrorMsg *parent_msg, ImportTa
4650 return note;
4751 }
4852
49 ErrorMsg *err = err_msg_create_with_line(owner->path, token->start_line, token->start_column,
50 owner->source_code, owner->line_offsets, msg);
53 ErrorMsg *err = err_msg_create_with_line(root_struct->path, token->start_line, token->start_column,
54 root_struct->source_code, root_struct->line_offsets, msg);
5155
5256 err_msg_add_note(parent_msg, err);
5357 return err;
5458}
5559
56ErrorMsg *add_token_error(CodeGen *g, ImportTableEntry *owner, Token *token, Buf *msg) {
57 if (owner->c_import_node != nullptr) {
60ErrorMsg *add_token_error(CodeGen *g, ZigType *owner, Token *token, Buf *msg) {
61 assert(is_top_level_struct(owner));
62 RootStruct *root_struct = owner->data.structure.root_struct;
63 if (root_struct->c_import_node != nullptr) {
5864 // if this happens, then translate_c generated code that
5965 // failed semantic analysis, which isn't supposed to happen
60 ErrorMsg *err = add_node_error(g, owner->c_import_node,
66 ErrorMsg *err = add_node_error(g, root_struct->c_import_node,
6167 buf_sprintf("compiler bug: @cImport generated invalid zig code"));
6268
6369 add_error_note_token(g, err, owner, token, msg);
......@@ -65,8 +71,8 @@ ErrorMsg *add_token_error(CodeGen *g, ImportTableEntry *owner, Token *token, Buf
6571 g->errors.append(err);
6672 return err;
6773 }
68 ErrorMsg *err = err_msg_create_with_line(owner->path, token->start_line, token->start_column,
69 owner->source_code, owner->line_offsets, msg);
74 ErrorMsg *err = err_msg_create_with_line(root_struct->path, token->start_line, token->start_column,
75 root_struct->source_code, root_struct->line_offsets, msg);
7076
7177 g->errors.append(err);
7278 return err;
......@@ -114,13 +120,16 @@ void init_scope(CodeGen *g, Scope *dest, ScopeId id, AstNode *source_node, Scope
114120 dest->parent = parent;
115121}
116122
117ScopeDecls *create_decls_scope(CodeGen *g, AstNode *node, Scope *parent, ZigType *container_type, ImportTableEntry *import) {
123static ScopeDecls *create_decls_scope(CodeGen *g, AstNode *node, Scope *parent, ZigType *container_type,
124 ZigType *import, Buf *bare_name)
125{
118126 assert(node == nullptr || node->type == NodeTypeContainerDecl || node->type == NodeTypeFnCallExpr);
119127 ScopeDecls *scope = allocate<ScopeDecls>(1);
120128 init_scope(g, &scope->base, ScopeIdDecls, node, parent);
121129 scope->decl_table.init(4);
122130 scope->container_type = container_type;
123131 scope->import = import;
132 scope->bare_name = bare_name;
124133 return scope;
125134}
126135
......@@ -207,11 +216,11 @@ Scope *create_coro_prelude_scope(CodeGen *g, AstNode *node, Scope *parent) {
207216 return &scope->base;
208217}
209218
210ImportTableEntry *get_scope_import(Scope *scope) {
219ZigType *get_scope_import(Scope *scope) {
211220 while (scope) {
212221 if (scope->id == ScopeIdDecls) {
213222 ScopeDecls *decls_scope = (ScopeDecls *)scope;
214 assert(decls_scope->import);
223 assert(is_top_level_struct(decls_scope->import));
215224 return decls_scope->import;
216225 }
217226 scope = scope->parent;
......@@ -219,9 +228,12 @@ ImportTableEntry *get_scope_import(Scope *scope) {
219228 zig_unreachable();
220229}
221230
222static ZigType *new_container_type_entry(CodeGen *g, ZigTypeId id, AstNode *source_node, Scope *parent_scope) {
231static ZigType *new_container_type_entry(CodeGen *g, ZigTypeId id, AstNode *source_node, Scope *parent_scope,
232 Buf *bare_name)
233{
223234 ZigType *entry = new_type_table_entry(id);
224 *get_container_scope_ptr(entry) = create_decls_scope(g, source_node, parent_scope, entry, get_scope_import(parent_scope));
235 *get_container_scope_ptr(entry) = create_decls_scope(g, source_node, parent_scope, entry,
236 get_scope_import(parent_scope), bare_name);
225237 return entry;
226238}
227239
......@@ -261,7 +273,6 @@ AstNode *type_decl_node(ZigType *type_entry) {
261273 case ZigTypeIdErrorUnion:
262274 case ZigTypeIdErrorSet:
263275 case ZigTypeIdFn:
264 case ZigTypeIdNamespace:
265276 case ZigTypeIdBoundFn:
266277 case ZigTypeIdArgTuple:
267278 case ZigTypeIdPromise:
......@@ -323,7 +334,6 @@ bool type_is_resolved(ZigType *type_entry, ResolveStatus status) {
323334 case ZigTypeIdErrorUnion:
324335 case ZigTypeIdErrorSet:
325336 case ZigTypeIdFn:
326 case ZigTypeIdNamespace:
327337 case ZigTypeIdBoundFn:
328338 case ZigTypeIdArgTuple:
329339 case ZigTypeIdPromise:
......@@ -1005,21 +1015,22 @@ ZigType *get_slice_type(CodeGen *g, ZigType *ptr_type) {
10051015 return entry;
10061016}
10071017
1008ZigType *get_opaque_type(CodeGen *g, Scope *scope, AstNode *source_node, const char *name) {
1018ZigType *get_opaque_type(CodeGen *g, Scope *scope, AstNode *source_node, const char *full_name, Buf *bare_name) {
10091019 ZigType *entry = new_type_table_entry(ZigTypeIdOpaque);
10101020
1011 buf_init_from_str(&entry->name, name);
1021 buf_init_from_str(&entry->name, full_name);
10121022
1013 ImportTableEntry *import = scope ? get_scope_import(scope) : nullptr;
1023 ZigType *import = scope ? get_scope_import(scope) : nullptr;
10141024 unsigned line = source_node ? (unsigned)(source_node->line + 1) : 0;
10151025
10161026 entry->type_ref = LLVMInt8Type();
10171027 entry->di_type = ZigLLVMCreateDebugForwardDeclType(g->dbuilder,
1018 ZigLLVMTag_DW_structure_type(), buf_ptr(&entry->name),
1019 import ? ZigLLVMFileToScope(import->di_file) : nullptr,
1020 import ? import->di_file : nullptr,
1028 ZigLLVMTag_DW_structure_type(), full_name,
1029 import ? ZigLLVMFileToScope(import->data.structure.root_struct->di_file) : nullptr,
1030 import ? import->data.structure.root_struct->di_file : nullptr,
10211031 line);
10221032 entry->zero_bits = false;
1033 entry->data.opaque.bare_name = bare_name;
10231034
10241035 return entry;
10251036}
......@@ -1288,11 +1299,32 @@ static ZigTypeId container_to_type(ContainerKind kind) {
12881299 zig_unreachable();
12891300}
12901301
1302// This is like get_partial_container_type except it's for the implicit root struct of files.
1303ZigType *get_root_container_type(CodeGen *g, const char *full_name, Buf *bare_name,
1304 RootStruct *root_struct)
1305{
1306 ZigType *entry = new_type_table_entry(ZigTypeIdStruct);
1307 entry->data.structure.decls_scope = create_decls_scope(g, nullptr, nullptr, entry, entry, bare_name);
1308 entry->data.structure.root_struct = root_struct;
1309 entry->data.structure.layout = ContainerLayoutAuto;
1310 entry->type_ref = LLVMStructCreateNamed(LLVMGetGlobalContext(), full_name);
1311
1312 size_t line = 0; // root therefore first line
1313 unsigned dwarf_kind = ZigLLVMTag_DW_structure_type();
1314
1315 entry->di_type = ZigLLVMCreateReplaceableCompositeType(g->dbuilder,
1316 dwarf_kind, full_name,
1317 ZigLLVMFileToScope(root_struct->di_file), root_struct->di_file, (unsigned)(line + 1));
1318
1319 buf_init_from_str(&entry->name, full_name);
1320 return entry;
1321}
1322
12911323ZigType *get_partial_container_type(CodeGen *g, Scope *scope, ContainerKind kind,
1292 AstNode *decl_node, const char *name, ContainerLayout layout)
1324 AstNode *decl_node, const char *full_name, Buf *bare_name, ContainerLayout layout)
12931325{
12941326 ZigTypeId type_id = container_to_type(kind);
1295 ZigType *entry = new_container_type_entry(g, type_id, decl_node, scope);
1327 ZigType *entry = new_container_type_entry(g, type_id, decl_node, scope, bare_name);
12961328
12971329 switch (kind) {
12981330 case ContainerKindStruct:
......@@ -1312,13 +1344,14 @@ ZigType *get_partial_container_type(CodeGen *g, Scope *scope, ContainerKind kind
13121344 size_t line = decl_node ? decl_node->line : 0;
13131345 unsigned dwarf_kind = ZigLLVMTag_DW_structure_type();
13141346
1315 ImportTableEntry *import = get_scope_import(scope);
1316 entry->type_ref = LLVMStructCreateNamed(LLVMGetGlobalContext(), name);
1347 ZigType *import = get_scope_import(scope);
1348 entry->type_ref = LLVMStructCreateNamed(LLVMGetGlobalContext(), full_name);
13171349 entry->di_type = ZigLLVMCreateReplaceableCompositeType(g->dbuilder,
1318 dwarf_kind, name,
1319 ZigLLVMFileToScope(import->di_file), import->di_file, (unsigned)(line + 1));
1350 dwarf_kind, full_name,
1351 ZigLLVMFileToScope(import->data.structure.root_struct->di_file),
1352 import->data.structure.root_struct->di_file, (unsigned)(line + 1));
13201353
1321 buf_init_from_str(&entry->name, name);
1354 buf_init_from_str(&entry->name, full_name);
13221355
13231356 return entry;
13241357}
......@@ -1459,7 +1492,6 @@ static Error emit_error_unless_type_allowed_in_packed_struct(CodeGen *g, ZigType
14591492 case ZigTypeIdNull:
14601493 case ZigTypeIdErrorUnion:
14611494 case ZigTypeIdErrorSet:
1462 case ZigTypeIdNamespace:
14631495 case ZigTypeIdBoundFn:
14641496 case ZigTypeIdArgTuple:
14651497 case ZigTypeIdOpaque:
......@@ -1547,7 +1579,6 @@ bool type_allowed_in_extern(CodeGen *g, ZigType *type_entry) {
15471579 case ZigTypeIdNull:
15481580 case ZigTypeIdErrorUnion:
15491581 case ZigTypeIdErrorSet:
1550 case ZigTypeIdNamespace:
15511582 case ZigTypeIdBoundFn:
15521583 case ZigTypeIdArgTuple:
15531584 case ZigTypeIdPromise:
......@@ -1706,7 +1737,6 @@ static ZigType *analyze_fn_type(CodeGen *g, AstNode *proto_node, Scope *child_sc
17061737 return g->builtin_types.entry_invalid;
17071738 case ZigTypeIdComptimeFloat:
17081739 case ZigTypeIdComptimeInt:
1709 case ZigTypeIdNamespace:
17101740 case ZigTypeIdBoundFn:
17111741 case ZigTypeIdMetaType:
17121742 case ZigTypeIdVoid:
......@@ -1801,7 +1831,6 @@ static ZigType *analyze_fn_type(CodeGen *g, AstNode *proto_node, Scope *child_sc
18011831
18021832 case ZigTypeIdComptimeFloat:
18031833 case ZigTypeIdComptimeInt:
1804 case ZigTypeIdNamespace:
18051834 case ZigTypeIdBoundFn:
18061835 case ZigTypeIdMetaType:
18071836 case ZigTypeIdUnreachable:
......@@ -1880,7 +1909,9 @@ static Error resolve_enum_type(CodeGen *g, ZigType *enum_type) {
18801909 if (!enum_type->data.enumeration.reported_infinite_err) {
18811910 enum_type->data.enumeration.is_invalid = true;
18821911 enum_type->data.enumeration.reported_infinite_err = true;
1883 add_node_error(g, decl_node, buf_sprintf("enum '%s' contains itself", buf_ptr(&enum_type->name)));
1912 ErrorMsg *msg = add_node_error(g, decl_node,
1913 buf_sprintf("enum '%s' contains itself", buf_ptr(&enum_type->name)));
1914 emit_error_notes_for_ref_stack(g, msg);
18841915 }
18851916 return ErrorSemanticAnalyzeFail;
18861917 }
......@@ -1895,7 +1926,7 @@ static Error resolve_enum_type(CodeGen *g, ZigType *enum_type) {
18951926 ZigLLVMDIEnumerator **di_enumerators = allocate<ZigLLVMDIEnumerator*>(field_count);
18961927
18971928 Scope *scope = &enum_type->data.enumeration.decls_scope->base;
1898 ImportTableEntry *import = get_scope_import(scope);
1929 ZigType *import = get_scope_import(scope);
18991930
19001931 // set temporary flag
19011932 enum_type->data.enumeration.embedded_in_current = true;
......@@ -1924,9 +1955,9 @@ static Error resolve_enum_type(CodeGen *g, ZigType *enum_type) {
19241955 ZigLLVMDIType **di_root_members = nullptr;
19251956 size_t debug_member_count = 0;
19261957 ZigLLVMDIType *replacement_di_type = ZigLLVMCreateDebugStructType(g->dbuilder,
1927 ZigLLVMFileToScope(import->di_file),
1958 ZigLLVMFileToScope(import->data.structure.root_struct->di_file),
19281959 buf_ptr(&enum_type->name),
1929 import->di_file, (unsigned)(decl_node->line + 1),
1960 import->data.structure.root_struct->di_file, (unsigned)(decl_node->line + 1),
19301961 debug_size_in_bits,
19311962 debug_align_in_bits,
19321963 0, nullptr, di_root_members, (int)debug_member_count, 0, nullptr, "");
......@@ -1942,8 +1973,8 @@ static Error resolve_enum_type(CodeGen *g, ZigType *enum_type) {
19421973 uint64_t tag_debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, tag_int_type->type_ref);
19431974 uint64_t tag_debug_align_in_bits = 8*LLVMABIAlignmentOfType(g->target_data_ref, tag_int_type->type_ref);
19441975 ZigLLVMDIType *tag_di_type = ZigLLVMCreateDebugEnumerationType(g->dbuilder,
1945 ZigLLVMFileToScope(import->di_file), buf_ptr(&enum_type->name),
1946 import->di_file, (unsigned)(decl_node->line + 1),
1976 ZigLLVMFileToScope(import->data.structure.root_struct->di_file), buf_ptr(&enum_type->name),
1977 import->data.structure.root_struct->di_file, (unsigned)(decl_node->line + 1),
19471978 tag_debug_size_in_bits,
19481979 tag_debug_align_in_bits,
19491980 di_enumerators, field_count,
......@@ -2051,8 +2082,9 @@ static Error resolve_struct_type(CodeGen *g, ZigType *struct_type) {
20512082 if (struct_type->data.structure.resolve_loop_flag) {
20522083 if (struct_type->data.structure.resolve_status != ResolveStatusInvalid) {
20532084 struct_type->data.structure.resolve_status = ResolveStatusInvalid;
2054 add_node_error(g, decl_node,
2085 ErrorMsg *msg = add_node_error(g, decl_node,
20552086 buf_sprintf("struct '%s' contains itself", buf_ptr(&struct_type->name)));
2087 emit_error_notes_for_ref_stack(g, msg);
20562088 }
20572089 return ErrorSemanticAnalyzeFail;
20582090 }
......@@ -2159,15 +2191,15 @@ static Error resolve_struct_type(CodeGen *g, ZigType *struct_type) {
21592191 if (struct_type->zero_bits) {
21602192 struct_type->type_ref = LLVMVoidType();
21612193
2162 ImportTableEntry *import = get_scope_import(scope);
2194 ZigType *import = get_scope_import(scope);
21632195 uint64_t debug_size_in_bits = 0;
21642196 uint64_t debug_align_in_bits = 0;
21652197 ZigLLVMDIType **di_element_types = nullptr;
21662198 size_t debug_field_count = 0;
21672199 ZigLLVMDIType *replacement_di_type = ZigLLVMCreateDebugStructType(g->dbuilder,
2168 ZigLLVMFileToScope(import->di_file),
2200 ZigLLVMFileToScope(import->data.structure.root_struct->di_file),
21692201 buf_ptr(&struct_type->name),
2170 import->di_file, (unsigned)(decl_node->line + 1),
2202 import->data.structure.root_struct->di_file, (unsigned)(decl_node->line + 1),
21712203 debug_size_in_bits,
21722204 debug_align_in_bits,
21732205 0, nullptr, di_element_types, (int)debug_field_count, 0, nullptr, "");
......@@ -2191,7 +2223,7 @@ static Error resolve_struct_type(CodeGen *g, ZigType *struct_type) {
21912223
21922224 ZigLLVMDIType **di_element_types = allocate<ZigLLVMDIType*>(debug_field_count);
21932225
2194 ImportTableEntry *import = get_scope_import(scope);
2226 ZigType *import = get_scope_import(scope);
21952227 size_t debug_field_index = 0;
21962228 for (size_t i = 0; i < field_count; i += 1) {
21972229 AstNode *field_node = decl_node->data.container_decl.fields.at(i);
......@@ -2234,7 +2266,7 @@ static Error resolve_struct_type(CodeGen *g, ZigType *struct_type) {
22342266 }
22352267 di_element_types[debug_field_index] = ZigLLVMCreateDebugMemberType(g->dbuilder,
22362268 ZigLLVMTypeToScope(struct_type->di_type), buf_ptr(type_struct_field->name),
2237 import->di_file, (unsigned)(field_node->line + 1),
2269 import->data.structure.root_struct->di_file, (unsigned)(field_node->line + 1),
22382270 debug_size_in_bits,
22392271 debug_align_in_bits,
22402272 debug_offset_in_bits,
......@@ -2247,9 +2279,9 @@ static Error resolve_struct_type(CodeGen *g, ZigType *struct_type) {
22472279 uint64_t debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, struct_type->type_ref);
22482280 uint64_t debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, struct_type->type_ref);
22492281 ZigLLVMDIType *replacement_di_type = ZigLLVMCreateDebugStructType(g->dbuilder,
2250 ZigLLVMFileToScope(import->di_file),
2282 ZigLLVMFileToScope(import->data.structure.root_struct->di_file),
22512283 buf_ptr(&struct_type->name),
2252 import->di_file, (unsigned)(decl_node->line + 1),
2284 import->data.structure.root_struct->di_file, (unsigned)(decl_node->line + 1),
22532285 debug_size_in_bits,
22542286 debug_align_in_bits,
22552287 0, nullptr, di_element_types, (int)debug_field_count, 0, nullptr, "");
......@@ -2276,7 +2308,9 @@ static Error resolve_union_type(CodeGen *g, ZigType *union_type) {
22762308 if (!union_type->data.unionation.reported_infinite_err) {
22772309 union_type->data.unionation.reported_infinite_err = true;
22782310 union_type->data.unionation.is_invalid = true;
2279 add_node_error(g, decl_node, buf_sprintf("union '%s' contains itself", buf_ptr(&union_type->name)));
2311 ErrorMsg *msg = add_node_error(g, decl_node,
2312 buf_sprintf("union '%s' contains itself", buf_ptr(&union_type->name)));
2313 emit_error_notes_for_ref_stack(g, msg);
22802314 }
22812315 return ErrorSemanticAnalyzeFail;
22822316 }
......@@ -2298,7 +2332,7 @@ static Error resolve_union_type(CodeGen *g, ZigType *union_type) {
22982332 uint64_t biggest_size_in_bits = 0;
22992333
23002334 Scope *scope = &union_type->data.unionation.decls_scope->base;
2301 ImportTableEntry *import = get_scope_import(scope);
2335 ZigType *import = get_scope_import(scope);
23022336
23032337 // set temporary flag
23042338 union_type->data.unionation.embedded_in_current = true;
......@@ -2325,7 +2359,7 @@ static Error resolve_union_type(CodeGen *g, ZigType *union_type) {
23252359
23262360 union_inner_di_types[union_field->gen_index] = ZigLLVMCreateDebugMemberType(g->dbuilder,
23272361 ZigLLVMTypeToScope(union_type->di_type), buf_ptr(union_field->enum_field->name),
2328 import->di_file, (unsigned)(field_node->line + 1),
2362 import->data.structure.root_struct->di_file, (unsigned)(field_node->line + 1),
23292363 store_size_in_bits,
23302364 abi_align_in_bits,
23312365 0,
......@@ -2358,9 +2392,9 @@ static Error resolve_union_type(CodeGen *g, ZigType *union_type) {
23582392 ZigLLVMDIType **di_root_members = nullptr;
23592393 size_t debug_member_count = 0;
23602394 ZigLLVMDIType *replacement_di_type = ZigLLVMCreateDebugUnionType(g->dbuilder,
2361 ZigLLVMFileToScope(import->di_file),
2395 ZigLLVMFileToScope(import->data.structure.root_struct->di_file),
23622396 buf_ptr(&union_type->name),
2363 import->di_file, (unsigned)(decl_node->line + 1),
2397 import->data.structure.root_struct->di_file, (unsigned)(decl_node->line + 1),
23642398 debug_size_in_bits,
23652399 debug_align_in_bits,
23662400 0, di_root_members, (int)debug_member_count, 0, "");
......@@ -2396,8 +2430,8 @@ static Error resolve_union_type(CodeGen *g, ZigType *union_type) {
23962430
23972431 // create debug type for union
23982432 ZigLLVMDIType *replacement_di_type = ZigLLVMCreateDebugUnionType(g->dbuilder,
2399 ZigLLVMFileToScope(import->di_file), buf_ptr(&union_type->name),
2400 import->di_file, (unsigned)(decl_node->line + 1),
2433 ZigLLVMFileToScope(import->data.structure.root_struct->di_file), buf_ptr(&union_type->name),
2434 import->data.structure.root_struct->di_file, (unsigned)(decl_node->line + 1),
24012435 biggest_size_in_bits, biggest_align_in_bits, 0, union_inner_di_types,
24022436 gen_field_count, 0, "");
24032437
......@@ -2452,7 +2486,7 @@ static Error resolve_union_type(CodeGen *g, ZigType *union_type) {
24522486 // create debug type for union
24532487 ZigLLVMDIType *union_di_type = ZigLLVMCreateDebugUnionType(g->dbuilder,
24542488 ZigLLVMTypeToScope(union_type->di_type), "AnonUnion",
2455 import->di_file, (unsigned)(decl_node->line + 1),
2489 import->data.structure.root_struct->di_file, (unsigned)(decl_node->line + 1),
24562490 biggest_size_in_bits, biggest_align_in_bits, 0, union_inner_di_types,
24572491 gen_field_count, 0, "");
24582492
......@@ -2463,7 +2497,7 @@ static Error resolve_union_type(CodeGen *g, ZigType *union_type) {
24632497
24642498 ZigLLVMDIType *union_member_di_type = ZigLLVMCreateDebugMemberType(g->dbuilder,
24652499 ZigLLVMTypeToScope(union_type->di_type), "payload",
2466 import->di_file, (unsigned)(decl_node->line + 1),
2500 import->data.structure.root_struct->di_file, (unsigned)(decl_node->line + 1),
24672501 biggest_size_in_bits,
24682502 biggest_align_in_bits,
24692503 union_offset_in_bits,
......@@ -2474,7 +2508,7 @@ static Error resolve_union_type(CodeGen *g, ZigType *union_type) {
24742508
24752509 ZigLLVMDIType *tag_member_di_type = ZigLLVMCreateDebugMemberType(g->dbuilder,
24762510 ZigLLVMTypeToScope(union_type->di_type), "tag",
2477 import->di_file, (unsigned)(decl_node->line + 1),
2511 import->data.structure.root_struct->di_file, (unsigned)(decl_node->line + 1),
24782512 tag_debug_size_in_bits,
24792513 tag_debug_align_in_bits,
24802514 tag_offset_in_bits,
......@@ -2487,9 +2521,9 @@ static Error resolve_union_type(CodeGen *g, ZigType *union_type) {
24872521 uint64_t debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, union_type->type_ref);
24882522 uint64_t debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, union_type->type_ref);
24892523 ZigLLVMDIType *replacement_di_type = ZigLLVMCreateDebugStructType(g->dbuilder,
2490 ZigLLVMFileToScope(import->di_file),
2524 ZigLLVMFileToScope(import->data.structure.root_struct->di_file),
24912525 buf_ptr(&union_type->name),
2492 import->di_file, (unsigned)(decl_node->line + 1),
2526 import->data.structure.root_struct->di_file, (unsigned)(decl_node->line + 1),
24932527 debug_size_in_bits,
24942528 debug_align_in_bits,
24952529 0, nullptr, di_root_members, 2, 0, nullptr, "");
......@@ -2507,8 +2541,9 @@ static Error resolve_enum_zero_bits(CodeGen *g, ZigType *enum_type) {
25072541 return ErrorNone;
25082542
25092543 if (enum_type->data.enumeration.zero_bits_loop_flag) {
2510 add_node_error(g, enum_type->data.enumeration.decl_node,
2544 ErrorMsg *msg = add_node_error(g, enum_type->data.enumeration.decl_node,
25112545 buf_sprintf("'%s' depends on itself", buf_ptr(&enum_type->name)));
2546 emit_error_notes_for_ref_stack(g, msg);
25122547 enum_type->data.enumeration.is_invalid = true;
25132548 return ErrorSemanticAnalyzeFail;
25142549 }
......@@ -2780,8 +2815,9 @@ static Error resolve_struct_alignment(CodeGen *g, ZigType *struct_type) {
27802815 if (struct_type->data.structure.resolve_loop_flag) {
27812816 if (struct_type->data.structure.resolve_status != ResolveStatusInvalid) {
27822817 struct_type->data.structure.resolve_status = ResolveStatusInvalid;
2783 add_node_error(g, decl_node,
2818 ErrorMsg *msg = add_node_error(g, decl_node,
27842819 buf_sprintf("struct '%s' contains itself", buf_ptr(&struct_type->name)));
2820 emit_error_notes_for_ref_stack(g, msg);
27852821 }
27862822 return ErrorSemanticAnalyzeFail;
27872823 }
......@@ -3185,15 +3221,15 @@ static Error resolve_union_zero_bits(CodeGen *g, ZigType *union_type) {
31853221 }
31863222
31873223 if (create_enum_type) {
3188 ImportTableEntry *import = get_scope_import(scope);
3224 ZigType *import = get_scope_import(scope);
31893225 uint64_t tag_debug_size_in_bits = tag_type->zero_bits ? 0 :
31903226 8*LLVMStoreSizeOfType(g->target_data_ref, tag_type->type_ref);
31913227 uint64_t tag_debug_align_in_bits = tag_type->zero_bits ? 0 :
31923228 8*LLVMABIAlignmentOfType(g->target_data_ref, tag_type->type_ref);
31933229 // TODO get a more accurate debug scope
31943230 ZigLLVMDIType *tag_di_type = ZigLLVMCreateDebugEnumerationType(g->dbuilder,
3195 ZigLLVMFileToScope(import->di_file), buf_ptr(&tag_type->name),
3196 import->di_file, (unsigned)(decl_node->line + 1),
3231 ZigLLVMFileToScope(import->data.structure.root_struct->di_file), buf_ptr(&tag_type->name),
3232 import->data.structure.root_struct->di_file, (unsigned)(decl_node->line + 1),
31973233 tag_debug_size_in_bits, tag_debug_align_in_bits, di_enumerators, field_count,
31983234 tag_type->di_type, "");
31993235 tag_type->di_type = tag_di_type;
......@@ -3210,27 +3246,16 @@ static Error resolve_union_zero_bits(CodeGen *g, ZigType *union_type) {
32103246 return ErrorNone;
32113247}
32123248
3213static void get_fully_qualified_decl_name_internal(Buf *buf, Scope *scope, uint8_t sep) {
3214 if (!scope)
3215 return;
3216
3217 if (scope->id == ScopeIdDecls) {
3218 get_fully_qualified_decl_name_internal(buf, scope->parent, sep);
3249static void get_fully_qualified_decl_name(Buf *buf, Tld *tld) {
3250 buf_resize(buf, 0);
32193251
3220 ScopeDecls *scope_decls = (ScopeDecls *)scope;
3221 if (scope_decls->container_type) {
3222 buf_append_buf(buf, &scope_decls->container_type->name);
3223 buf_append_char(buf, sep);
3224 }
3225 return;
3252 Scope *scope = tld->parent_scope;
3253 while (scope->id != ScopeIdDecls) {
3254 scope = scope->parent;
32263255 }
3227
3228 get_fully_qualified_decl_name_internal(buf, scope->parent, sep);
3229}
3230
3231static void get_fully_qualified_decl_name(Buf *buf, Tld *tld, uint8_t sep) {
3232 buf_resize(buf, 0);
3233 get_fully_qualified_decl_name_internal(buf, tld->parent_scope, sep);
3256 ScopeDecls *decls_scope = reinterpret_cast<ScopeDecls *>(scope);
3257 buf_append_buf(buf, &decls_scope->container_type->name);
3258 if (buf_len(buf) != 0) buf_append_char(buf, NAMESPACE_SEP_CHAR);
32343259 buf_append_buf(buf, tld->name);
32353260}
32363261
......@@ -3265,7 +3290,7 @@ static bool scope_is_root_decls(Scope *scope) {
32653290 while (scope) {
32663291 if (scope->id == ScopeIdDecls) {
32673292 ScopeDecls *scope_decls = (ScopeDecls *)scope;
3268 return (scope_decls->container_type == nullptr);
3293 return is_top_level_struct(scope_decls->container_type);
32693294 }
32703295 scope = scope->parent;
32713296 }
......@@ -3281,7 +3306,7 @@ void typecheck_panic_fn(CodeGen *g, TldFn *tld_fn, ZigFn *panic_fn) {
32813306 AstNode *fake_decl = allocate<AstNode>(1);
32823307 *fake_decl = *panic_fn->proto_node;
32833308 fake_decl->type = NodeTypeSymbol;
3284 fake_decl->data.symbol_expr.symbol = &panic_fn->symbol_name;
3309 fake_decl->data.symbol_expr.symbol = tld_fn->base.name;
32853310
32863311 // call this for the side effects of casting to panic_fn_type
32873312 analyze_const_value(g, tld_fn->base.parent_scope, fake_decl, panic_fn_type, nullptr);
......@@ -3326,7 +3351,7 @@ void add_fn_export(CodeGen *g, ZigFn *fn_table_entry, Buf *symbol_name, GlobalLi
33263351}
33273352
33283353static void resolve_decl_fn(CodeGen *g, TldFn *tld_fn) {
3329 ImportTableEntry *import = tld_fn->base.import;
3354 ZigType *import = tld_fn->base.import;
33303355 AstNode *source_node = tld_fn->base.source_node;
33313356 if (source_node->type == NodeTypeFnProto) {
33323357 AstNodeFnProto *fn_proto = &source_node->data.fn_proto;
......@@ -3334,16 +3359,21 @@ static void resolve_decl_fn(CodeGen *g, TldFn *tld_fn) {
33343359 AstNode *fn_def_node = fn_proto->fn_def_node;
33353360
33363361 ZigFn *fn_table_entry = create_fn(g, source_node);
3337 get_fully_qualified_decl_name(&fn_table_entry->symbol_name, &tld_fn->base, '_');
3362 tld_fn->fn_entry = fn_table_entry;
3363
3364 bool is_extern = (fn_table_entry->body_node == nullptr);
3365 if (fn_proto->is_export || is_extern) {
3366 buf_init_from_buf(&fn_table_entry->symbol_name, tld_fn->base.name);
3367 } else {
3368 get_fully_qualified_decl_name(&fn_table_entry->symbol_name, &tld_fn->base);
3369 }
33383370
33393371 if (fn_proto->is_export) {
33403372 bool ccc = (fn_proto->cc == CallingConventionUnspecified || fn_proto->cc == CallingConventionC);
33413373 add_fn_export(g, fn_table_entry, &fn_table_entry->symbol_name, GlobalLinkageIdStrong, ccc);
33423374 }
33433375
3344 tld_fn->fn_entry = fn_table_entry;
3345
3346 if (fn_table_entry->body_node) {
3376 if (!is_extern) {
33473377 fn_table_entry->fndef_scope = create_fndef_scope(g,
33483378 fn_table_entry->body_node, tld_fn->base.parent_scope, fn_table_entry);
33493379
......@@ -3382,12 +3412,12 @@ static void resolve_decl_fn(CodeGen *g, TldFn *tld_fn) {
33823412 }
33833413
33843414 if (scope_is_root_decls(tld_fn->base.parent_scope) &&
3385 (import == g->root_import || import->package == g->panic_package))
3415 (import == g->root_import || import->data.structure.root_struct->package == g->panic_package))
33863416 {
3387 if (g->have_pub_main && buf_eql_str(&fn_table_entry->symbol_name, "main")) {
3417 if (g->have_pub_main && buf_eql_str(tld_fn->base.name, "main")) {
33883418 g->main_fn = fn_table_entry;
3389 } else if ((import->package == g->panic_package || g->have_pub_panic) &&
3390 buf_eql_str(&fn_table_entry->symbol_name, "panic"))
3419 } else if ((import->data.structure.root_struct->package == g->panic_package || g->have_pub_panic) &&
3420 buf_eql_str(tld_fn->base.name, "panic"))
33913421 {
33923422 g->panic_fn = fn_table_entry;
33933423 g->panic_tld_fn = tld_fn;
......@@ -3396,7 +3426,7 @@ static void resolve_decl_fn(CodeGen *g, TldFn *tld_fn) {
33963426 } else if (source_node->type == NodeTypeTestDecl) {
33973427 ZigFn *fn_table_entry = create_fn_raw(g, FnInlineAuto);
33983428
3399 get_fully_qualified_decl_name(&fn_table_entry->symbol_name, &tld_fn->base, '_');
3429 get_fully_qualified_decl_name(&fn_table_entry->symbol_name, &tld_fn->base);
34003430
34013431 tld_fn->fn_entry = fn_table_entry;
34023432
......@@ -3473,8 +3503,8 @@ static void preview_test_decl(CodeGen *g, AstNode *node, ScopeDecls *decls_scope
34733503 if (!g->is_test_build)
34743504 return;
34753505
3476 ImportTableEntry *import = get_scope_import(&decls_scope->base);
3477 if (import->package != g->root_package)
3506 ZigType *import = get_scope_import(&decls_scope->base);
3507 if (import->data.structure.root_struct->package != g->root_package)
34783508 return;
34793509
34803510 Buf *decl_name_buf = node->data.test_decl.name;
......@@ -3511,8 +3541,8 @@ void init_tld(Tld *tld, TldId id, Buf *name, VisibMod visib_mod, AstNode *source
35113541}
35123542
35133543void update_compile_var(CodeGen *g, Buf *name, ConstExprValue *value) {
3514 Tld *tld = g->compile_var_import->decls_scope->decl_table.get(name);
3515 resolve_top_level_decl(g, tld, false, tld->source_node);
3544 Tld *tld = get_container_scope(g->compile_var_import)->decl_table.get(name);
3545 resolve_top_level_decl(g, tld, tld->source_node);
35163546 assert(tld->id == TldIdVar);
35173547 TldVar *tld_var = (TldVar *)tld;
35183548 tld_var->var->const_value = value;
......@@ -3561,8 +3591,7 @@ void scan_decls(CodeGen *g, ScopeDecls *decls_scope, AstNode *node) {
35613591 case NodeTypeUse:
35623592 {
35633593 g->use_queue.append(node);
3564 ImportTableEntry *import = get_scope_import(&decls_scope->base);
3565 import->use_decls.append(node);
3594 decls_scope->use_decls.append(node);
35663595 break;
35673596 }
35683597 case NodeTypeTestDecl:
......@@ -3654,7 +3683,6 @@ ZigType *validate_var_type(CodeGen *g, AstNode *source_node, ZigType *type_entry
36543683 return g->builtin_types.entry_invalid;
36553684 case ZigTypeIdComptimeFloat:
36563685 case ZigTypeIdComptimeInt:
3657 case ZigTypeIdNamespace:
36583686 case ZigTypeIdMetaType:
36593687 case ZigTypeIdVoid:
36603688 case ZigTypeIdBool:
......@@ -3763,8 +3791,16 @@ static void resolve_decl_var(CodeGen *g, TldVar *tld_var) {
37633791
37643792 ZigType *explicit_type = nullptr;
37653793 if (var_decl->type) {
3766 ZigType *proposed_type = analyze_type_expr(g, tld_var->base.parent_scope, var_decl->type);
3767 explicit_type = validate_var_type(g, var_decl->type, proposed_type);
3794 if (tld_var->analyzing_type) {
3795 ErrorMsg *msg = add_node_error(g, var_decl->type,
3796 buf_sprintf("type of '%s' depends on itself", buf_ptr(tld_var->base.name)));
3797 emit_error_notes_for_ref_stack(g, msg);
3798 explicit_type = g->builtin_types.entry_invalid;
3799 } else {
3800 tld_var->analyzing_type = true;
3801 ZigType *proposed_type = analyze_type_expr(g, tld_var->base.parent_scope, var_decl->type);
3802 explicit_type = validate_var_type(g, var_decl->type, proposed_type);
3803 }
37683804 }
37693805
37703806 assert(!is_export || !is_extern);
......@@ -3847,17 +3883,12 @@ static void resolve_decl_var(CodeGen *g, TldVar *tld_var) {
38473883 g->global_vars.append(tld_var);
38483884}
38493885
3850void resolve_top_level_decl(CodeGen *g, Tld *tld, bool pointer_only, AstNode *source_node) {
3886void resolve_top_level_decl(CodeGen *g, Tld *tld, AstNode *source_node) {
38513887 if (tld->resolution != TldResolutionUnresolved)
38523888 return;
38533889
3854 if (tld->dep_loop_flag) {
3855 add_node_error(g, tld->source_node, buf_sprintf("'%s' depends on itself", buf_ptr(tld->name)));
3856 tld->resolution = TldResolutionInvalid;
3857 return;
3858 }
3859
3860 tld->dep_loop_flag = true;
3890 assert(tld->resolution != TldResolutionResolving);
3891 tld->resolution = TldResolutionResolving;
38613892 g->tld_ref_source_node_stack.append(source_node);
38623893
38633894 switch (tld->id) {
......@@ -3888,27 +3919,31 @@ void resolve_top_level_decl(CodeGen *g, Tld *tld, bool pointer_only, AstNode *so
38883919 }
38893920
38903921 tld->resolution = TldResolutionOk;
3891 tld->dep_loop_flag = false;
38923922 g->tld_ref_source_node_stack.pop();
38933923}
38943924
3895Tld *find_decl(CodeGen *g, Scope *scope, Buf *name) {
3896 // we must resolve all the use decls
3897 ImportTableEntry *import = get_scope_import(scope);
3898 for (size_t i = 0; i < import->use_decls.length; i += 1) {
3899 AstNode *use_decl_node = import->use_decls.at(i);
3925Tld *find_container_decl(CodeGen *g, ScopeDecls *decls_scope, Buf *name) {
3926 // resolve all the use decls
3927 for (size_t i = 0; i < decls_scope->use_decls.length; i += 1) {
3928 AstNode *use_decl_node = decls_scope->use_decls.at(i);
39003929 if (use_decl_node->data.use.resolution == TldResolutionUnresolved) {
39013930 preview_use_decl(g, use_decl_node);
39023931 resolve_use_decl(g, use_decl_node);
39033932 }
39043933 }
39053934
3935 auto entry = decls_scope->decl_table.maybe_get(name);
3936 return (entry == nullptr) ? nullptr : entry->value;
3937}
3938
3939Tld *find_decl(CodeGen *g, Scope *scope, Buf *name) {
39063940 while (scope) {
39073941 if (scope->id == ScopeIdDecls) {
39083942 ScopeDecls *decls_scope = (ScopeDecls *)scope;
3909 auto entry = decls_scope->decl_table.maybe_get(name);
3910 if (entry)
3911 return entry->value;
3943
3944 Tld *result = find_container_decl(g, decls_scope, name);
3945 if (result != nullptr)
3946 return result;
39123947 }
39133948 scope = scope->parent;
39143949 }
......@@ -3959,6 +3994,12 @@ ZigFn *scope_fn_entry(Scope *scope) {
39593994 return nullptr;
39603995}
39613996
3997ZigPackage *scope_package(Scope *scope) {
3998 ZigType *import = get_scope_import(scope);
3999 assert(is_top_level_struct(import));
4000 return import->data.structure.root_struct->package;
4001}
4002
39624003TypeEnumField *find_enum_type_field(ZigType *enum_type, Buf *name) {
39634004 assert(enum_type->id == ZigTypeIdEnum);
39644005 if (enum_type->data.enumeration.src_field_count == 0)
......@@ -4039,7 +4080,6 @@ static bool is_container(ZigType *type_entry) {
40394080 case ZigTypeIdErrorUnion:
40404081 case ZigTypeIdErrorSet:
40414082 case ZigTypeIdFn:
4042 case ZigTypeIdNamespace:
40434083 case ZigTypeIdBoundFn:
40444084 case ZigTypeIdArgTuple:
40454085 case ZigTypeIdOpaque:
......@@ -4098,7 +4138,6 @@ void resolve_container_type(CodeGen *g, ZigType *type_entry) {
40984138 case ZigTypeIdErrorUnion:
40994139 case ZigTypeIdErrorSet:
41004140 case ZigTypeIdFn:
4101 case ZigTypeIdNamespace:
41024141 case ZigTypeIdBoundFn:
41034142 case ZigTypeIdInvalid:
41044143 case ZigTypeIdArgTuple:
......@@ -4342,9 +4381,9 @@ static void add_symbols_from_import(CodeGen *g, AstNode *src_use_node, AstNode *
43424381 preview_use_decl(g, src_use_node);
43434382 }
43444383
4345 ConstExprValue *use_target_value = src_use_node->data.use.value;
4384 ConstExprValue *use_target_value = src_use_node->data.use.using_namespace_value;
43464385 if (type_is_invalid(use_target_value->type)) {
4347 dst_use_node->owner->any_imports_failed = true;
4386 get_container_scope(dst_use_node->owner)->any_imports_failed = true;
43484387 return;
43494388 }
43504389
......@@ -4352,14 +4391,14 @@ static void add_symbols_from_import(CodeGen *g, AstNode *src_use_node, AstNode *
43524391
43534392 assert(use_target_value->special != ConstValSpecialRuntime);
43544393
4355 ImportTableEntry *target_import = use_target_value->data.x_import;
4394 ZigType *target_import = use_target_value->data.x_type;
43564395 assert(target_import);
43574396
4358 if (target_import->any_imports_failed) {
4359 dst_use_node->owner->any_imports_failed = true;
4397 if (get_container_scope(target_import)->any_imports_failed) {
4398 get_container_scope(dst_use_node->owner)->any_imports_failed = true;
43604399 }
43614400
4362 auto it = target_import->decls_scope->decl_table.entry_iterator();
4401 auto it = get_container_scope(target_import)->decl_table.entry_iterator();
43634402 for (;;) {
43644403 auto *entry = it.next();
43654404 if (!entry)
......@@ -4374,7 +4413,7 @@ static void add_symbols_from_import(CodeGen *g, AstNode *src_use_node, AstNode *
43744413
43754414 Buf *target_tld_name = entry->key;
43764415
4377 auto existing_entry = dst_use_node->owner->decls_scope->decl_table.put_unique(target_tld_name, target_tld);
4416 auto existing_entry = get_container_scope(dst_use_node->owner)->decl_table.put_unique(target_tld_name, target_tld);
43784417 if (existing_entry) {
43794418 Tld *existing_decl = existing_entry->value;
43804419 if (existing_decl != target_tld) {
......@@ -4387,8 +4426,8 @@ static void add_symbols_from_import(CodeGen *g, AstNode *src_use_node, AstNode *
43874426 }
43884427 }
43894428
4390 for (size_t i = 0; i < target_import->use_decls.length; i += 1) {
4391 AstNode *use_decl_node = target_import->use_decls.at(i);
4429 for (size_t i = 0; i < get_container_scope(target_import)->use_decls.length; i += 1) {
4430 AstNode *use_decl_node = get_container_scope(target_import)->use_decls.at(i);
43924431 if (use_decl_node->data.use.visib_mod != VisibModPrivate)
43934432 add_symbols_from_import(g, use_decl_node, dst_use_node);
43944433 }
......@@ -4415,16 +4454,18 @@ void preview_use_decl(CodeGen *g, AstNode *node) {
44154454 }
44164455
44174456 node->data.use.resolution = TldResolutionResolving;
4418 ConstExprValue *result = analyze_const_value(g, &node->owner->decls_scope->base,
4419 node->data.use.expr, g->builtin_types.entry_namespace, nullptr);
4457 ConstExprValue *result = analyze_const_value(g, &get_container_scope(node->owner)->base,
4458 node->data.use.expr, g->builtin_types.entry_type, nullptr);
44204459
44214460 if (type_is_invalid(result->type))
4422 node->owner->any_imports_failed = true;
4461 get_container_scope(node->owner)->any_imports_failed = true;
44234462
4424 node->data.use.value = result;
4463 node->data.use.using_namespace_value = result;
44254464}
44264465
4427ImportTableEntry *add_source_file(CodeGen *g, PackageTableEntry *package, Buf *resolved_path, Buf *source_code) {
4466ZigType *add_source_file(CodeGen *g, ZigPackage *package, Buf *resolved_path, Buf *source_code,
4467 SourceKind source_kind)
4468{
44284469 if (g->verbose_tokenize) {
44294470 fprintf(stderr, "\nOriginal Source (%s):\n", buf_ptr(resolved_path));
44304471 fprintf(stderr, "----------------\n");
......@@ -4452,87 +4493,99 @@ ImportTableEntry *add_source_file(CodeGen *g, PackageTableEntry *package, Buf *r
44524493 fprintf(stderr, "------\n");
44534494 }
44544495
4455 ImportTableEntry *import_entry = allocate<ImportTableEntry>(1);
4456 import_entry->package = package;
4457 import_entry->source_code = source_code;
4458 import_entry->line_offsets = tokenization.line_offsets;
4459 import_entry->path = resolved_path;
4460
4461 import_entry->root = ast_parse(source_code, tokenization.tokens, import_entry, g->err_color);
4462 assert(import_entry->root);
4463 if (g->verbose_ast) {
4464 ast_print(stderr, import_entry->root, 0);
4465 }
4466
44674496 Buf *src_dirname = buf_alloc();
44684497 Buf *src_basename = buf_alloc();
44694498 os_path_split(resolved_path, src_dirname, src_basename);
44704499
4471 import_entry->di_file = ZigLLVMCreateFile(g->dbuilder, buf_ptr(src_basename), buf_ptr(src_dirname));
4500 Buf noextname = BUF_INIT;
4501 os_path_extname(resolved_path, &noextname, nullptr);
4502
4503 Buf *pkg_root_src_dir = &package->root_src_dir;
4504 Buf resolved_root_src_dir = os_path_resolve(&pkg_root_src_dir, 1);
4505 Buf namespace_name = BUF_INIT;
4506 buf_init_from_buf(&namespace_name, &package->pkg_path);
4507 if (source_kind == SourceKindNonRoot) {
4508 if (buf_len(&namespace_name) != 0) buf_append_char(&namespace_name, NAMESPACE_SEP_CHAR);
4509 buf_append_mem(&namespace_name, buf_ptr(&noextname) + buf_len(&resolved_root_src_dir) + 1,
4510 buf_len(&noextname) - (buf_len(&resolved_root_src_dir) + 1));
4511 buf_replace(&namespace_name, ZIG_OS_SEP_CHAR, NAMESPACE_SEP_CHAR);
4512 }
4513 Buf *bare_name = buf_alloc();
4514 os_path_extname(src_basename, bare_name, nullptr);
4515
4516 RootStruct *root_struct = allocate<RootStruct>(1);
4517 root_struct->package = package;
4518 root_struct->source_code = source_code;
4519 root_struct->line_offsets = tokenization.line_offsets;
4520 root_struct->path = resolved_path;
4521 root_struct->di_file = ZigLLVMCreateFile(g->dbuilder, buf_ptr(src_basename), buf_ptr(src_dirname));
4522 ZigType *import_entry = get_root_container_type(g, buf_ptr(&namespace_name), bare_name, root_struct);
4523 if (source_kind == SourceKindRoot) {
4524 assert(g->root_import == nullptr);
4525 g->root_import = import_entry;
4526 }
44724527 g->import_table.put(resolved_path, import_entry);
4473 g->import_queue.append(import_entry);
4474
4475 import_entry->decls_scope = create_decls_scope(g, import_entry->root, nullptr, nullptr, import_entry);
4476
4477
4478 assert(import_entry->root->type == NodeTypeContainerDecl);
4479 for (size_t decl_i = 0; decl_i < import_entry->root->data.container_decl.decls.length; decl_i += 1) {
4480 AstNode *top_level_decl = import_entry->root->data.container_decl.decls.at(decl_i);
44814528
4482 if (top_level_decl->type == NodeTypeFnDef) {
4483 AstNode *proto_node = top_level_decl->data.fn_def.fn_proto;
4484 assert(proto_node->type == NodeTypeFnProto);
4485 Buf *proto_name = proto_node->data.fn_proto.name;
4486
4487 bool is_pub = (proto_node->data.fn_proto.visib_mod == VisibModPub);
4488 bool ok_cc = (proto_node->data.fn_proto.cc == CallingConventionUnspecified ||
4489 proto_node->data.fn_proto.cc == CallingConventionCold);
4490
4491 if (is_pub && ok_cc) {
4492 if (buf_eql_str(proto_name, "main")) {
4493 g->have_pub_main = true;
4494 g->subsystem = TargetSubsystemConsole;
4495 } else if (buf_eql_str(proto_name, "panic")) {
4496 g->have_pub_panic = true;
4529 AstNode *root_node = ast_parse(source_code, tokenization.tokens, import_entry, g->err_color);
4530 assert(root_node != nullptr);
4531 assert(root_node->type == NodeTypeContainerDecl);
4532 import_entry->data.structure.decl_node = root_node;
4533 import_entry->data.structure.decls_scope->base.source_node = root_node;
4534 if (g->verbose_ast) {
4535 ast_print(stderr, root_node, 0);
4536 }
4537
4538 if (source_kind == SourceKindRoot || package == g->panic_package) {
4539 // Look for panic and main
4540 for (size_t decl_i = 0; decl_i < root_node->data.container_decl.decls.length; decl_i += 1) {
4541 AstNode *top_level_decl = root_node->data.container_decl.decls.at(decl_i);
4542
4543 if (top_level_decl->type == NodeTypeFnDef) {
4544 AstNode *proto_node = top_level_decl->data.fn_def.fn_proto;
4545 assert(proto_node->type == NodeTypeFnProto);
4546 Buf *proto_name = proto_node->data.fn_proto.name;
4547
4548 bool is_pub = (proto_node->data.fn_proto.visib_mod == VisibModPub);
4549 if (is_pub) {
4550 if (buf_eql_str(proto_name, "main")) {
4551 g->have_pub_main = true;
4552 g->subsystem = TargetSubsystemConsole;
4553 } else if (buf_eql_str(proto_name, "panic")) {
4554 g->have_pub_panic = true;
4555 }
44974556 }
44984557 }
44994558 }
45004559 }
45014560
4502 return import_entry;
4503}
4504
4505void scan_import(CodeGen *g, ImportTableEntry *import) {
4506 if (!import->scanned) {
4507 import->scanned = true;
4508 scan_decls(g, import->decls_scope, import->root);
4509 }
4510}
4511
4512void semantic_analyze(CodeGen *g) {
4513 for (; g->import_queue_index < g->import_queue.length; g->import_queue_index += 1) {
4514 ImportTableEntry *import = g->import_queue.at(g->import_queue_index);
4515 scan_import(g, import);
4561 for (size_t decl_i = 0; decl_i < root_node->data.container_decl.decls.length; decl_i += 1) {
4562 AstNode *top_level_decl = root_node->data.container_decl.decls.at(decl_i);
4563 scan_decls(g, import_entry->data.structure.decls_scope, top_level_decl);
45164564 }
45174565
4518 for (; g->use_queue_index < g->use_queue.length; g->use_queue_index += 1) {
4519 AstNode *use_decl_node = g->use_queue.at(g->use_queue_index);
4520 preview_use_decl(g, use_decl_node);
4521 }
4566 TldContainer *tld_container = allocate<TldContainer>(1);
4567 init_tld(&tld_container->base, TldIdContainer, &namespace_name, VisibModPub, root_node, nullptr);
4568 tld_container->type_entry = import_entry;
4569 tld_container->decls_scope = import_entry->data.structure.decls_scope;
4570 g->resolve_queue.append(&tld_container->base);
45224571
4523 for (size_t i = 0; i < g->use_queue.length; i += 1) {
4524 AstNode *use_decl_node = g->use_queue.at(i);
4525 resolve_use_decl(g, use_decl_node);
4526 }
4572 return import_entry;
4573}
45274574
4575void semantic_analyze(CodeGen *g) {
45284576 while (g->resolve_queue_index < g->resolve_queue.length ||
4529 g->fn_defs_index < g->fn_defs.length)
4577 g->fn_defs_index < g->fn_defs.length ||
4578 g->use_queue_index < g->use_queue.length)
45304579 {
4580 for (; g->use_queue_index < g->use_queue.length; g->use_queue_index += 1) {
4581 AstNode *use_decl_node = g->use_queue.at(g->use_queue_index);
4582 preview_use_decl(g, use_decl_node);
4583 resolve_use_decl(g, use_decl_node);
4584 }
45314585 for (; g->resolve_queue_index < g->resolve_queue.length; g->resolve_queue_index += 1) {
45324586 Tld *tld = g->resolve_queue.at(g->resolve_queue_index);
4533 bool pointer_only = false;
45344587 AstNode *source_node = nullptr;
4535 resolve_top_level_decl(g, tld, pointer_only, source_node);
4588 resolve_top_level_decl(g, tld, source_node);
45364589 }
45374590
45384591 for (; g->fn_defs_index < g->fn_defs.length; g->fn_defs_index += 1) {
......@@ -4613,7 +4666,6 @@ bool handle_is_ptr(ZigType *type_entry) {
46134666 case ZigTypeIdComptimeInt:
46144667 case ZigTypeIdUndefined:
46154668 case ZigTypeIdNull:
4616 case ZigTypeIdNamespace:
46174669 case ZigTypeIdBoundFn:
46184670 case ZigTypeIdArgTuple:
46194671 case ZigTypeIdOpaque:
......@@ -4880,8 +4932,6 @@ static uint32_t hash_const_val(ConstExprValue *const_val) {
48804932 return 3415065496;
48814933 case ZigTypeIdErrorSet:
48824934 return hash_const_val_error_set(const_val);
4883 case ZigTypeIdNamespace:
4884 return hash_ptr(const_val->data.x_import);
48854935 case ZigTypeIdVector:
48864936 // TODO better hashing algorithm
48874937 return 3647867726;
......@@ -4943,7 +4993,6 @@ static bool can_mutate_comptime_var_state(ConstExprValue *value) {
49434993 case ZigTypeIdComptimeInt:
49444994 case ZigTypeIdUndefined:
49454995 case ZigTypeIdNull:
4946 case ZigTypeIdNamespace:
49474996 case ZigTypeIdBoundFn:
49484997 case ZigTypeIdFn:
49494998 case ZigTypeIdOpaque:
......@@ -5013,7 +5062,6 @@ static bool return_type_is_cacheable(ZigType *return_type) {
50135062 case ZigTypeIdComptimeInt:
50145063 case ZigTypeIdUndefined:
50155064 case ZigTypeIdNull:
5016 case ZigTypeIdNamespace:
50175065 case ZigTypeIdBoundFn:
50185066 case ZigTypeIdFn:
50195067 case ZigTypeIdOpaque:
......@@ -5143,7 +5191,6 @@ OnePossibleValue type_has_one_possible_value(CodeGen *g, ZigType *type_entry) {
51435191 case ZigTypeIdComptimeFloat:
51445192 case ZigTypeIdComptimeInt:
51455193 case ZigTypeIdMetaType:
5146 case ZigTypeIdNamespace:
51475194 case ZigTypeIdBoundFn:
51485195 case ZigTypeIdArgTuple:
51495196 case ZigTypeIdOptional:
......@@ -5209,7 +5256,6 @@ ReqCompTime type_requires_comptime(CodeGen *g, ZigType *type_entry) {
52095256 case ZigTypeIdUndefined:
52105257 case ZigTypeIdNull:
52115258 case ZigTypeIdMetaType:
5212 case ZigTypeIdNamespace:
52135259 case ZigTypeIdBoundFn:
52145260 case ZigTypeIdArgTuple:
52155261 return ReqCompTimeYes;
......@@ -5797,8 +5843,6 @@ bool const_values_equal(CodeGen *g, ConstExprValue *a, ConstExprValue *b) {
57975843 }
57985844 case ZigTypeIdErrorUnion:
57995845 zig_panic("TODO");
5800 case ZigTypeIdNamespace:
5801 return a->data.x_import == b->data.x_import;
58025846 case ZigTypeIdArgTuple:
58035847 return a->data.x_arg_tuple.start_index == b->data.x_arg_tuple.start_index &&
58045848 a->data.x_arg_tuple.end_index == b->data.x_arg_tuple.end_index;
......@@ -6072,16 +6116,6 @@ void render_const_value(CodeGen *g, Buf *buf, ConstExprValue *const_val) {
60726116 }
60736117 return;
60746118 }
6075 case ZigTypeIdNamespace:
6076 {
6077 ImportTableEntry *import = const_val->data.x_import;
6078 if (import->c_import_node) {
6079 buf_appendf(buf, "(namespace from C import)");
6080 } else {
6081 buf_appendf(buf, "(namespace: %s)", buf_ptr(import->path));
6082 }
6083 return;
6084 }
60856119 case ZigTypeIdBoundFn:
60866120 {
60876121 ZigFn *fn_entry = const_val->data.x_bound_fn.fn;
......@@ -6203,7 +6237,6 @@ uint32_t type_id_hash(TypeId x) {
62036237 case ZigTypeIdEnum:
62046238 case ZigTypeIdUnion:
62056239 case ZigTypeIdFn:
6206 case ZigTypeIdNamespace:
62076240 case ZigTypeIdBoundFn:
62086241 case ZigTypeIdArgTuple:
62096242 case ZigTypeIdPromise:
......@@ -6252,7 +6285,6 @@ bool type_id_eql(TypeId a, TypeId b) {
62526285 case ZigTypeIdEnum:
62536286 case ZigTypeIdUnion:
62546287 case ZigTypeIdFn:
6255 case ZigTypeIdNamespace:
62566288 case ZigTypeIdBoundFn:
62576289 case ZigTypeIdArgTuple:
62586290 case ZigTypeIdOpaque:
......@@ -6419,7 +6451,6 @@ static const ZigTypeId all_type_ids[] = {
64196451 ZigTypeIdEnum,
64206452 ZigTypeIdUnion,
64216453 ZigTypeIdFn,
6422 ZigTypeIdNamespace,
64236454 ZigTypeIdBoundFn,
64246455 ZigTypeIdArgTuple,
64256456 ZigTypeIdOpaque,
......@@ -6480,18 +6511,16 @@ size_t type_id_index(ZigType *entry) {
64806511 return 17;
64816512 case ZigTypeIdFn:
64826513 return 18;
6483 case ZigTypeIdNamespace:
6484 return 19;
64856514 case ZigTypeIdBoundFn:
6486 return 20;
6515 return 19;
64876516 case ZigTypeIdArgTuple:
6488 return 21;
6517 return 20;
64896518 case ZigTypeIdOpaque:
6490 return 22;
6519 return 21;
64916520 case ZigTypeIdPromise:
6492 return 23;
6521 return 22;
64936522 case ZigTypeIdVector:
6494 return 24;
6523 return 23;
64956524 }
64966525 zig_unreachable();
64976526}
......@@ -6538,8 +6567,6 @@ const char *type_id_name(ZigTypeId id) {
65386567 return "Union";
65396568 case ZigTypeIdFn:
65406569 return "Fn";
6541 case ZigTypeIdNamespace:
6542 return "Namespace";
65436570 case ZigTypeIdBoundFn:
65446571 return "BoundFn";
65456572 case ZigTypeIdArgTuple:
......@@ -6619,8 +6646,8 @@ bool type_ptr_eql(const ZigType *a, const ZigType *b) {
66196646}
66206647
66216648ConstExprValue *get_builtin_value(CodeGen *codegen, const char *name) {
6622 Tld *tld = codegen->compile_var_import->decls_scope->decl_table.get(buf_create_from_str(name));
6623 resolve_top_level_decl(codegen, tld, false, nullptr);
6649 Tld *tld = get_container_scope(codegen->compile_var_import)->decl_table.get(buf_create_from_str(name));
6650 resolve_top_level_decl(codegen, tld, nullptr);
66246651 assert(tld->id == TldIdVar);
66256652 TldVar *tld_var = (TldVar *)tld;
66266653 ConstExprValue *var_value = tld_var->var->const_value;
......@@ -6812,3 +6839,32 @@ bool ptr_allows_addr_zero(ZigType *ptr_type) {
68126839 }
68136840 return false;
68146841}
6842
6843void emit_error_notes_for_ref_stack(CodeGen *g, ErrorMsg *msg) {
6844 size_t i = g->tld_ref_source_node_stack.length;
6845 for (;;) {
6846 if (i == 0)
6847 break;
6848 i -= 1;
6849 AstNode *source_node = g->tld_ref_source_node_stack.at(i);
6850 if (source_node) {
6851 msg = add_error_note(g, msg, source_node, buf_sprintf("referenced here"));
6852 }
6853 }
6854}
6855
6856Buf *type_bare_name(ZigType *type_entry) {
6857 if (is_container(type_entry)) {
6858 return get_container_scope(type_entry)->bare_name;
6859 } else if (type_entry->id == ZigTypeIdOpaque) {
6860 return type_entry->data.opaque.bare_name;
6861 } else {
6862 return &type_entry->name;
6863 }
6864}
6865
6866// TODO this will have to be more clever, probably using the full name
6867// and replacing '.' with '_' or something like that
6868Buf *type_h_name(ZigType *t) {
6869 return type_bare_name(t);
6870}
src/analyze.hpp+20-10
......@@ -12,8 +12,9 @@
1212
1313void semantic_analyze(CodeGen *g);
1414ErrorMsg *add_node_error(CodeGen *g, AstNode *node, Buf *msg);
15ErrorMsg *add_token_error(CodeGen *g, ImportTableEntry *owner, Token *token, Buf *msg);
15ErrorMsg *add_token_error(CodeGen *g, ZigType *owner, Token *token, Buf *msg);
1616ErrorMsg *add_error_note(CodeGen *g, ErrorMsg *parent_msg, AstNode *node, Buf *msg);
17void emit_error_notes_for_ref_stack(CodeGen *g, ErrorMsg *msg);
1718ZigType *new_type_table_entry(ZigTypeId id);
1819ZigType *get_pointer_to_type(CodeGen *g, ZigType *child_type, bool is_const);
1920ZigType *get_pointer_to_type_extra(CodeGen *g, ZigType *child_type, bool is_const,
......@@ -29,11 +30,13 @@ ZigType *get_optional_type(CodeGen *g, ZigType *child_type);
2930ZigType *get_array_type(CodeGen *g, ZigType *child_type, uint64_t array_size);
3031ZigType *get_slice_type(CodeGen *g, ZigType *ptr_type);
3132ZigType *get_partial_container_type(CodeGen *g, Scope *scope, ContainerKind kind,
32 AstNode *decl_node, const char *name, ContainerLayout layout);
33 AstNode *decl_node, const char *full_name, Buf *bare_name, ContainerLayout layout);
34ZigType *get_root_container_type(CodeGen *g, const char *full_name, Buf *bare_name,
35 RootStruct *root_struct);
3336ZigType *get_smallest_unsigned_int_type(CodeGen *g, uint64_t x);
3437ZigType *get_error_union_type(CodeGen *g, ZigType *err_set_type, ZigType *payload_type);
3538ZigType *get_bound_fn_type(CodeGen *g, ZigFn *fn_entry);
36ZigType *get_opaque_type(CodeGen *g, Scope *scope, AstNode *source_node, const char *name);
39ZigType *get_opaque_type(CodeGen *g, Scope *scope, AstNode *source_node, const char *full_name, Buf *bare_name);
3740ZigType *get_struct_type(CodeGen *g, const char *type_name, const char *field_names[],
3841 ZigType *field_types[], size_t field_count);
3942ZigType *get_promise_type(CodeGen *g, ZigType *result_type);
......@@ -46,12 +49,18 @@ bool type_allowed_in_extern(CodeGen *g, ZigType *type_entry);
4649bool ptr_allows_addr_zero(ZigType *ptr_type);
4750bool type_is_nonnull_ptr(ZigType *type);
4851
49ImportTableEntry *add_source_file(CodeGen *g, PackageTableEntry *package, Buf *abs_full_path, Buf *source_code);
50
52enum SourceKind {
53 SourceKindRoot,
54 SourceKindPkgMain,
55 SourceKindNonRoot,
56};
57ZigType *add_source_file(CodeGen *g, ZigPackage *package, Buf *abs_full_path, Buf *source_code,
58 SourceKind source_kind);
5159
5260ZigVar *find_variable(CodeGen *g, Scope *orig_context, Buf *name, ScopeFnDef **crossed_fndef_scope);
5361Tld *find_decl(CodeGen *g, Scope *scope, Buf *name);
54void resolve_top_level_decl(CodeGen *g, Tld *tld, bool pointer_only, AstNode *source_node);
62Tld *find_container_decl(CodeGen *g, ScopeDecls *decls_scope, Buf *name);
63void resolve_top_level_decl(CodeGen *g, Tld *tld, AstNode *source_node);
5564bool type_is_codegen_pointer(ZigType *type);
5665
5766ZigType *get_src_ptr_type(ZigType *type);
......@@ -77,11 +86,11 @@ bool is_array_ref(ZigType *type_entry);
7786bool is_container_ref(ZigType *type_entry);
7887bool is_valid_vector_elem_type(ZigType *elem_type);
7988void scan_decls(CodeGen *g, ScopeDecls *decls_scope, AstNode *node);
80void scan_import(CodeGen *g, ImportTableEntry *import);
8189void preview_use_decl(CodeGen *g, AstNode *node);
8290void resolve_use_decl(CodeGen *g, AstNode *node);
8391ZigFn *scope_fn_entry(Scope *scope);
84ImportTableEntry *get_scope_import(Scope *scope);
92ZigPackage *scope_package(Scope *scope);
93ZigType *get_scope_import(Scope *scope);
8594void init_tld(Tld *tld, TldId id, Buf *name, VisibMod visib_mod, AstNode *source_node, Scope *parent_scope);
8695ZigVar *add_variable(CodeGen *g, AstNode *source_node, Scope *parent_scope, Buf *name,
8796 bool is_const, ConstExprValue *init_value, Tld *src_tld, ZigType *var_type);
......@@ -109,7 +118,6 @@ ScopeCImport *create_cimport_scope(CodeGen *g, AstNode *node, Scope *parent);
109118ScopeLoop *create_loop_scope(CodeGen *g, AstNode *node, Scope *parent);
110119ScopeSuspend *create_suspend_scope(CodeGen *g, AstNode *node, Scope *parent);
111120ScopeFnDef *create_fndef_scope(CodeGen *g, AstNode *node, Scope *parent, ZigFn *fn_entry);
112ScopeDecls *create_decls_scope(CodeGen *g, AstNode *node, Scope *parent, ZigType *container_type, ImportTableEntry *import);
113121Scope *create_comptime_scope(CodeGen *g, AstNode *node, Scope *parent);
114122Scope *create_coro_prelude_scope(CodeGen *g, AstNode *node, Scope *parent);
115123Scope *create_runtime_scope(CodeGen *g, AstNode *node, Scope *parent, IrInstruction *is_comptime);
......@@ -186,7 +194,7 @@ LinkLib *add_link_lib(CodeGen *codegen, Buf *lib);
186194
187195uint32_t get_abi_alignment(CodeGen *g, ZigType *type_entry);
188196ZigType *get_align_amt_type(CodeGen *g);
189PackageTableEntry *new_anonymous_package(void);
197ZigPackage *new_anonymous_package(void);
190198
191199Buf *const_value_to_buffer(ConstExprValue *const_val);
192200void add_fn_export(CodeGen *g, ZigFn *fn_table_entry, Buf *symbol_name, GlobalLinkageId linkage, bool ccc);
......@@ -232,4 +240,6 @@ Error ensure_const_val_repr(IrAnalyze *ira, CodeGen *codegen, AstNode *source_no
232240 ConstExprValue *const_val, ZigType *wanted_type);
233241
234242void typecheck_panic_fn(CodeGen *g, TldFn *tld_fn, ZigFn *panic_fn);
243Buf *type_bare_name(ZigType *t);
244Buf *type_h_name(ZigType *t);
235245#endif
src/buffer.hpp+3-3
......@@ -59,7 +59,7 @@ static inline void buf_deinit(Buf *buf) {
5959static inline void buf_init_from_mem(Buf *buf, const char *ptr, size_t len) {
6060 assert(len != SIZE_MAX);
6161 buf->list.resize(len + 1);
62 safe_memcpy(buf_ptr(buf), ptr, len);
62 memcpy(buf_ptr(buf), ptr, len);
6363 buf->list.at(buf_len(buf)) = 0;
6464}
6565
......@@ -98,7 +98,7 @@ static inline Buf *buf_slice(Buf *in_buf, size_t start, size_t end) {
9898 assert(end <= buf_len(in_buf));
9999 Buf *out_buf = allocate<Buf>(1);
100100 out_buf->list.resize(end - start + 1);
101 safe_memcpy(buf_ptr(out_buf), buf_ptr(in_buf) + start, end - start);
101 memcpy(buf_ptr(out_buf), buf_ptr(in_buf) + start, end - start);
102102 out_buf->list.at(buf_len(out_buf)) = 0;
103103 return out_buf;
104104}
......@@ -108,7 +108,7 @@ static inline void buf_append_mem(Buf *buf, const char *mem, size_t mem_len) {
108108 assert(mem_len != SIZE_MAX);
109109 size_t old_len = buf_len(buf);
110110 buf_resize(buf, old_len + mem_len);
111 safe_memcpy(buf_ptr(buf) + old_len, mem, mem_len);
111 memcpy(buf_ptr(buf) + old_len, mem, mem_len);
112112 buf->list.at(buf_len(buf)) = 0;
113113}
114114
src/codegen.cpp+68-66
......@@ -48,16 +48,17 @@ static void init_darwin_native(CodeGen *g) {
4848 }
4949}
5050
51static PackageTableEntry *new_package(const char *root_src_dir, const char *root_src_path) {
52 PackageTableEntry *entry = allocate<PackageTableEntry>(1);
51static ZigPackage *new_package(const char *root_src_dir, const char *root_src_path, const char *pkg_path) {
52 ZigPackage *entry = allocate<ZigPackage>(1);
5353 entry->package_table.init(4);
5454 buf_init_from_str(&entry->root_src_dir, root_src_dir);
5555 buf_init_from_str(&entry->root_src_path, root_src_path);
56 buf_init_from_str(&entry->pkg_path, pkg_path);
5657 return entry;
5758}
5859
59PackageTableEntry *new_anonymous_package(void) {
60 return new_package("", "");
60ZigPackage *new_anonymous_package() {
61 return new_package("", "", "");
6162}
6263
6364static const char *symbols_that_llvm_depends_on[] = {
......@@ -141,11 +142,11 @@ CodeGen *codegen_create(Buf *root_src_path, const ZigTarget *target, OutType out
141142 exit(1);
142143 }
143144
144 g->root_package = new_package(buf_ptr(src_dir), buf_ptr(src_basename));
145 g->std_package = new_package(buf_ptr(g->zig_std_dir), "index.zig");
145 g->root_package = new_package(buf_ptr(src_dir), buf_ptr(src_basename), "");
146 g->std_package = new_package(buf_ptr(g->zig_std_dir), "index.zig", "std");
146147 g->root_package->package_table.put(buf_create_from_str("std"), g->std_package);
147148 } else {
148 g->root_package = new_package(".", "");
149 g->root_package = new_package(".", "", "");
149150 }
150151
151152 g->zig_std_special_dir = buf_alloc();
......@@ -621,7 +622,7 @@ static ZigLLVMDIScope *get_di_scope(CodeGen *g, Scope *scope) {
621622 if (scope->di_scope)
622623 return scope->di_scope;
623624
624 ImportTableEntry *import = get_scope_import(scope);
625 ZigType *import = get_scope_import(scope);
625626 switch (scope->id) {
626627 case ScopeIdCImport:
627628 zig_unreachable();
......@@ -644,7 +645,7 @@ static ZigLLVMDIScope *get_di_scope(CodeGen *g, Scope *scope) {
644645 assert(fn_di_scope != nullptr);
645646 ZigLLVMDISubprogram *subprogram = ZigLLVMCreateFunction(g->dbuilder,
646647 fn_di_scope, buf_ptr(&fn_table_entry->symbol_name), "",
647 import->di_file, line_number,
648 import->data.structure.root_struct->di_file, line_number,
648649 fn_table_entry->type_entry->data.fn.raw_di_type, is_internal_linkage,
649650 is_definition, scope_line, flags, is_optimized, nullptr);
650651
......@@ -658,7 +659,7 @@ static ZigLLVMDIScope *get_di_scope(CodeGen *g, Scope *scope) {
658659 assert(decls_scope->container_type);
659660 scope->di_scope = ZigLLVMTypeToScope(decls_scope->container_type->di_type);
660661 } else {
661 scope->di_scope = ZigLLVMFileToScope(import->di_file);
662 scope->di_scope = ZigLLVMFileToScope(import->data.structure.root_struct->di_file);
662663 }
663664 return scope->di_scope;
664665 case ScopeIdBlock:
......@@ -668,7 +669,7 @@ static ZigLLVMDIScope *get_di_scope(CodeGen *g, Scope *scope) {
668669 assert(scope->parent);
669670 ZigLLVMDILexicalBlock *di_block = ZigLLVMCreateLexicalBlock(g->dbuilder,
670671 get_di_scope(g, scope->parent),
671 import->di_file,
672 import->data.structure.root_struct->di_file,
672673 (unsigned)scope->source_node->line + 1,
673674 (unsigned)scope->source_node->column + 1);
674675 scope->di_scope = ZigLLVMLexicalBlockToScope(di_block);
......@@ -2197,7 +2198,7 @@ var_ok:
21972198 if (dest_ty != nullptr && var->decl_node) {
21982199 // arg index + 1 because the 0 index is return value
21992200 var->di_loc_var = ZigLLVMCreateParameterVariable(g->dbuilder, get_di_scope(g, var->parent_scope),
2200 buf_ptr(&var->name), fn_walk->data.vars.import->di_file,
2201 buf_ptr(&var->name), fn_walk->data.vars.import->data.structure.root_struct->di_file,
22012202 (unsigned)(var->decl_node->line + 1),
22022203 dest_ty->di_type, !g->strip_debug_symbols, 0, di_arg_index + 1);
22032204 }
......@@ -5801,7 +5802,6 @@ static LLVMValueRef pack_const_int(CodeGen *g, LLVMTypeRef big_int_type_ref, Con
58015802 case ZigTypeIdNull:
58025803 case ZigTypeIdErrorUnion:
58035804 case ZigTypeIdErrorSet:
5804 case ZigTypeIdNamespace:
58055805 case ZigTypeIdBoundFn:
58065806 case ZigTypeIdArgTuple:
58075807 case ZigTypeIdVoid:
......@@ -6401,7 +6401,6 @@ static LLVMValueRef gen_const_val(CodeGen *g, ConstExprValue *const_val, const c
64016401 case ZigTypeIdComptimeInt:
64026402 case ZigTypeIdUndefined:
64036403 case ZigTypeIdNull:
6404 case ZigTypeIdNamespace:
64056404 case ZigTypeIdBoundFn:
64066405 case ZigTypeIdArgTuple:
64076406 case ZigTypeIdOpaque:
......@@ -6507,12 +6506,12 @@ static void gen_global_var(CodeGen *g, ZigVar *var, LLVMValueRef init_val,
65076506 assert(var->gen_is_const);
65086507 assert(type_entry);
65096508
6510 ImportTableEntry *import = get_scope_import(var->parent_scope);
6509 ZigType *import = get_scope_import(var->parent_scope);
65116510 assert(import);
65126511
65136512 bool is_local_to_unit = true;
65146513 ZigLLVMCreateGlobalVariable(g->dbuilder, get_di_scope(g, var->parent_scope), buf_ptr(&var->name),
6515 buf_ptr(&var->name), import->di_file,
6514 buf_ptr(&var->name), import->data.structure.root_struct->di_file,
65166515 (unsigned)(var->decl_node->line + 1),
65176516 type_entry->di_type, is_local_to_unit);
65186517
......@@ -6768,7 +6767,7 @@ static void do_code_gen(CodeGen *g) {
67686767 *slot = build_alloca(g, slot_type, "", alignment_bytes);
67696768 }
67706769
6771 ImportTableEntry *import = get_scope_import(&fn_table_entry->fndef_scope->base);
6770 ZigType *import = get_scope_import(&fn_table_entry->fndef_scope->base);
67726771
67736772 unsigned gen_i_init = want_first_arg_sret(g, fn_type_id) ? 1 : 0;
67746773
......@@ -6800,7 +6799,7 @@ static void do_code_gen(CodeGen *g) {
68006799 var->value_ref = build_alloca(g, var->var_type, buf_ptr(&var->name), var->align_bytes);
68016800
68026801 var->di_loc_var = ZigLLVMCreateAutoVariable(g->dbuilder, get_di_scope(g, var->parent_scope),
6803 buf_ptr(&var->name), import->di_file, (unsigned)(var->decl_node->line + 1),
6802 buf_ptr(&var->name), import->data.structure.root_struct->di_file, (unsigned)(var->decl_node->line + 1),
68046803 var->var_type->di_type, !g->strip_debug_symbols, 0);
68056804
68066805 } else if (is_c_abi) {
......@@ -6824,7 +6823,7 @@ static void do_code_gen(CodeGen *g) {
68246823 }
68256824 if (var->decl_node) {
68266825 var->di_loc_var = ZigLLVMCreateParameterVariable(g->dbuilder, get_di_scope(g, var->parent_scope),
6827 buf_ptr(&var->name), import->di_file,
6826 buf_ptr(&var->name), import->data.structure.root_struct->di_file,
68286827 (unsigned)(var->decl_node->line + 1),
68296828 gen_type->di_type, !g->strip_debug_symbols, 0, (unsigned)(var->gen_arg_index + 1));
68306829 }
......@@ -6972,12 +6971,6 @@ static void define_builtin_types(CodeGen *g) {
69726971 entry->zero_bits = true;
69736972 g->builtin_types.entry_invalid = entry;
69746973 }
6975 {
6976 ZigType *entry = new_type_table_entry(ZigTypeIdNamespace);
6977 buf_init_from_str(&entry->name, "(namespace)");
6978 entry->zero_bits = true;
6979 g->builtin_types.entry_namespace = entry;
6980 }
69816974 {
69826975 ZigType *entry = new_type_table_entry(ZigTypeIdComptimeFloat);
69836976 buf_init_from_str(&entry->name, "comptime_float");
......@@ -7131,7 +7124,8 @@ static void define_builtin_types(CodeGen *g) {
71317124 g->builtin_types.entry_i64 = get_int_type(g, true, 64);
71327125
71337126 {
7134 g->builtin_types.entry_c_void = get_opaque_type(g, nullptr, nullptr, "c_void");
7127 g->builtin_types.entry_c_void = get_opaque_type(g, nullptr, nullptr, "c_void",
7128 buf_create_from_str("c_void"));
71357129 g->primitive_type_table.put(&g->builtin_types.entry_c_void->name, g->builtin_types.entry_c_void);
71367130 }
71377131
......@@ -7471,7 +7465,6 @@ Buf *codegen_generate_builtin_source(CodeGen *g) {
74717465 " Enum: Enum,\n"
74727466 " Union: Union,\n"
74737467 " Fn: Fn,\n"
7474 " Namespace: void,\n"
74757468 " BoundFn: Fn,\n"
74767469 " ArgTuple: void,\n"
74777470 " Opaque: void,\n"
......@@ -7752,12 +7745,12 @@ static Error define_builtin_compile_vars(CodeGen *g) {
77527745
77537746 assert(g->root_package);
77547747 assert(g->std_package);
7755 g->compile_var_package = new_package(buf_ptr(this_dir), builtin_zig_basename);
7748 g->compile_var_package = new_package(buf_ptr(this_dir), builtin_zig_basename, "builtin");
77567749 g->root_package->package_table.put(buf_create_from_str("builtin"), g->compile_var_package);
77577750 g->std_package->package_table.put(buf_create_from_str("builtin"), g->compile_var_package);
77587751 g->std_package->package_table.put(buf_create_from_str("std"), g->std_package);
7759 g->compile_var_import = add_source_file(g, g->compile_var_package, builtin_zig_path, contents);
7760 scan_import(g, g->compile_var_import);
7752 g->compile_var_import = add_source_file(g, g->compile_var_package, builtin_zig_path, contents,
7753 SourceKindPkgMain);
77617754
77627755 return ErrorNone;
77637756}
......@@ -7949,17 +7942,20 @@ void codegen_translate_c(CodeGen *g, Buf *full_path) {
79497942 Buf *src_dirname = buf_alloc();
79507943 os_path_split(full_path, src_dirname, src_basename);
79517944
7952 ImportTableEntry *import = allocate<ImportTableEntry>(1);
7953 import->source_code = nullptr;
7954 import->path = full_path;
7955 g->root_import = import;
7956 import->decls_scope = create_decls_scope(g, nullptr, nullptr, nullptr, import);
7945 Buf noextname = BUF_INIT;
7946 os_path_extname(src_basename, &noextname, nullptr);
79577947
79587948 detect_libc(g);
79597949
79607950 init(g);
79617951
7962 import->di_file = ZigLLVMCreateFile(g->dbuilder, buf_ptr(src_basename), buf_ptr(src_dirname));
7952 RootStruct *root_struct = allocate<RootStruct>(1);
7953 root_struct->source_code = nullptr;
7954 root_struct->path = full_path;
7955 root_struct->di_file = ZigLLVMCreateFile(g->dbuilder, buf_ptr(src_basename), buf_ptr(src_dirname));
7956
7957 ZigType *import = get_root_container_type(g, buf_ptr(&noextname), &noextname, root_struct);
7958 g->root_import = import;
79637959
79647960 ZigList<ErrorMsg *> errors = {0};
79657961 Error err = parse_h_file(import, &errors, buf_ptr(full_path), g, nullptr);
......@@ -7978,7 +7974,7 @@ void codegen_translate_c(CodeGen *g, Buf *full_path) {
79787974 }
79797975}
79807976
7981static ImportTableEntry *add_special_code(CodeGen *g, PackageTableEntry *package, const char *basename) {
7977static ZigType *add_special_code(CodeGen *g, ZigPackage *package, const char *basename) {
79827978 Buf *code_basename = buf_create_from_str(basename);
79837979 Buf path_to_code_src = BUF_INIT;
79847980 os_path_join(g->zig_std_special_dir, code_basename, &path_to_code_src);
......@@ -7992,21 +7988,21 @@ static ImportTableEntry *add_special_code(CodeGen *g, PackageTableEntry *package
79927988 zig_panic("unable to open '%s': %s\n", buf_ptr(&path_to_code_src), err_str(err));
79937989 }
79947990
7995 return add_source_file(g, package, resolved_path, import_code);
7991 return add_source_file(g, package, resolved_path, import_code, SourceKindPkgMain);
79967992}
79977993
7998static PackageTableEntry *create_bootstrap_pkg(CodeGen *g, PackageTableEntry *pkg_with_main) {
7999 PackageTableEntry *package = codegen_create_package(g, buf_ptr(g->zig_std_special_dir), "bootstrap.zig");
7994static ZigPackage *create_bootstrap_pkg(CodeGen *g, ZigPackage *pkg_with_main) {
7995 ZigPackage *package = codegen_create_package(g, buf_ptr(g->zig_std_special_dir), "bootstrap.zig", "std.special");
80007996 package->package_table.put(buf_create_from_str("@root"), pkg_with_main);
80017997 return package;
80027998}
80037999
8004static PackageTableEntry *create_test_runner_pkg(CodeGen *g) {
8005 return codegen_create_package(g, buf_ptr(g->zig_std_special_dir), "test_runner.zig");
8000static ZigPackage *create_test_runner_pkg(CodeGen *g) {
8001 return codegen_create_package(g, buf_ptr(g->zig_std_special_dir), "test_runner.zig", "std.special");
80068002}
80078003
8008static PackageTableEntry *create_panic_pkg(CodeGen *g) {
8009 return codegen_create_package(g, buf_ptr(g->zig_std_special_dir), "panic.zig");
8004static ZigPackage *create_panic_pkg(CodeGen *g) {
8005 return codegen_create_package(g, buf_ptr(g->zig_std_special_dir), "panic.zig", "std.special");
80108006}
80118007
80128008static void create_test_compile_var_and_add_test_runner(CodeGen *g) {
......@@ -8090,24 +8086,24 @@ static void gen_root_source(CodeGen *g) {
80908086 exit(1);
80918087 }
80928088
8093 g->root_import = add_source_file(g, g->root_package, resolved_path, source_code);
8089 ZigType *root_import_alias = add_source_file(g, g->root_package, resolved_path, source_code, SourceKindRoot);
8090 assert(root_import_alias == g->root_import);
80948091
80958092 assert(g->root_out_name);
80968093 assert(g->out_type != OutTypeUnknown);
80978094
80988095 {
80998096 // Zig has lazy top level definitions. Here we semantically analyze the panic function.
8100 ImportTableEntry *import_with_panic;
8097 ZigType *import_with_panic;
81018098 if (g->have_pub_panic) {
81028099 import_with_panic = g->root_import;
81038100 } else {
81048101 g->panic_package = create_panic_pkg(g);
81058102 import_with_panic = add_special_code(g, g->panic_package, "panic.zig");
81068103 }
8107 scan_import(g, import_with_panic);
8108 Tld *panic_tld = find_decl(g, &import_with_panic->decls_scope->base, buf_create_from_str("panic"));
8104 Tld *panic_tld = find_decl(g, &get_container_scope(import_with_panic)->base, buf_create_from_str("panic"));
81098105 assert(panic_tld != nullptr);
8110 resolve_top_level_decl(g, panic_tld, false, nullptr);
8106 resolve_top_level_decl(g, panic_tld, nullptr);
81118107 }
81128108
81138109
......@@ -8359,7 +8355,6 @@ static void prepend_c_type_to_decl_list(CodeGen *g, GenH *gen_h, ZigType *type_e
83598355 case ZigTypeIdComptimeInt:
83608356 case ZigTypeIdUndefined:
83618357 case ZigTypeIdNull:
8362 case ZigTypeIdNamespace:
83638358 case ZigTypeIdBoundFn:
83648359 case ZigTypeIdArgTuple:
83658360 case ZigTypeIdErrorUnion:
......@@ -8507,19 +8502,19 @@ static void get_c_type(CodeGen *g, GenH *gen_h, ZigType *type_entry, Buf *out_bu
85078502 case ZigTypeIdOpaque:
85088503 {
85098504 buf_init_from_str(out_buf, "struct ");
8510 buf_append_buf(out_buf, &type_entry->name);
8505 buf_append_buf(out_buf, type_h_name(type_entry));
85118506 return;
85128507 }
85138508 case ZigTypeIdUnion:
85148509 {
85158510 buf_init_from_str(out_buf, "union ");
8516 buf_append_buf(out_buf, &type_entry->name);
8511 buf_append_buf(out_buf, type_h_name(type_entry));
85178512 return;
85188513 }
85198514 case ZigTypeIdEnum:
85208515 {
85218516 buf_init_from_str(out_buf, "enum ");
8522 buf_append_buf(out_buf, &type_entry->name);
8517 buf_append_buf(out_buf, type_h_name(type_entry));
85238518 return;
85248519 }
85258520 case ZigTypeIdArray:
......@@ -8542,7 +8537,6 @@ static void get_c_type(CodeGen *g, GenH *gen_h, ZigType *type_entry, Buf *out_bu
85428537 case ZigTypeIdInvalid:
85438538 case ZigTypeIdMetaType:
85448539 case ZigTypeIdBoundFn:
8545 case ZigTypeIdNamespace:
85468540 case ZigTypeIdComptimeFloat:
85478541 case ZigTypeIdComptimeInt:
85488542 case ZigTypeIdUndefined:
......@@ -8615,10 +8609,17 @@ static void gen_h_file(CodeGen *g) {
86158609 Buf return_type_c = BUF_INIT;
86168610 get_c_type(g, gen_h, fn_type_id->return_type, &return_type_c);
86178611
8612 Buf *symbol_name;
8613 if (fn_table_entry->export_list.length == 0) {
8614 symbol_name = &fn_table_entry->symbol_name;
8615 } else {
8616 FnExport *fn_export = &fn_table_entry->export_list.items[0];
8617 symbol_name = &fn_export->name;
8618 }
86188619 buf_appendf(&h_buf, "%s %s %s(",
86198620 buf_ptr(export_macro),
86208621 buf_ptr(&return_type_c),
8621 buf_ptr(&fn_table_entry->symbol_name));
8622 buf_ptr(symbol_name));
86228623
86238624 Buf param_type_c = BUF_INIT;
86248625 if (fn_type_id->param_count > 0) {
......@@ -8694,7 +8695,6 @@ static void gen_h_file(CodeGen *g) {
86948695 case ZigTypeIdNull:
86958696 case ZigTypeIdErrorUnion:
86968697 case ZigTypeIdErrorSet:
8697 case ZigTypeIdNamespace:
86988698 case ZigTypeIdBoundFn:
86998699 case ZigTypeIdArgTuple:
87008700 case ZigTypeIdOptional:
......@@ -8704,7 +8704,7 @@ static void gen_h_file(CodeGen *g) {
87048704 zig_unreachable();
87058705 case ZigTypeIdEnum:
87068706 if (type_entry->data.enumeration.layout == ContainerLayoutExtern) {
8707 fprintf(out_h, "enum %s {\n", buf_ptr(&type_entry->name));
8707 fprintf(out_h, "enum %s {\n", buf_ptr(type_h_name(type_entry)));
87088708 for (uint32_t field_i = 0; field_i < type_entry->data.enumeration.src_field_count; field_i += 1) {
87098709 TypeEnumField *enum_field = &type_entry->data.enumeration.fields[field_i];
87108710 Buf *value_buf = buf_alloc();
......@@ -8717,12 +8717,12 @@ static void gen_h_file(CodeGen *g) {
87178717 }
87188718 fprintf(out_h, "};\n\n");
87198719 } else {
8720 fprintf(out_h, "enum %s;\n", buf_ptr(&type_entry->name));
8720 fprintf(out_h, "enum %s;\n", buf_ptr(type_h_name(type_entry)));
87218721 }
87228722 break;
87238723 case ZigTypeIdStruct:
87248724 if (type_entry->data.structure.layout == ContainerLayoutExtern) {
8725 fprintf(out_h, "struct %s {\n", buf_ptr(&type_entry->name));
8725 fprintf(out_h, "struct %s {\n", buf_ptr(type_h_name(type_entry)));
87268726 for (uint32_t field_i = 0; field_i < type_entry->data.structure.src_field_count; field_i += 1) {
87278727 TypeStructField *struct_field = &type_entry->data.structure.fields[field_i];
87288728
......@@ -8740,12 +8740,12 @@ static void gen_h_file(CodeGen *g) {
87408740 }
87418741 fprintf(out_h, "};\n\n");
87428742 } else {
8743 fprintf(out_h, "struct %s;\n", buf_ptr(&type_entry->name));
8743 fprintf(out_h, "struct %s;\n", buf_ptr(type_h_name(type_entry)));
87448744 }
87458745 break;
87468746 case ZigTypeIdUnion:
87478747 if (type_entry->data.unionation.layout == ContainerLayoutExtern) {
8748 fprintf(out_h, "union %s {\n", buf_ptr(&type_entry->name));
8748 fprintf(out_h, "union %s {\n", buf_ptr(type_h_name(type_entry)));
87498749 for (uint32_t field_i = 0; field_i < type_entry->data.unionation.src_field_count; field_i += 1) {
87508750 TypeUnionField *union_field = &type_entry->data.unionation.fields[field_i];
87518751
......@@ -8755,11 +8755,11 @@ static void gen_h_file(CodeGen *g) {
87558755 }
87568756 fprintf(out_h, "};\n\n");
87578757 } else {
8758 fprintf(out_h, "union %s;\n", buf_ptr(&type_entry->name));
8758 fprintf(out_h, "union %s;\n", buf_ptr(type_h_name(type_entry)));
87598759 }
87608760 break;
87618761 case ZigTypeIdOpaque:
8762 fprintf(out_h, "struct %s;\n\n", buf_ptr(&type_entry->name));
8762 fprintf(out_h, "struct %s;\n\n", buf_ptr(type_h_name(type_entry)));
87638763 break;
87648764 }
87658765 }
......@@ -8793,7 +8793,7 @@ void codegen_add_time_event(CodeGen *g, const char *name) {
87938793 g->timing_events.append({os_get_time(), name});
87948794}
87958795
8796static void add_cache_pkg(CodeGen *g, CacheHash *ch, PackageTableEntry *pkg) {
8796static void add_cache_pkg(CodeGen *g, CacheHash *ch, ZigPackage *pkg) {
87978797 if (buf_len(&pkg->root_src_path) == 0)
87988798 return;
87998799
......@@ -9047,9 +9047,11 @@ void codegen_build_and_link(CodeGen *g) {
90479047 codegen_add_time_event(g, "Done");
90489048}
90499049
9050PackageTableEntry *codegen_create_package(CodeGen *g, const char *root_src_dir, const char *root_src_path) {
9050ZigPackage *codegen_create_package(CodeGen *g, const char *root_src_dir, const char *root_src_path,
9051 const char *pkg_path)
9052{
90519053 init(g);
9052 PackageTableEntry *pkg = new_package(root_src_dir, root_src_path);
9054 ZigPackage *pkg = new_package(root_src_dir, root_src_path, pkg_path);
90539055 if (g->std_package != nullptr) {
90549056 assert(g->compile_var_package != nullptr);
90559057 pkg->package_table.put(buf_create_from_str("std"), g->std_package);
src/codegen.hpp+2-1
......@@ -48,7 +48,8 @@ void codegen_print_timing_report(CodeGen *g, FILE *f);
4848void codegen_link(CodeGen *g);
4949void codegen_build_and_link(CodeGen *g);
5050
51PackageTableEntry *codegen_create_package(CodeGen *g, const char *root_src_dir, const char *root_src_path);
51ZigPackage *codegen_create_package(CodeGen *g, const char *root_src_dir, const char *root_src_path,
52 const char *pkg_path);
5253void codegen_add_assembly(CodeGen *g, Buf *path);
5354void codegen_add_object(CodeGen *g, Buf *object_path);
5455
src/ir.cpp+124-129
......@@ -258,7 +258,6 @@ static bool types_have_same_zig_comptime_repr(ZigType *a, ZigType *b) {
258258 case ZigTypeIdPointer:
259259 case ZigTypeIdUndefined:
260260 case ZigTypeIdNull:
261 case ZigTypeIdNamespace:
262261 case ZigTypeIdBoundFn:
263262 case ZigTypeIdErrorSet:
264263 case ZigTypeIdOpaque:
......@@ -1123,11 +1122,11 @@ static IrInstruction *ir_create_const_fn(IrBuilder *irb, Scope *scope, AstNode *
11231122 return &const_instruction->base;
11241123}
11251124
1126static IrInstruction *ir_build_const_import(IrBuilder *irb, Scope *scope, AstNode *source_node, ImportTableEntry *import) {
1125static IrInstruction *ir_build_const_import(IrBuilder *irb, Scope *scope, AstNode *source_node, ZigType *import) {
11271126 IrInstructionConst *const_instruction = ir_build_instruction<IrInstructionConst>(irb, scope, source_node);
1128 const_instruction->base.value.type = irb->codegen->builtin_types.entry_namespace;
1127 const_instruction->base.value.type = irb->codegen->builtin_types.entry_type;
11291128 const_instruction->base.value.special = ConstValSpecialStatic;
1130 const_instruction->base.value.data.x_import = import;
1129 const_instruction->base.value.data.x_type = import;
11311130 return &const_instruction->base;
11321131}
11331132
......@@ -3824,7 +3823,7 @@ static IrInstruction *ir_gen_symbol(IrBuilder *irb, Scope *scope, AstNode *node,
38243823 if (tld)
38253824 return ir_build_decl_ref(irb, scope, node, tld, lval);
38263825
3827 if (node->owner->any_imports_failed) {
3826 if (get_container_scope(node->owner)->any_imports_failed) {
38283827 // skip the error message since we had a failing import in this file
38293828 // if an import breaks we don't need redundant undeclared identifier errors
38303829 return irb->codegen->invalid_instruction;
......@@ -6609,20 +6608,32 @@ static bool render_instance_name_recursive(CodeGen *codegen, Buf *name, Scope *o
66096608 return true;
66106609}
66116610
6612static Buf *get_anon_type_name(CodeGen *codegen, IrExecutable *exec, const char *kind_name, AstNode *source_node) {
6611static Buf *get_anon_type_name(CodeGen *codegen, IrExecutable *exec, const char *kind_name,
6612 Scope *scope, AstNode *source_node, Buf *out_bare_name)
6613{
66136614 if (exec->name) {
6614 return exec->name;
6615 ZigType *import = get_scope_import(scope);
6616 Buf *namespace_name = buf_create_from_buf(&import->name);
6617 if (buf_len(namespace_name) != 0) buf_append_char(namespace_name, NAMESPACE_SEP_CHAR);
6618 buf_append_buf(namespace_name, exec->name);
6619 buf_init_from_buf(out_bare_name, exec->name);
6620 return namespace_name;
66156621 } else if (exec->name_fn != nullptr) {
66166622 Buf *name = buf_alloc();
66176623 buf_append_buf(name, &exec->name_fn->symbol_name);
66186624 buf_appendf(name, "(");
66196625 render_instance_name_recursive(codegen, name, &exec->name_fn->fndef_scope->base, exec->begin_scope);
66206626 buf_appendf(name, ")");
6627 buf_init_from_buf(out_bare_name, name);
66216628 return name;
66226629 } else {
6623 //Note: C-imports do not have valid location information
6624 return buf_sprintf("(anonymous %s at %s:%" ZIG_PRI_usize ":%" ZIG_PRI_usize ")", kind_name,
6625 (source_node->owner->path != nullptr) ? buf_ptr(source_node->owner->path) : "(null)", source_node->line + 1, source_node->column + 1);
6630 ZigType *import = get_scope_import(scope);
6631 Buf *namespace_name = buf_create_from_buf(&import->name);
6632 if (buf_len(namespace_name) != 0) buf_append_char(namespace_name, NAMESPACE_SEP_CHAR);
6633 buf_appendf(namespace_name, "%s:%" ZIG_PRI_usize ":%" ZIG_PRI_usize, kind_name,
6634 source_node->line + 1, source_node->column + 1);
6635 buf_init_from_buf(out_bare_name, namespace_name);
6636 return namespace_name;
66266637 }
66276638}
66286639
......@@ -6630,24 +6641,23 @@ static IrInstruction *ir_gen_container_decl(IrBuilder *irb, Scope *parent_scope,
66306641 assert(node->type == NodeTypeContainerDecl);
66316642
66326643 ContainerKind kind = node->data.container_decl.kind;
6633 Buf *name = get_anon_type_name(irb->codegen, irb->exec, container_string(kind), node);
6634
6635 VisibMod visib_mod = VisibModPub;
6636 TldContainer *tld_container = allocate<TldContainer>(1);
6637 init_tld(&tld_container->base, TldIdContainer, name, visib_mod, node, parent_scope);
6644 Buf *bare_name = buf_alloc();
6645 Buf *name = get_anon_type_name(irb->codegen, irb->exec, container_string(kind), parent_scope, node, bare_name);
66386646
66396647 ContainerLayout layout = node->data.container_decl.layout;
66406648 ZigType *container_type = get_partial_container_type(irb->codegen, parent_scope,
6641 kind, node, buf_ptr(name), layout);
6649 kind, node, buf_ptr(name), bare_name, layout);
66426650 ScopeDecls *child_scope = get_container_scope(container_type);
66436651
6644 tld_container->type_entry = container_type;
6645 tld_container->decls_scope = child_scope;
6646
66476652 for (size_t i = 0; i < node->data.container_decl.decls.length; i += 1) {
66486653 AstNode *child_node = node->data.container_decl.decls.at(i);
66496654 scan_decls(irb->codegen, child_scope, child_node);
66506655 }
6656
6657 TldContainer *tld_container = allocate<TldContainer>(1);
6658 init_tld(&tld_container->base, TldIdContainer, bare_name, VisibModPub, node, parent_scope);
6659 tld_container->type_entry = container_type;
6660 tld_container->decls_scope = child_scope;
66516661 irb->codegen->resolve_queue.append(&tld_container->base);
66526662
66536663 // Add this to the list to mark as invalid if analyzing this exec fails.
......@@ -6732,7 +6742,8 @@ static IrInstruction *ir_gen_err_set_decl(IrBuilder *irb, Scope *parent_scope, A
67326742
67336743 uint32_t err_count = node->data.err_set_decl.decls.length;
67346744
6735 Buf *type_name = get_anon_type_name(irb->codegen, irb->exec, "error set", node);
6745 Buf bare_name = BUF_INIT;
6746 Buf *type_name = get_anon_type_name(irb->codegen, irb->exec, "error", parent_scope, node, &bare_name);
67366747 ZigType *err_set_type = new_type_table_entry(ZigTypeIdErrorSet);
67376748 buf_init_from_buf(&err_set_type->name, type_name);
67386749 err_set_type->data.error_set.err_count = err_count;
......@@ -12065,7 +12076,6 @@ static IrInstruction *ir_analyze_bin_op_cmp(IrAnalyze *ira, IrInstructionBinOp *
1206512076 case ZigTypeIdErrorSet:
1206612077 case ZigTypeIdFn:
1206712078 case ZigTypeIdOpaque:
12068 case ZigTypeIdNamespace:
1206912079 case ZigTypeIdBoundFn:
1207012080 case ZigTypeIdArgTuple:
1207112081 case ZigTypeIdPromise:
......@@ -13407,7 +13417,6 @@ static IrInstruction *ir_analyze_instruction_export(IrAnalyze *ira, IrInstructio
1340713417 case ZigTypeIdOptional:
1340813418 case ZigTypeIdErrorUnion:
1340913419 case ZigTypeIdErrorSet:
13410 case ZigTypeIdNamespace:
1341113420 case ZigTypeIdBoundFn:
1341213421 case ZigTypeIdArgTuple:
1341313422 case ZigTypeIdOpaque:
......@@ -13432,7 +13441,6 @@ static IrInstruction *ir_analyze_instruction_export(IrAnalyze *ira, IrInstructio
1343213441 case ZigTypeIdErrorSet:
1343313442 case ZigTypeIdVector:
1343413443 zig_panic("TODO export const value of type %s", buf_ptr(&target->value.type->name));
13435 case ZigTypeIdNamespace:
1343613444 case ZigTypeIdBoundFn:
1343713445 case ZigTypeIdArgTuple:
1343813446 case ZigTypeIdOpaque:
......@@ -14616,7 +14624,6 @@ static IrInstruction *ir_analyze_maybe(IrAnalyze *ira, IrInstructionUnOp *un_op_
1461614624 case ZigTypeIdEnum:
1461714625 case ZigTypeIdUnion:
1461814626 case ZigTypeIdFn:
14619 case ZigTypeIdNamespace:
1462014627 case ZigTypeIdBoundFn:
1462114628 case ZigTypeIdArgTuple:
1462214629 case ZigTypeIdPromise:
......@@ -15368,7 +15375,7 @@ static IrInstruction *ir_analyze_container_member_access_inner(IrAnalyze *ira,
1536815375 auto entry = container_scope->decl_table.maybe_get(field_name);
1536915376 Tld *tld = entry ? entry->value : nullptr;
1537015377 if (tld && tld->id == TldIdFn) {
15371 resolve_top_level_decl(ira->codegen, tld, false, source_instr->source_node);
15378 resolve_top_level_decl(ira->codegen, tld, source_instr->source_node);
1537215379 if (tld->resolution == TldResolutionInvalid)
1537315380 return ira->codegen->invalid_instruction;
1537415381 TldFn *tld_fn = (TldFn *)tld;
......@@ -15557,8 +15564,7 @@ static void add_link_lib_symbol(IrAnalyze *ira, Buf *lib_name, Buf *symbol_name,
1555715564
1555815565
1555915566static IrInstruction *ir_analyze_decl_ref(IrAnalyze *ira, IrInstruction *source_instruction, Tld *tld) {
15560 bool pointer_only = false;
15561 resolve_top_level_decl(ira->codegen, tld, pointer_only, source_instruction->source_node);
15567 resolve_top_level_decl(ira->codegen, tld, source_instruction->source_node);
1556215568 if (tld->resolution == TldResolutionInvalid)
1556315569 return ira->codegen->invalid_instruction;
1556415570
......@@ -15735,12 +15741,17 @@ static IrInstruction *ir_analyze_instruction_field_ptr(IrAnalyze *ira, IrInstruc
1573515741 }
1573615742 }
1573715743 ScopeDecls *container_scope = get_container_scope(child_type);
15738 if (container_scope != nullptr) {
15739 auto entry = container_scope->decl_table.maybe_get(field_name);
15740 Tld *tld = entry ? entry->value : nullptr;
15741 if (tld) {
15742 return ir_analyze_decl_ref(ira, &field_ptr_instruction->base, tld);
15744 Tld *tld = find_container_decl(ira->codegen, container_scope, field_name);
15745 if (tld) {
15746 if (tld->visib_mod == VisibModPrivate &&
15747 tld->import != get_scope_import(field_ptr_instruction->base.scope))
15748 {
15749 ErrorMsg *msg = ir_add_error(ira, &field_ptr_instruction->base,
15750 buf_sprintf("'%s' is private", buf_ptr(field_name)));
15751 add_error_note(ira->codegen, msg, tld->source_node, buf_sprintf("declared here"));
15752 return ira->codegen->invalid_instruction;
1574315753 }
15754 return ir_analyze_decl_ref(ira, &field_ptr_instruction->base, tld);
1574415755 }
1574515756 if (child_type->id == ZigTypeIdUnion &&
1574615757 (child_type->data.unionation.decl_node->data.container_decl.init_arg_expr != nullptr ||
......@@ -15758,9 +15769,11 @@ static IrInstruction *ir_analyze_instruction_field_ptr(IrAnalyze *ira, IrInstruc
1575815769 ConstPtrMutComptimeConst, ptr_is_const, ptr_is_volatile, 0);
1575915770 }
1576015771 }
15772 const char *container_name = (child_type == ira->codegen->root_import) ?
15773 "root source file" : buf_ptr(buf_sprintf("container '%s'", buf_ptr(&child_type->name)));
1576115774 ir_add_error(ira, &field_ptr_instruction->base,
15762 buf_sprintf("container '%s' has no member called '%s'",
15763 buf_ptr(&child_type->name), buf_ptr(field_name)));
15775 buf_sprintf("%s has no member called '%s'",
15776 container_name, buf_ptr(field_name)));
1576415777 return ira->codegen->invalid_instruction;
1576515778 } else if (child_type->id == ZigTypeIdErrorSet) {
1576615779 ErrorTableEntry *err_entry;
......@@ -15971,37 +15984,6 @@ static IrInstruction *ir_analyze_instruction_field_ptr(IrAnalyze *ira, IrInstruc
1597115984 buf_sprintf("type '%s' does not support field access", buf_ptr(&child_type->name)));
1597215985 return ira->codegen->invalid_instruction;
1597315986 }
15974 } else if (container_type->id == ZigTypeIdNamespace) {
15975 assert(container_ptr->value.type->id == ZigTypeIdPointer);
15976 ConstExprValue *container_ptr_val = ir_resolve_const(ira, container_ptr, UndefBad);
15977 if (!container_ptr_val)
15978 return ira->codegen->invalid_instruction;
15979
15980 ConstExprValue *namespace_val = const_ptr_pointee(ira, ira->codegen, container_ptr_val,
15981 field_ptr_instruction->base.source_node);
15982 if (namespace_val == nullptr)
15983 return ira->codegen->invalid_instruction;
15984 assert(namespace_val->special == ConstValSpecialStatic);
15985
15986 ImportTableEntry *namespace_import = namespace_val->data.x_import;
15987
15988 Tld *tld = find_decl(ira->codegen, &namespace_import->decls_scope->base, field_name);
15989 if (tld) {
15990 if (tld->visib_mod == VisibModPrivate &&
15991 tld->import != source_node->owner)
15992 {
15993 ErrorMsg *msg = ir_add_error_node(ira, source_node,
15994 buf_sprintf("'%s' is private", buf_ptr(field_name)));
15995 add_error_note(ira->codegen, msg, tld->source_node, buf_sprintf("declared here"));
15996 return ira->codegen->invalid_instruction;
15997 }
15998 return ir_analyze_decl_ref(ira, &field_ptr_instruction->base, tld);
15999 } else {
16000 const char *import_name = namespace_import->path ? buf_ptr(namespace_import->path) : "(C import)";
16001 ir_add_error_node(ira, source_node,
16002 buf_sprintf("no member named '%s' in '%s'", buf_ptr(field_name), import_name));
16003 return ira->codegen->invalid_instruction;
16004 }
1600515987 } else {
1600615988 ir_add_error_node(ira, field_ptr_instruction->base.source_node,
1600715989 buf_sprintf("type '%s' does not support field access", buf_ptr(&container_type->name)));
......@@ -16281,7 +16263,6 @@ static IrInstruction *ir_analyze_instruction_slice_type(IrAnalyze *ira,
1628116263 case ZigTypeIdEnum:
1628216264 case ZigTypeIdUnion:
1628316265 case ZigTypeIdFn:
16284 case ZigTypeIdNamespace:
1628516266 case ZigTypeIdBoundFn:
1628616267 case ZigTypeIdPromise:
1628716268 case ZigTypeIdVector:
......@@ -16402,7 +16383,6 @@ static IrInstruction *ir_analyze_instruction_array_type(IrAnalyze *ira,
1640216383 case ZigTypeIdEnum:
1640316384 case ZigTypeIdUnion:
1640416385 case ZigTypeIdFn:
16405 case ZigTypeIdNamespace:
1640616386 case ZigTypeIdBoundFn:
1640716387 case ZigTypeIdPromise:
1640816388 case ZigTypeIdVector:
......@@ -16452,7 +16432,6 @@ static IrInstruction *ir_analyze_instruction_size_of(IrAnalyze *ira,
1645216432 case ZigTypeIdComptimeInt:
1645316433 case ZigTypeIdBoundFn:
1645416434 case ZigTypeIdMetaType:
16455 case ZigTypeIdNamespace:
1645616435 case ZigTypeIdArgTuple:
1645716436 case ZigTypeIdOpaque:
1645816437 ir_add_error_node(ira, size_of_instruction->base.source_node,
......@@ -16860,7 +16839,6 @@ static IrInstruction *ir_analyze_instruction_switch_target(IrAnalyze *ira,
1686016839 case ZigTypeIdPointer:
1686116840 case ZigTypeIdPromise:
1686216841 case ZigTypeIdFn:
16863 case ZigTypeIdNamespace:
1686416842 case ZigTypeIdErrorSet: {
1686516843 if (pointee_val) {
1686616844 IrInstruction *result = ir_const(ira, &switch_target_instruction->base, nullptr);
......@@ -17009,25 +16987,29 @@ static IrInstruction *ir_analyze_instruction_import(IrAnalyze *ira, IrInstructio
1700916987 return ira->codegen->invalid_instruction;
1701016988
1701116989 AstNode *source_node = import_instruction->base.source_node;
17012 ImportTableEntry *import = source_node->owner;
16990 ZigType *import = source_node->owner;
1701316991
1701416992 Buf *import_target_path;
1701516993 Buf *search_dir;
17016 assert(import->package);
17017 PackageTableEntry *target_package;
17018 auto package_entry = import->package->package_table.maybe_get(import_target_str);
16994 assert(import->data.structure.root_struct->package);
16995 ZigPackage *target_package;
16996 auto package_entry = import->data.structure.root_struct->package->package_table.maybe_get(import_target_str);
16997 SourceKind source_kind;
1701916998 if (package_entry) {
1702016999 target_package = package_entry->value;
1702117000 import_target_path = &target_package->root_src_path;
1702217001 search_dir = &target_package->root_src_dir;
17002 source_kind = SourceKindPkgMain;
1702317003 } else {
1702417004 // try it as a filename
17025 target_package = import->package;
17005 target_package = import->data.structure.root_struct->package;
1702617006 import_target_path = import_target_str;
1702717007
1702817008 // search relative to importing file
1702917009 search_dir = buf_alloc();
17030 os_path_dirname(import->path, search_dir);
17010 os_path_dirname(import->data.structure.root_struct->path, search_dir);
17011
17012 source_kind = SourceKindNonRoot;
1703117013 }
1703217014
1703317015 Buf full_path = BUF_INIT;
......@@ -17041,10 +17023,7 @@ static IrInstruction *ir_analyze_instruction_import(IrAnalyze *ira, IrInstructio
1704117023
1704217024 auto import_entry = ira->codegen->import_table.maybe_get(resolved_path);
1704317025 if (import_entry) {
17044 IrInstruction *result = ir_const(ira, &import_instruction->base,
17045 ira->codegen->builtin_types.entry_namespace);
17046 result->value.data.x_import = import_entry->value;
17047 return result;
17026 return ir_const_type(ira, &import_instruction->base, import_entry->value);
1704817027 }
1704917028
1705017029 if ((err = file_fetch(ira->codegen, resolved_path, import_code))) {
......@@ -17059,13 +17038,9 @@ static IrInstruction *ir_analyze_instruction_import(IrAnalyze *ira, IrInstructio
1705917038 }
1706017039 }
1706117040
17062 ImportTableEntry *target_import = add_source_file(ira->codegen, target_package, resolved_path, import_code);
17041 ZigType *target_import = add_source_file(ira->codegen, target_package, resolved_path, import_code, source_kind);
1706317042
17064 scan_import(ira->codegen, target_import);
17065
17066 IrInstruction *result = ir_const(ira, &import_instruction->base, ira->codegen->builtin_types.entry_namespace);
17067 result->value.data.x_import = target_import;
17068 return result;
17043 return ir_const_type(ira, &import_instruction->base, target_import);
1706917044}
1707017045
1707117046static IrInstruction *ir_analyze_instruction_ref(IrAnalyze *ira, IrInstructionRef *ref_instruction) {
......@@ -17398,17 +17373,7 @@ static IrInstruction *ir_analyze_instruction_compile_err(IrAnalyze *ira,
1739817373 return ira->codegen->invalid_instruction;
1739917374
1740017375 ErrorMsg *msg = ir_add_error(ira, &instruction->base, msg_buf);
17401 size_t i = ira->codegen->tld_ref_source_node_stack.length;
17402 for (;;) {
17403 if (i == 0)
17404 break;
17405 i -= 1;
17406 AstNode *source_node = ira->codegen->tld_ref_source_node_stack.at(i);
17407 if (source_node) {
17408 add_error_note(ira->codegen, msg, source_node,
17409 buf_sprintf("referenced here"));
17410 }
17411 }
17376 emit_error_notes_for_ref_stack(ira->codegen, msg);
1741217377
1741317378 return ira->codegen->invalid_instruction;
1741417379}
......@@ -17665,6 +17630,12 @@ static IrInstruction *ir_analyze_instruction_bit_offset_of(IrAnalyze *ira,
1766517630 return ir_const_unsigned(ira, &instruction->base, bit_offset);
1766617631}
1766717632
17633static IrInstruction *ir_error_dependency_loop(IrAnalyze *ira, IrInstruction *source_instr) {
17634 ErrorMsg *msg = ir_add_error(ira, source_instr, buf_sprintf("dependency loop detected"));
17635 emit_error_notes_for_ref_stack(ira->codegen, msg);
17636 return ira->codegen->invalid_instruction;
17637}
17638
1766817639static void ensure_field_index(ZigType *type, const char *field_name, size_t index) {
1766917640 Buf *field_name_buf;
1767017641
......@@ -17711,7 +17682,9 @@ static ZigType *ir_type_info_get_type(IrAnalyze *ira, const char *type_name, Zig
1771117682 return var->const_value->data.x_type;
1771217683}
1771317684
17714static Error ir_make_type_info_defs(IrAnalyze *ira, ConstExprValue *out_val, ScopeDecls *decls_scope) {
17685static Error ir_make_type_info_defs(IrAnalyze *ira, IrInstruction *source_instr, ConstExprValue *out_val,
17686 ScopeDecls *decls_scope)
17687{
1771517688 Error err;
1771617689 ZigType *type_info_definition_type = ir_type_info_get_type(ira, "Definition", nullptr);
1771717690 if ((err = ensure_complete_type(ira->codegen, type_info_definition_type)))
......@@ -17741,7 +17714,7 @@ static Error ir_make_type_info_defs(IrAnalyze *ira, ConstExprValue *out_val, Sco
1774117714 while ((curr_entry = decl_it.next()) != nullptr) {
1774217715 // If the definition is unresolved, force it to be resolved again.
1774317716 if (curr_entry->value->resolution == TldResolutionUnresolved) {
17744 resolve_top_level_decl(ira->codegen, curr_entry->value, false, curr_entry->value->source_node);
17717 resolve_top_level_decl(ira->codegen, curr_entry->value, curr_entry->value->source_node);
1774517718 if (curr_entry->value->resolution != TldResolutionOk) {
1774617719 return ErrorSemanticAnalyzeFail;
1774717720 }
......@@ -17831,6 +17804,11 @@ static Error ir_make_type_info_defs(IrAnalyze *ira, ConstExprValue *out_val, Sco
1783117804 ZigFn *fn_entry = ((TldFn *)curr_entry->value)->fn_entry;
1783217805 assert(!fn_entry->is_test);
1783317806
17807 if (fn_entry->type_entry == nullptr) {
17808 ir_error_dependency_loop(ira, source_instr);
17809 return ErrorSemanticAnalyzeFail;
17810 }
17811
1783417812 AstNodeFnProto *fn_node = (AstNodeFnProto *)(fn_entry->proto_node);
1783517813
1783617814 ConstExprValue *fn_def_val = create_const_vals(1);
......@@ -18036,7 +18014,9 @@ static void make_enum_field_val(IrAnalyze *ira, ConstExprValue *enum_field_val,
1803618014 enum_field_val->data.x_struct.fields = inner_fields;
1803718015}
1803818016
18039static Error ir_make_type_info_value(IrAnalyze *ira, AstNode *source_node, ZigType *type_entry, ConstExprValue **out) {
18017static Error ir_make_type_info_value(IrAnalyze *ira, IrInstruction *source_instr, ZigType *type_entry,
18018 ConstExprValue **out)
18019{
1804018020 Error err;
1804118021 assert(type_entry != nullptr);
1804218022 assert(!type_is_invalid(type_entry));
......@@ -18056,7 +18036,6 @@ static Error ir_make_type_info_value(IrAnalyze *ira, AstNode *source_node, ZigTy
1805618036 case ZigTypeIdComptimeInt:
1805718037 case ZigTypeIdUndefined:
1805818038 case ZigTypeIdNull:
18059 case ZigTypeIdNamespace:
1806018039 case ZigTypeIdArgTuple:
1806118040 case ZigTypeIdOpaque:
1806218041 *out = nullptr;
......@@ -18248,8 +18227,11 @@ static Error ir_make_type_info_value(IrAnalyze *ira, AstNode *source_node, ZigTy
1824818227 }
1824918228 // defs: []TypeInfo.Definition
1825018229 ensure_field_index(result->type, "defs", 3);
18251 if ((err = ir_make_type_info_defs(ira, &fields[3], type_entry->data.enumeration.decls_scope)))
18230 if ((err = ir_make_type_info_defs(ira, source_instr, &fields[3],
18231 type_entry->data.enumeration.decls_scope)))
18232 {
1825218233 return err;
18234 }
1825318235
1825418236 break;
1825518237 }
......@@ -18266,11 +18248,11 @@ static Error ir_make_type_info_value(IrAnalyze *ira, AstNode *source_node, ZigTy
1826618248 ensure_field_index(result->type, "errors", 0);
1826718249
1826818250 ZigType *type_info_error_type = ir_type_info_get_type(ira, "Error", nullptr);
18269 if (!resolve_inferred_error_set(ira->codegen, type_entry, source_node)) {
18251 if (!resolve_inferred_error_set(ira->codegen, type_entry, source_instr->source_node)) {
1827018252 return ErrorSemanticAnalyzeFail;
1827118253 }
1827218254 if (type_is_global_error_set(type_entry)) {
18273 ir_add_error_node(ira, source_node,
18255 ir_add_error(ira, source_instr,
1827418256 buf_sprintf("TODO: compiler bug: implement @typeInfo support for anyerror. https://github.com/ziglang/zig/issues/1936"));
1827518257 return ErrorSemanticAnalyzeFail;
1827618258 }
......@@ -18412,8 +18394,11 @@ static Error ir_make_type_info_value(IrAnalyze *ira, AstNode *source_node, ZigTy
1841218394 }
1841318395 // defs: []TypeInfo.Definition
1841418396 ensure_field_index(result->type, "defs", 3);
18415 if ((err = ir_make_type_info_defs(ira, &fields[3], type_entry->data.unionation.decls_scope)))
18397 if ((err = ir_make_type_info_defs(ira, source_instr, &fields[3],
18398 type_entry->data.unionation.decls_scope)))
18399 {
1841618400 return err;
18401 }
1841718402
1841818403 break;
1841918404 }
......@@ -18487,8 +18472,11 @@ static Error ir_make_type_info_value(IrAnalyze *ira, AstNode *source_node, ZigTy
1848718472 }
1848818473 // defs: []TypeInfo.Definition
1848918474 ensure_field_index(result->type, "defs", 2);
18490 if ((err = ir_make_type_info_defs(ira, &fields[2], type_entry->data.structure.decls_scope)))
18475 if ((err = ir_make_type_info_defs(ira, source_instr, &fields[2],
18476 type_entry->data.structure.decls_scope)))
18477 {
1849118478 return err;
18479 }
1849218480
1849318481 break;
1849418482 }
......@@ -18600,7 +18588,7 @@ static Error ir_make_type_info_value(IrAnalyze *ira, AstNode *source_node, ZigTy
1860018588 {
1860118589 ZigType *fn_type = type_entry->data.bound_fn.fn_type;
1860218590 assert(fn_type->id == ZigTypeIdFn);
18603 if ((err = ir_make_type_info_value(ira, source_node, fn_type, &result)))
18591 if ((err = ir_make_type_info_value(ira, source_instr, fn_type, &result)))
1860418592 return err;
1860518593
1860618594 break;
......@@ -18625,7 +18613,7 @@ static IrInstruction *ir_analyze_instruction_type_info(IrAnalyze *ira,
1862518613 ZigType *result_type = ir_type_info_get_type(ira, nullptr, nullptr);
1862618614
1862718615 ConstExprValue *payload;
18628 if ((err = ir_make_type_info_value(ira, instruction->base.source_node, type_entry, &payload)))
18616 if ((err = ir_make_type_info_value(ira, &instruction->base, type_entry, &payload)))
1862918617 return ira->codegen->invalid_instruction;
1863018618
1863118619 IrInstruction *result = ir_const(ira, &instruction->base, result_type);
......@@ -18680,7 +18668,7 @@ static IrInstruction *ir_analyze_instruction_type_name(IrAnalyze *ira, IrInstruc
1868018668 return ira->codegen->invalid_instruction;
1868118669
1868218670 if (!type_entry->cached_const_name_val) {
18683 type_entry->cached_const_name_val = create_const_str_lit(ira->codegen, &type_entry->name);
18671 type_entry->cached_const_name_val = create_const_str_lit(ira->codegen, type_bare_name(type_entry));
1868418672 }
1868518673 IrInstruction *result = ir_const(ira, &instruction->base, nullptr);
1868618674 copy_const_val(&result->value, type_entry->cached_const_name_val, true);
......@@ -18702,14 +18690,21 @@ static IrInstruction *ir_analyze_instruction_c_import(IrAnalyze *ira, IrInstruct
1870218690 if (type_is_invalid(cimport_result->type))
1870318691 return ira->codegen->invalid_instruction;
1870418692
18705 ImportTableEntry *child_import = allocate<ImportTableEntry>(1);
18706 child_import->decls_scope = create_decls_scope(ira->codegen, node, nullptr, nullptr, child_import);
18707 child_import->c_import_node = node;
18708 child_import->package = new_anonymous_package();
18709 child_import->package->package_table.put(buf_create_from_str("builtin"), ira->codegen->compile_var_package);
18710 child_import->package->package_table.put(buf_create_from_str("std"), ira->codegen->std_package);
18711 child_import->di_file = ZigLLVMCreateFile(ira->codegen->dbuilder,
18693 ZigPackage *cur_scope_pkg = scope_package(instruction->base.scope);
18694 Buf *namespace_name = buf_sprintf("%s.cimport:%" ZIG_PRI_usize ":%" ZIG_PRI_usize,
18695 buf_ptr(&cur_scope_pkg->pkg_path), node->line + 1, node->column + 1);
18696
18697 RootStruct *root_struct = allocate<RootStruct>(1);
18698 root_struct->package = new_anonymous_package();
18699 root_struct->package->package_table.put(buf_create_from_str("builtin"), ira->codegen->compile_var_package);
18700 root_struct->package->package_table.put(buf_create_from_str("std"), ira->codegen->std_package);
18701 root_struct->c_import_node = node;
18702 // TODO create namespace_name file in zig-cache instead of /tmp and use it
18703 // for this DIFile
18704 root_struct->di_file = ZigLLVMCreateFile(ira->codegen->dbuilder,
1871218705 buf_ptr(buf_create_from_str("cimport.h")), buf_ptr(buf_create_from_str(".")));
18706 ZigType *child_import = get_root_container_type(ira->codegen, buf_ptr(namespace_name),
18707 namespace_name, root_struct);
1871318708
1871418709 ZigList<ErrorMsg *> errors = {0};
1871518710
......@@ -18738,14 +18733,12 @@ static IrInstruction *ir_analyze_instruction_c_import(IrAnalyze *ira, IrInstruct
1873818733 if (ira->codegen->verbose_cimport) {
1873918734 fprintf(stderr, "\nC imports:\n");
1874018735 fprintf(stderr, "-----------\n");
18741 ast_render(ira->codegen, stderr, child_import->root, 4);
18736 ast_render(ira->codegen, stderr, child_import->data.structure.decl_node, 4);
1874218737 }
1874318738
18744 scan_decls(ira->codegen, child_import->decls_scope, child_import->root);
18739 scan_decls(ira->codegen, get_container_scope(child_import), child_import->data.structure.decl_node);
1874518740
18746 IrInstruction *result = ir_const(ira, &instruction->base, ira->codegen->builtin_types.entry_namespace);
18747 result->value.data.x_import = child_import;
18748 return result;
18741 return ir_const_type(ira, &instruction->base, child_import);
1874918742}
1875018743
1875118744static IrInstruction *ir_analyze_instruction_c_include(IrAnalyze *ira, IrInstructionCInclude *instruction) {
......@@ -18819,10 +18812,10 @@ static IrInstruction *ir_analyze_instruction_embed_file(IrAnalyze *ira, IrInstru
1881918812 if (!rel_file_path)
1882018813 return ira->codegen->invalid_instruction;
1882118814
18822 ImportTableEntry *import = get_scope_import(instruction->base.scope);
18815 ZigType *import = get_scope_import(instruction->base.scope);
1882318816 // figure out absolute path to resource
1882418817 Buf source_dir_path = BUF_INIT;
18825 os_path_dirname(import->path, &source_dir_path);
18818 os_path_dirname(import->data.structure.root_struct->path, &source_dir_path);
1882618819
1882718820 Buf *resolve_paths[] = {
1882818821 &source_dir_path,
......@@ -20179,7 +20172,6 @@ static IrInstruction *ir_analyze_instruction_align_of(IrAnalyze *ira, IrInstruct
2017920172 case ZigTypeIdComptimeInt:
2018020173 case ZigTypeIdUndefined:
2018120174 case ZigTypeIdNull:
20182 case ZigTypeIdNamespace:
2018320175 case ZigTypeIdBoundFn:
2018420176 case ZigTypeIdArgTuple:
2018520177 case ZigTypeIdVoid:
......@@ -21025,7 +21017,6 @@ static void buf_write_value_bytes(CodeGen *codegen, uint8_t *buf, ConstExprValue
2102521017 case ZigTypeIdOpaque:
2102621018 case ZigTypeIdBoundFn:
2102721019 case ZigTypeIdArgTuple:
21028 case ZigTypeIdNamespace:
2102921020 case ZigTypeIdUnreachable:
2103021021 case ZigTypeIdComptimeFloat:
2103121022 case ZigTypeIdComptimeInt:
......@@ -21185,7 +21176,6 @@ static Error buf_read_value_bytes(IrAnalyze *ira, CodeGen *codegen, AstNode *sou
2118521176 case ZigTypeIdOpaque:
2118621177 case ZigTypeIdBoundFn:
2118721178 case ZigTypeIdArgTuple:
21188 case ZigTypeIdNamespace:
2118921179 case ZigTypeIdUnreachable:
2119021180 case ZigTypeIdComptimeFloat:
2119121181 case ZigTypeIdComptimeInt:
......@@ -21343,7 +21333,6 @@ static bool type_can_bit_cast(ZigType *t) {
2134321333 case ZigTypeIdOpaque:
2134421334 case ZigTypeIdBoundFn:
2134521335 case ZigTypeIdArgTuple:
21346 case ZigTypeIdNamespace:
2134721336 case ZigTypeIdUnreachable:
2134821337 case ZigTypeIdComptimeFloat:
2134921338 case ZigTypeIdComptimeInt:
......@@ -21516,7 +21505,7 @@ static IrInstruction *ir_analyze_instruction_decl_ref(IrAnalyze *ira,
2151621505 Tld *tld = instruction->tld;
2151721506 LVal lval = instruction->lval;
2151821507
21519 resolve_top_level_decl(ira->codegen, tld, lval == LValPtr, instruction->base.source_node);
21508 resolve_top_level_decl(ira->codegen, tld, instruction->base.source_node);
2152021509 if (tld->resolution == TldResolutionInvalid)
2152121510 return ira->codegen->invalid_instruction;
2152221511
......@@ -21528,6 +21517,10 @@ static IrInstruction *ir_analyze_instruction_decl_ref(IrAnalyze *ira,
2152821517 TldVar *tld_var = (TldVar *)tld;
2152921518 ZigVar *var = tld_var->var;
2153021519
21520 if (var == nullptr) {
21521 return ir_error_dependency_loop(ira, &instruction->base);
21522 }
21523
2153121524 IrInstruction *var_ptr = ir_get_var_ptr(ira, &instruction->base, var);
2153221525 if (type_is_invalid(var_ptr->value.type))
2153321526 return ira->codegen->invalid_instruction;
......@@ -21664,9 +21657,11 @@ static IrInstruction *ir_analyze_instruction_align_cast(IrAnalyze *ira, IrInstru
2166421657}
2166521658
2166621659static IrInstruction *ir_analyze_instruction_opaque_type(IrAnalyze *ira, IrInstructionOpaqueType *instruction) {
21667 Buf *name = get_anon_type_name(ira->codegen, ira->new_irb.exec, "opaque", instruction->base.source_node);
21660 Buf *bare_name = buf_alloc();
21661 Buf *full_name = get_anon_type_name(ira->codegen, ira->new_irb.exec, "opaque",
21662 instruction->base.scope, instruction->base.source_node, bare_name);
2166821663 ZigType *result_type = get_opaque_type(ira->codegen, instruction->base.scope, instruction->base.source_node,
21669 buf_ptr(name));
21664 buf_ptr(full_name), bare_name);
2167021665 return ir_const_type(ira, &instruction->base, result_type);
2167121666}
2167221667
src/main.cpp+7-6
......@@ -215,7 +215,7 @@ struct CliPkg {
215215 CliPkg *parent;
216216};
217217
218static void add_package(CodeGen *g, CliPkg *cli_pkg, PackageTableEntry *pkg) {
218static void add_package(CodeGen *g, CliPkg *cli_pkg, ZigPackage *pkg) {
219219 for (size_t i = 0; i < cli_pkg->children.length; i += 1) {
220220 CliPkg *child_cli_pkg = cli_pkg->children.at(i);
221221
......@@ -223,10 +223,11 @@ static void add_package(CodeGen *g, CliPkg *cli_pkg, PackageTableEntry *pkg) {
223223 Buf *basename = buf_alloc();
224224 os_path_split(buf_create_from_str(child_cli_pkg->path), dirname, basename);
225225
226 PackageTableEntry *child_pkg = codegen_create_package(g, buf_ptr(dirname), buf_ptr(basename));
226 ZigPackage *child_pkg = codegen_create_package(g, buf_ptr(dirname), buf_ptr(basename),
227 buf_ptr(buf_sprintf("%s.%s", buf_ptr(&pkg->pkg_path), child_cli_pkg->name)));
227228 auto entry = pkg->package_table.put_unique(buf_create_from_str(child_cli_pkg->name), child_pkg);
228229 if (entry) {
229 PackageTableEntry *existing_pkg = entry->value;
230 ZigPackage *existing_pkg = entry->value;
230231 Buf *full_path = buf_alloc();
231232 os_path_join(&existing_pkg->root_src_dir, &existing_pkg->root_src_path, full_path);
232233 fprintf(stderr, "Unable to add package '%s'->'%s': already exists as '%s'\n",
......@@ -543,8 +544,8 @@ int main(int argc, char **argv) {
543544 return EXIT_FAILURE;
544545 }
545546
546 PackageTableEntry *build_pkg = codegen_create_package(g, buf_ptr(&build_file_dirname),
547 buf_ptr(&build_file_basename));
547 ZigPackage *build_pkg = codegen_create_package(g, buf_ptr(&build_file_dirname),
548 buf_ptr(&build_file_basename), "std.special");
548549 g->root_package->package_table.put(buf_create_from_str("@build"), build_pkg);
549550 g->enable_cache = get_cache_opt(enable_cache, true);
550551 codegen_build_and_link(g);
......@@ -1145,7 +1146,7 @@ int main(int argc, char **argv) {
11451146 }
11461147 } else if (cmd == CmdTranslateC) {
11471148 codegen_translate_c(g, in_file_buf);
1148 ast_render(g, stdout, g->root_import->root, 4);
1149 ast_render(g, stdout, g->root_import->data.structure.decl_node, 4);
11491150 if (timing_info)
11501151 codegen_print_timing_report(g, stdout);
11511152 return EXIT_SUCCESS;
src/os.cpp+1-1
......@@ -264,7 +264,7 @@ void os_path_join(Buf *dirname, Buf *basename, Buf *out_full_path) {
264264 buf_append_buf(out_full_path, basename);
265265}
266266
267int os_path_real(Buf *rel_path, Buf *out_abs_path) {
267Error os_path_real(Buf *rel_path, Buf *out_abs_path) {
268268#if defined(ZIG_OS_WINDOWS)
269269 buf_resize(out_abs_path, 4096);
270270 if (_fullpath(buf_ptr(out_abs_path), buf_ptr(rel_path), buf_len(out_abs_path)) == nullptr) {
src/os.hpp+1-1
......@@ -96,7 +96,7 @@ void os_path_dirname(Buf *full_path, Buf *out_dirname);
9696void os_path_split(Buf *full_path, Buf *out_dirname, Buf *out_basename);
9797void os_path_extname(Buf *full_path, Buf *out_basename, Buf *out_extname);
9898void os_path_join(Buf *dirname, Buf *basename, Buf *out_full_path);
99int os_path_real(Buf *rel_path, Buf *out_abs_path);
99Error os_path_real(Buf *rel_path, Buf *out_abs_path);
100100Buf os_path_resolve(Buf **paths_ptr, size_t paths_len);
101101bool os_path_is_absolute(Buf *path);
102102
src/parser.cpp+10-8
......@@ -18,7 +18,7 @@ struct ParseContext {
1818 Buf *buf;
1919 size_t current_token;
2020 ZigList<Token> *tokens;
21 ImportTableEntry *owner;
21 ZigType *owner;
2222 ErrColor err_color;
2323};
2424
......@@ -130,8 +130,10 @@ static void ast_error(ParseContext *pc, Token *token, const char *format, ...) {
130130 va_end(ap);
131131
132132
133 ErrorMsg *err = err_msg_create_with_line(pc->owner->path, token->start_line, token->start_column,
134 pc->owner->source_code, pc->owner->line_offsets, msg);
133 ErrorMsg *err = err_msg_create_with_line(pc->owner->data.structure.root_struct->path,
134 token->start_line, token->start_column,
135 pc->owner->data.structure.root_struct->source_code,
136 pc->owner->data.structure.root_struct->line_offsets, msg);
135137 err->line_start = token->start_line;
136138 err->column_start = token->start_column;
137139
......@@ -148,8 +150,10 @@ static void ast_asm_error(ParseContext *pc, AstNode *node, size_t offset, const
148150 Buf *msg = buf_vprintf(format, ap);
149151 va_end(ap);
150152
151 ErrorMsg *err = err_msg_create_with_line(pc->owner->path, node->line, node->column,
152 pc->owner->source_code, pc->owner->line_offsets, msg);
153 ErrorMsg *err = err_msg_create_with_line(pc->owner->data.structure.root_struct->path,
154 node->line, node->column,
155 pc->owner->data.structure.root_struct->source_code,
156 pc->owner->data.structure.root_struct->line_offsets, msg);
153157
154158 print_err_msg(err, pc->err_color);
155159 exit(EXIT_FAILURE);
......@@ -570,9 +574,7 @@ static void ast_parse_asm_template(ParseContext *pc, AstNode *node) {
570574 }
571575}
572576
573AstNode *ast_parse(Buf *buf, ZigList<Token> *tokens, ImportTableEntry *owner,
574 ErrColor err_color)
575{
577AstNode *ast_parse(Buf *buf, ZigList<Token> *tokens, ZigType *owner, ErrColor err_color) {
576578 ParseContext pc = {};
577579 pc.err_color = err_color;
578580 pc.owner = owner;
src/parser.hpp+1-1
......@@ -16,7 +16,7 @@ ATTRIBUTE_PRINTF(2, 3)
1616void ast_token_error(Token *token, const char *format, ...);
1717
1818
19AstNode * ast_parse(Buf *buf, ZigList<Token> *tokens, ImportTableEntry *owner, ErrColor err_color);
19AstNode * ast_parse(Buf *buf, ZigList<Token> *tokens, ZigType *owner, ErrColor err_color);
2020
2121void ast_print(AstNode *node, int indent);
2222
src/translate_c.cpp+5-4
......@@ -76,7 +76,7 @@ struct TransScopeWhile {
7676};
7777
7878struct Context {
79 ImportTableEntry *import;
79 ZigType *import;
8080 ZigList<ErrorMsg *> *errors;
8181 VisibMod visib_mod;
8282 bool want_export;
......@@ -4732,7 +4732,7 @@ static void process_preprocessor_entities(Context *c, ZigClangASTUnit *zunit) {
47324732 }
47334733}
47344734
4735Error parse_h_buf(ImportTableEntry *import, ZigList<ErrorMsg *> *errors, Buf *source,
4735Error parse_h_buf(ZigType *import, ZigList<ErrorMsg *> *errors, Buf *source,
47364736 CodeGen *codegen, AstNode *source_node)
47374737{
47384738 Error err;
......@@ -4748,7 +4748,7 @@ Error parse_h_buf(ImportTableEntry *import, ZigList<ErrorMsg *> *errors, Buf *so
47484748 return err;
47494749}
47504750
4751Error parse_h_file(ImportTableEntry *import, ZigList<ErrorMsg *> *errors, const char *target_file,
4751Error parse_h_file(ZigType *import, ZigList<ErrorMsg *> *errors, const char *target_file,
47524752 CodeGen *codegen, AstNode *source_node)
47534753{
47544754 Context context = {0};
......@@ -4958,7 +4958,8 @@ Error parse_h_file(ImportTableEntry *import, ZigList<ErrorMsg *> *errors, const
49584958 render_macros(c);
49594959 render_aliases(c);
49604960
4961 import->root = c->root;
4961 import->data.structure.decl_node = c->root;
4962 import->data.structure.decls_scope->base.source_node = c->root;
49624963
49634964 return ErrorNone;
49644965}
src/translate_c.hpp+2-2
......@@ -11,10 +11,10 @@
1111
1212#include "all_types.hpp"
1313
14Error parse_h_file(ImportTableEntry *import, ZigList<ErrorMsg *> *errors, const char *target_file,
14Error parse_h_file(ZigType *import, ZigList<ErrorMsg *> *errors, const char *target_file,
1515 CodeGen *codegen, AstNode *source_node);
1616
17Error parse_h_buf(ImportTableEntry *import, ZigList<ErrorMsg *> *errors, Buf *source,
17Error parse_h_buf(ZigType *import, ZigList<ErrorMsg *> *errors, Buf *source,
1818 CodeGen *codegen, AstNode *source_node);
1919
2020#endif
src/util.hpp-12
......@@ -93,18 +93,6 @@ ATTRIBUTE_RETURNS_NOALIAS static inline T *allocate(size_t count) {
9393 return ptr;
9494}
9595
96template<typename T>
97static inline void safe_memcpy(T *dest, const T *src, size_t count) {
98#ifdef NDEBUG
99 memcpy(dest, src, count * sizeof(T));
100#else
101 // manually assign every elment to trigger compile error for non-copyable structs
102 for (size_t i = 0; i < count; i += 1) {
103 dest[i] = src[i];
104 }
105#endif
106}
107
10896template<typename T>
10997static inline T *reallocate(T *old, size_t old_count, size_t new_count) {
11098 T *ptr = reallocate_nonzero(old, old_count, new_count);
std/crypto/blake2.zig+2-2
......@@ -34,8 +34,8 @@ pub const Blake2s256 = Blake2s(256);
3434fn Blake2s(comptime out_len: usize) type {
3535 return struct {
3636 const Self = @This();
37 const block_length = 64;
38 const digest_length = out_len / 8;
37 pub const block_length = 64;
38 pub const digest_length = out_len / 8;
3939
4040 const iv = [8]u32{
4141 0x6A09E667,
std/crypto/md5.zig+2-2
......@@ -29,8 +29,8 @@ fn Rp(a: usize, b: usize, c: usize, d: usize, k: usize, s: u32, t: u32) RoundPar
2929
3030pub const Md5 = struct {
3131 const Self = @This();
32 const block_length = 64;
33 const digest_length = 16;
32 pub const block_length = 64;
33 pub const digest_length = 16;
3434
3535 s: [4]u32,
3636 // Streaming Cache
std/crypto/sha1.zig+2-2
......@@ -26,8 +26,8 @@ fn Rp(a: usize, b: usize, c: usize, d: usize, e: usize, i: u32) RoundParam {
2626
2727pub const Sha1 = struct {
2828 const Self = @This();
29 const block_length = 64;
30 const digest_length = 20;
29 pub const block_length = 64;
30 pub const digest_length = 20;
3131
3232 s: [5]u32,
3333 // Streaming Cache
std/crypto/sha2.zig+2-2
......@@ -78,8 +78,8 @@ pub const Sha256 = Sha2_32(Sha256Params);
7878fn Sha2_32(comptime params: Sha2Params32) type {
7979 return struct {
8080 const Self = @This();
81 const block_length = 64;
82 const digest_length = params.out_len / 8;
81 pub const block_length = 64;
82 pub const digest_length = params.out_len / 8;
8383
8484 s: [8]u32,
8585 // Streaming Cache
std/crypto/sha3.zig+2-2
......@@ -13,8 +13,8 @@ pub const Sha3_512 = Keccak(512, 0x06);
1313fn Keccak(comptime bits: usize, comptime delim: u8) type {
1414 return struct {
1515 const Self = @This();
16 const block_length = 200;
17 const digest_length = bits / 8;
16 pub const block_length = 200;
17 pub const digest_length = bits / 8;
1818
1919 s: [200]u8,
2020 offset: usize,
std/hash_map.zig-2
......@@ -486,7 +486,6 @@ pub fn autoHash(key: var, comptime rng: *std.rand.Random, comptime HashInt: type
486486 builtin.TypeId.ErrorSet => return autoHash(@errorToInt(key), rng),
487487 builtin.TypeId.Promise, builtin.TypeId.Fn => return autoHash(@ptrToInt(key), rng),
488488
489 builtin.TypeId.Namespace,
490489 builtin.TypeId.BoundFn,
491490 builtin.TypeId.ComptimeFloat,
492491 builtin.TypeId.ComptimeInt,
......@@ -532,7 +531,6 @@ pub fn autoEql(a: var, b: @typeOf(a)) bool {
532531 builtin.TypeId.Float,
533532 builtin.TypeId.ComptimeFloat,
534533 builtin.TypeId.ComptimeInt,
535 builtin.TypeId.Namespace,
536534 builtin.TypeId.Promise,
537535 builtin.TypeId.Enum,
538536 builtin.TypeId.BoundFn,
std/pdb.zig+1-3
......@@ -12,7 +12,6 @@ const ArrayList = std.ArrayList;
1212// Note: most of this is based on information gathered from LLVM source code,
1313// documentation and/or contributors.
1414
15
1615// https://llvm.org/docs/PDB/DbiStream.html#stream-header
1716pub const DbiStreamHeader = packed struct {
1817 VersionSignature: i32,
......@@ -393,10 +392,9 @@ pub const LineNumberEntry = packed struct {
393392 Flags: u32,
394393
395394 /// TODO runtime crash when I make the actual type of Flags this
396 const Flags = packed struct {
395 pub const Flags = packed struct {
397396 /// Start line number
398397 Start: u24,
399
400398 /// Delta of lines to the end of the expression. Still unclear.
401399 // TODO figure out the point of this field.
402400 End: u7,
std/testing.zig-1
......@@ -44,7 +44,6 @@ pub fn expectEqual(expected: var, actual: @typeOf(expected)) void {
4444 TypeId.ComptimeFloat,
4545 TypeId.ComptimeInt,
4646 TypeId.Enum,
47 TypeId.Namespace,
4847 TypeId.Fn,
4948 TypeId.Promise,
5049 TypeId.Vector,
std/zig/ast.zig+6-6
......@@ -617,7 +617,7 @@ pub const Node = struct {
617617
618618 pub const DeclList = Root.DeclList;
619619
620 const InitArg = union(enum) {
620 pub const InitArg = union(enum) {
621621 None,
622622 Enum: ?*Node,
623623 Type: *Node,
......@@ -1744,7 +1744,7 @@ pub const Node = struct {
17441744 kind: Kind,
17451745 rhs: ?*Node,
17461746
1747 const Kind = union(enum) {
1747 pub const Kind = union(enum) {
17481748 Break: ?*Node,
17491749 Continue: ?*Node,
17501750 Return,
......@@ -2022,7 +2022,7 @@ pub const Node = struct {
20222022 kind: Kind,
20232023 rparen: TokenIndex,
20242024
2025 const Kind = union(enum) {
2025 pub const Kind = union(enum) {
20262026 Variable: *Identifier,
20272027 Return: *Node,
20282028 };
......@@ -2101,9 +2101,9 @@ pub const Node = struct {
21012101 clobbers: ClobberList,
21022102 rparen: TokenIndex,
21032103
2104 const OutputList = SegmentedList(*AsmOutput, 2);
2105 const InputList = SegmentedList(*AsmInput, 2);
2106 const ClobberList = SegmentedList(TokenIndex, 2);
2104 pub const OutputList = SegmentedList(*AsmOutput, 2);
2105 pub const InputList = SegmentedList(*AsmInput, 2);
2106 pub const ClobberList = SegmentedList(TokenIndex, 2);
21072107
21082108 pub fn iterate(self: *Asm, index: usize) ?*Node {
21092109 var i = index;
test/compile_errors.zig+692-690
......@@ -2,6 +2,113 @@ const tests = @import("tests.zig");
22const builtin = @import("builtin");
33
44pub fn addCases(cases: *tests.CompileErrorContext) void {
5 cases.add(
6 "bogus compile var",
7 \\const x = @import("builtin").bogus;
8 \\export fn entry() usize { return @sizeOf(@typeOf(x)); }
9 ,
10 "tmp.zig:1:29: error: container 'builtin' has no member called 'bogus'",
11 );
12
13 cases.add(
14 "wrong panic signature, runtime function",
15 \\test "" {}
16 \\
17 \\pub fn panic() void {}
18 \\
19 ,
20 "tmp.zig:3:5: error: expected type 'fn([]const u8, ?*builtin.StackTrace) noreturn', found 'fn() void'",
21 );
22
23 cases.add(
24 "wrong panic signature, generic function",
25 \\pub fn panic(comptime msg: []const u8, error_return_trace: ?*builtin.StackTrace) noreturn {
26 \\ while (true) {}
27 \\}
28 ,
29 "tmp.zig:1:5: error: expected type 'fn([]const u8, ?*builtin.StackTrace) noreturn', found 'fn([]const u8,var)var'",
30 "tmp.zig:1:5: note: only one of the functions is generic",
31 );
32
33 cases.add(
34 "direct struct loop",
35 \\const A = struct { a : A, };
36 \\export fn entry() usize { return @sizeOf(A); }
37 ,
38 "tmp.zig:1:11: error: struct 'A' contains itself",
39 );
40
41 cases.add(
42 "indirect struct loop",
43 \\const A = struct { b : B, };
44 \\const B = struct { c : C, };
45 \\const C = struct { a : A, };
46 \\export fn entry() usize { return @sizeOf(A); }
47 ,
48 "tmp.zig:1:11: error: struct 'A' contains itself",
49 );
50
51 cases.add(
52 "instantiating an undefined value for an invalid struct that contains itself",
53 \\const Foo = struct {
54 \\ x: Foo,
55 \\};
56 \\
57 \\var foo: Foo = undefined;
58 \\
59 \\export fn entry() usize {
60 \\ return @sizeOf(@typeOf(foo.x));
61 \\}
62 ,
63 "tmp.zig:1:13: error: struct 'Foo' contains itself",
64 "tmp.zig:8:28: note: referenced here",
65 );
66
67 cases.add(
68 "@typeInfo causing depend on itself compile error",
69 \\const start = struct {
70 \\ fn crash() bug() {
71 \\ return bug;
72 \\ }
73 \\};
74 \\fn bug() void {
75 \\ _ = @typeInfo(start).Struct;
76 \\}
77 \\export fn entry() void {
78 \\ var boom = start.crash();
79 \\}
80 ,
81 "tmp.zig:7:9: error: dependency loop detected",
82 "tmp.zig:2:19: note: called from here",
83 "tmp.zig:10:21: note: referenced here",
84 );
85
86 cases.add(
87 "enum field value references enum",
88 \\pub const Foo = extern enum {
89 \\ A = Foo.B,
90 \\ C = D,
91 \\};
92 \\export fn entry() void {
93 \\ var s: Foo = Foo.E;
94 \\}
95 ,
96 "tmp.zig:1:17: error: 'Foo' depends on itself",
97 );
98
99 cases.add(
100 "top level decl dependency loop",
101 \\const a : @typeOf(b) = 0;
102 \\const b : @typeOf(a) = 0;
103 \\export fn entry() void {
104 \\ const c = a + b;
105 \\}
106 ,
107 "tmp.zig:2:19: error: dependency loop detected",
108 "tmp.zig:1:19: note: referenced here",
109 "tmp.zig:4:15: note: referenced here",
110 );
111
5112 cases.addTest(
6113 "not an enum type",
7114 \\export fn entry() void {
......@@ -18,7 +125,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
18125 \\const InvalidToken = struct {};
19126 \\const ExpectedVarDeclOrFn = struct {};
20127 ,
21 ".tmp_source.zig:4:9: error: not an enum type",
128 "tmp.zig:4:9: error: not an enum type",
22129 );
23130
24131 cases.addTest(
......@@ -29,7 +136,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
29136 \\ var x: AB = undefined;
30137 \\}
31138 ,
32 ".tmp_source.zig:2:18: error: invalid operands to binary expression: 'error{A}' and 'error{B}'",
139 "tmp.zig:2:18: error: invalid operands to binary expression: 'error{A}' and 'error{B}'",
33140 );
34141
35142 if (builtin.os == builtin.Os.linux) {
......@@ -40,7 +147,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
40147 \\ exit(0);
41148 \\}
42149 ,
43 ".tmp_source.zig:3:5: error: dependency on library c must be explicitly specified in the build command",
150 "tmp.zig:3:5: error: dependency on library c must be explicitly specified in the build command",
44151 );
45152
46153 cases.addTest(
......@@ -50,8 +157,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
50157 \\ _ = c.printf(c"hello, world!\n");
51158 \\}
52159 ,
53 ".tmp_source.zig:1:11: error: C import failed",
54 ".tmp_source.zig:1:11: note: libc headers not available; compilation does not link against libc",
160 "tmp.zig:1:11: error: C import failed",
161 "tmp.zig:1:11: note: libc headers not available; compilation does not link against libc",
55162 );
56163 }
57164
......@@ -63,8 +170,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
63170 \\ var x = a + b;
64171 \\}
65172 ,
66 ".tmp_source.zig:4:15: error: operation caused overflow",
67 ".tmp_source.zig:4:15: note: when computing vector element at index 2",
173 "tmp.zig:4:15: error: operation caused overflow",
174 "tmp.zig:4:15: note: when computing vector element at index 2",
68175 );
69176
70177 cases.addTest(
......@@ -111,14 +218,14 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
111218 \\ B,
112219 \\};
113220 ,
114 ".tmp_source.zig:2:5: error: type 'anyerror' not allowed in packed struct; no guaranteed in-memory representation",
115 ".tmp_source.zig:5:5: error: array of 'u24' not allowed in packed struct due to padding bits",
116 ".tmp_source.zig:8:5: error: type 'anyerror' not allowed in packed struct; no guaranteed in-memory representation",
117 ".tmp_source.zig:11:5: error: non-packed, non-extern struct 'S' not allowed in packed struct; no guaranteed in-memory representation",
118 ".tmp_source.zig:14:5: error: non-packed, non-extern struct 'U' not allowed in packed struct; no guaranteed in-memory representation",
119 ".tmp_source.zig:17:5: error: type '?anyerror' not allowed in packed struct; no guaranteed in-memory representation",
120 ".tmp_source.zig:20:5: error: type 'Enum' not allowed in packed struct; no guaranteed in-memory representation",
121 ".tmp_source.zig:38:14: note: enum declaration does not specify an integer tag type",
221 "tmp.zig:2:5: error: type 'anyerror' not allowed in packed struct; no guaranteed in-memory representation",
222 "tmp.zig:5:5: error: array of 'u24' not allowed in packed struct due to padding bits",
223 "tmp.zig:8:5: error: type 'anyerror' not allowed in packed struct; no guaranteed in-memory representation",
224 "tmp.zig:11:5: error: non-packed, non-extern struct 'S' not allowed in packed struct; no guaranteed in-memory representation",
225 "tmp.zig:14:5: error: non-packed, non-extern struct 'U' not allowed in packed struct; no guaranteed in-memory representation",
226 "tmp.zig:17:5: error: type '?anyerror' not allowed in packed struct; no guaranteed in-memory representation",
227 "tmp.zig:20:5: error: type 'Enum' not allowed in packed struct; no guaranteed in-memory representation",
228 "tmp.zig:38:14: note: enum declaration does not specify an integer tag type",
122229 );
123230
124231 cases.addCase(x: {
......@@ -131,7 +238,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
131238 \\ x += 1;
132239 \\}
133240 ,
134 ".tmp_source.zig:2:5: error: use of undeclared identifier 'x'",
241 "tmp.zig:2:5: error: use of undeclared identifier 'x'",
135242 );
136243 tc.expect_exact = true;
137244 break :x tc;
......@@ -143,7 +250,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
143250 \\ return 0;
144251 \\}
145252 ,
146 ".tmp_source.zig:1:15: error: parameter of type 'var' not allowed in function with calling convention 'ccc'",
253 "tmp.zig:1:15: error: parameter of type 'var' not allowed in function with calling convention 'ccc'",
147254 );
148255
149256 cases.addTest(
......@@ -153,7 +260,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
153260 \\ var y: [*c]c_void = x;
154261 \\}
155262 ,
156 ".tmp_source.zig:3:12: error: C pointers cannot point opaque types",
263 "tmp.zig:3:12: error: C pointers cannot point opaque types",
157264 );
158265
159266 cases.addTest(
......@@ -173,8 +280,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
173280 \\ var bar: Bar = undefined;
174281 \\}
175282 ,
176 ".tmp_source.zig:3:8: error: opaque types have unknown size and therefore cannot be directly embedded in structs",
177 ".tmp_source.zig:7:10: error: opaque types have unknown size and therefore cannot be directly embedded in unions",
283 "tmp.zig:3:8: error: opaque types have unknown size and therefore cannot be directly embedded in structs",
284 "tmp.zig:7:10: error: opaque types have unknown size and therefore cannot be directly embedded in unions",
178285 );
179286
180287 cases.addTest(
......@@ -204,13 +311,13 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
204311 \\ var x: [*c]u32 = y;
205312 \\}
206313 ,
207 ".tmp_source.zig:3:27: error: cast increases pointer alignment",
208 ".tmp_source.zig:7:18: error: cast discards const qualifier",
209 ".tmp_source.zig:11:19: error: expected type '*u32', found '[*c]u8'",
210 ".tmp_source.zig:11:19: note: pointer type child 'u8' cannot cast into pointer type child 'u32'",
211 ".tmp_source.zig:15:22: error: cast increases pointer alignment",
212 ".tmp_source.zig:19:21: error: cast discards const qualifier",
213 ".tmp_source.zig:23:22: error: expected type '[*c]u32', found '*u8'",
314 "tmp.zig:3:27: error: cast increases pointer alignment",
315 "tmp.zig:7:18: error: cast discards const qualifier",
316 "tmp.zig:11:19: error: expected type '*u32', found '[*c]u8'",
317 "tmp.zig:11:19: note: pointer type child 'u8' cannot cast into pointer type child 'u32'",
318 "tmp.zig:15:22: error: cast increases pointer alignment",
319 "tmp.zig:19:21: error: cast discards const qualifier",
320 "tmp.zig:23:22: error: expected type '[*c]u32', found '*u8'",
214321 );
215322
216323 cases.addTest(
......@@ -220,7 +327,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
220327 \\ var zig_ptr: *u8 = c_ptr;
221328 \\}
222329 ,
223 ".tmp_source.zig:3:24: error: null pointer casted to type '*u8'",
330 "tmp.zig:3:24: error: null pointer casted to type '*u8'",
224331 );
225332
226333 cases.addTest(
......@@ -230,7 +337,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
230337 \\ var zig_ptr: *u8 = c_ptr;
231338 \\}
232339 ,
233 ".tmp_source.zig:3:24: error: use of undefined value here causes undefined behavior",
340 "tmp.zig:3:24: error: use of undefined value here causes undefined behavior",
234341 );
235342
236343 cases.addTest(
......@@ -250,12 +357,12 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
250357 \\ var c_ptr: [*c][*c]const u8 = ptr_opt_many_ptr;
251358 \\}
252359 ,
253 ".tmp_source.zig:6:24: error: expected type '*const [*]const u8', found '[*c]const [*c]const u8'",
254 ".tmp_source.zig:6:24: note: pointer type child '[*c]const u8' cannot cast into pointer type child '[*]const u8'",
255 ".tmp_source.zig:6:24: note: '[*c]const u8' could have null values which are illegal in type '[*]const u8'",
256 ".tmp_source.zig:13:35: error: expected type '[*c][*c]const u8', found '*[*]u8'",
257 ".tmp_source.zig:13:35: note: pointer type child '[*]u8' cannot cast into pointer type child '[*c]const u8'",
258 ".tmp_source.zig:13:35: note: mutable '[*c]const u8' allows illegal null values stored to type '[*]u8'",
360 "tmp.zig:6:24: error: expected type '*const [*]const u8', found '[*c]const [*c]const u8'",
361 "tmp.zig:6:24: note: pointer type child '[*c]const u8' cannot cast into pointer type child '[*]const u8'",
362 "tmp.zig:6:24: note: '[*c]const u8' could have null values which are illegal in type '[*]const u8'",
363 "tmp.zig:13:35: error: expected type '[*c][*c]const u8', found '*[*]u8'",
364 "tmp.zig:13:35: note: pointer type child '[*]u8' cannot cast into pointer type child '[*c]const u8'",
365 "tmp.zig:13:35: note: mutable '[*c]const u8' allows illegal null values stored to type '[*]u8'",
259366 );
260367
261368 cases.addTest(
......@@ -268,8 +375,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
268375 \\ var ptr: [*c]u8 = x;
269376 \\}
270377 ,
271 ".tmp_source.zig:2:33: error: integer value 71615590737044764481 cannot be implicitly casted to type 'usize'",
272 ".tmp_source.zig:6:23: error: integer type 'u65' too big for implicit @intToPtr to type '[*c]u8'",
378 "tmp.zig:2:33: error: integer value 71615590737044764481 cannot be implicitly casted to type 'usize'",
379 "tmp.zig:6:23: error: integer type 'u65' too big for implicit @intToPtr to type '[*c]u8'",
273380 );
274381
275382 cases.addTest(
......@@ -279,7 +386,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
279386 \\ const T = [*c]Foo;
280387 \\}
281388 ,
282 ".tmp_source.zig:3:15: error: C pointers cannot point to non-C-ABI-compatible type 'Foo'",
389 "tmp.zig:3:15: error: C pointers cannot point to non-C-ABI-compatible type 'Foo'",
283390 );
284391
285392 cases.addCase(x: {
......@@ -294,7 +401,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
294401 \\ inline while (i < n) : (i += 1) { @compileLog("!@#$"); }
295402 \\}
296403 ,
297 ".tmp_source.zig:7:39: error: found compile log statement",
404 "tmp.zig:7:39: error: found compile log statement",
298405 );
299406 tc.expect_exact = true;
300407 break :x tc;
......@@ -306,7 +413,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
306413 \\ 'a'.* = 1;
307414 \\}
308415 ,
309 ".tmp_source.zig:2:8: error: attempt to dereference non-pointer type 'comptime_int'",
416 "tmp.zig:2:8: error: attempt to dereference non-pointer type 'comptime_int'",
310417 );
311418
312419 cases.addTest(
......@@ -315,7 +422,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
315422 \\ const x = 'a'.*[0..];
316423 \\}
317424 ,
318 ".tmp_source.zig:2:18: error: attempt to dereference non-pointer type 'comptime_int'",
425 "tmp.zig:2:18: error: attempt to dereference non-pointer type 'comptime_int'",
319426 );
320427
321428 cases.addTest(
......@@ -324,14 +431,14 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
324431 \\ var z = @truncate(u8, u16(undefined));
325432 \\}
326433 ,
327 ".tmp_source.zig:2:30: error: use of undefined value here causes undefined behavior",
434 "tmp.zig:2:30: error: use of undefined value here causes undefined behavior",
328435 );
329436
330437 cases.addTest(
331438 "return invalid type from test",
332439 \\test "example" { return 1; }
333440 ,
334 ".tmp_source.zig:1:25: error: integer value 1 cannot be implicitly casted to type 'void'",
441 "tmp.zig:1:25: error: integer value 1 cannot be implicitly casted to type 'void'",
335442 );
336443
337444 cases.add(
......@@ -341,7 +448,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
341448 \\ return x;
342449 \\}
343450 ,
344 ".tmp_source.zig:1:13: error: threadlocal variable cannot be constant",
451 "tmp.zig:1:13: error: threadlocal variable cannot be constant",
345452 );
346453
347454 cases.add(
......@@ -350,7 +457,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
350457 \\ threadlocal var x: i32 = 1234;
351458 \\}
352459 ,
353 ".tmp_source.zig:2:5: error: function-local variable 'x' cannot be threadlocal",
460 "tmp.zig:2:5: error: function-local variable 'x' cannot be threadlocal",
354461 );
355462
356463 cases.add(
......@@ -359,7 +466,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
359466 \\ var oops = @bitCast(u7, byte);
360467 \\}
361468 ,
362 ".tmp_source.zig:2:16: error: destination type 'u7' has 7 bits but source type 'u8' has 8 bits",
469 "tmp.zig:2:16: error: destination type 'u7' has 7 bits but source type 'u8' has 8 bits",
363470 );
364471
365472 cases.add(
......@@ -371,7 +478,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
371478 \\ return 5678;
372479 \\}
373480 ,
374 ".tmp_source.zig:2:12: error: `&&` is invalid. Note that `and` is boolean AND.",
481 "tmp.zig:2:12: error: `&&` is invalid. Note that `and` is boolean AND.",
375482 );
376483
377484 cases.add(
......@@ -383,8 +490,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
383490 \\ return 5678;
384491 \\}
385492 ,
386 ".tmp_source.zig:2:9: error: expected error set type, found 'bool'",
387 ".tmp_source.zig:2:11: note: `||` merges error sets; `or` performs boolean OR",
493 "tmp.zig:2:9: error: expected error set type, found 'bool'",
494 "tmp.zig:2:11: note: `||` merges error sets; `or` performs boolean OR",
388495 );
389496
390497 cases.add(
......@@ -393,7 +500,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
393500 \\ @compileLog(@ptrCast(*const c_void, &entry));
394501 \\}
395502 ,
396 ".tmp_source.zig:2:5: error: found compile log statement",
503 "tmp.zig:2:5: error: found compile log statement",
397504 );
398505
399506 cases.add(
......@@ -413,8 +520,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
413520 \\ };
414521 \\}
415522 ,
416 ".tmp_source.zig:5:9: error: duplicate switch value",
417 ".tmp_source.zig:12:9: error: duplicate switch value",
523 "tmp.zig:5:9: error: duplicate switch value",
524 "tmp.zig:12:9: error: duplicate switch value",
418525 );
419526
420527 cases.add(
......@@ -430,8 +537,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
430537 \\ };
431538 \\}
432539 ,
433 ".tmp_source.zig:2:15: error: switch must handle all possibilities",
434 ".tmp_source.zig:7:15: error: switch must handle all possibilities",
540 "tmp.zig:2:15: error: switch must handle all possibilities",
541 "tmp.zig:7:15: error: switch must handle all possibilities",
435542 );
436543
437544 cases.add(
......@@ -443,7 +550,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
443550 \\ const deref = int_ptr.*;
444551 \\}
445552 ,
446 ".tmp_source.zig:5:26: error: attempt to read 4 bytes from [4]u8 at index 1 which is 3 bytes",
553 "tmp.zig:5:26: error: attempt to read 4 bytes from [4]u8 at index 1 which is 3 bytes",
447554 );
448555
449556 cases.add(
......@@ -454,8 +561,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
454561 \\ do_the_thing(bar);
455562 \\}
456563 ,
457 ".tmp_source.zig:4:18: error: expected type 'fn(i32) void', found 'fn(bool) void",
458 ".tmp_source.zig:4:18: note: parameter 0: 'bool' cannot cast into 'i32'",
564 "tmp.zig:4:18: error: expected type 'fn(i32) void', found 'fn(bool) void",
565 "tmp.zig:4:18: note: parameter 0: 'bool' cannot cast into 'i32'",
459566 );
460567
461568 cases.add(
......@@ -469,8 +576,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
469576 \\ const unsigned: u32 = value;
470577 \\}
471578 ,
472 ".tmp_source.zig:3:36: error: cannot cast negative value -1 to unsigned integer type 'u32'",
473 ".tmp_source.zig:7:27: error: cannot cast negative value -1 to unsigned integer type 'u32'",
579 "tmp.zig:3:36: error: cannot cast negative value -1 to unsigned integer type 'u32'",
580 "tmp.zig:7:27: error: cannot cast negative value -1 to unsigned integer type 'u32'",
474581 );
475582
476583 cases.add(
......@@ -488,9 +595,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
488595 \\ var byte: u8 = spartan_count;
489596 \\}
490597 ,
491 ".tmp_source.zig:3:31: error: integer value 300 cannot be implicitly casted to type 'u8'",
492 ".tmp_source.zig:7:22: error: integer value 300 cannot be implicitly casted to type 'u8'",
493 ".tmp_source.zig:11:20: error: expected type 'u8', found 'u16'",
598 "tmp.zig:3:31: error: integer value 300 cannot be implicitly casted to type 'u8'",
599 "tmp.zig:7:22: error: integer value 300 cannot be implicitly casted to type 'u8'",
600 "tmp.zig:11:20: error: expected type 'u8', found 'u16'",
494601 );
495602
496603 cases.add(
......@@ -500,7 +607,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
500607 \\ const y: f32 = x;
501608 \\}
502609 ,
503 ".tmp_source.zig:3:20: error: cast of value 16777217.000000 to type 'f32' loses information",
610 "tmp.zig:3:20: error: cast of value 16777217.000000 to type 'f32' loses information",
504611 );
505612
506613 cases.add(
......@@ -510,7 +617,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
510617 \\
511618 \\export fn entry() usize { return @sizeOf(@typeOf(y)); }
512619 ,
513 ".tmp_source.zig:2:14: error: expected type 'f32', found 'f64'",
620 "tmp.zig:2:14: error: expected type 'f32', found 'f64'",
514621 );
515622
516623 cases.add(
......@@ -522,28 +629,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
522629 \\ var x: i65536 = 1;
523630 \\}
524631 ,
525 ".tmp_source.zig:2:31: error: integer value 65536 cannot be implicitly casted to type 'u16'",
526 ".tmp_source.zig:5:12: error: primitive integer type 'i65536' exceeds maximum bit width of 65535",
527 );
528
529 cases.add(
530 "wrong panic signature, runtime function",
531 \\test "" {}
532 \\
533 \\pub fn panic() void {}
534 \\
535 ,
536 ".tmp_source.zig:3:5: error: expected type 'fn([]const u8, ?*StackTrace) noreturn', found 'fn() void'",
537 );
538
539 cases.add(
540 "wrong panic signature, generic function",
541 \\pub fn panic(comptime msg: []const u8, error_return_trace: ?*builtin.StackTrace) noreturn {
542 \\ while (true) {}
543 \\}
544 ,
545 ".tmp_source.zig:1:5: error: expected type 'fn([]const u8, ?*StackTrace) noreturn', found 'fn([]const u8,var)var'",
546 ".tmp_source.zig:1:5: note: only one of the functions is generic",
632 "tmp.zig:2:31: error: integer value 65536 cannot be implicitly casted to type 'u16'",
633 "tmp.zig:5:12: error: primitive integer type 'i65536' exceeds maximum bit width of 65535",
547634 );
548635
549636 cases.add(
......@@ -556,7 +643,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
556643 \\ const car = Car.init();
557644 \\}
558645 ,
559 ".tmp_source.zig:2:11: error: use of undeclared identifier 'SymbolThatDoesNotExist'",
646 "tmp.zig:2:11: error: use of undeclared identifier 'SymbolThatDoesNotExist'",
560647 );
561648
562649 cases.add(
......@@ -568,7 +655,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
568655 \\ var ptr2: *c_void = &b;
569656 \\}
570657 ,
571 ".tmp_source.zig:5:26: error: expected type '*c_void', found '**u32'",
658 "tmp.zig:5:26: error: expected type '*c_void', found '**u32'",
572659 );
573660
574661 cases.add(
......@@ -584,7 +671,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
584671 \\ const field = @typeInfo(Struct).Struct.fields[index];
585672 \\}
586673 ,
587 ".tmp_source.zig:9:51: error: values of type 'StructField' must be comptime known, but index value is runtime known",
674 "tmp.zig:9:51: error: values of type 'builtin.StructField' must be comptime known, but index value is runtime known",
588675 );
589676
590677 cases.add(
......@@ -598,7 +685,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
598685 \\ _ = @typeName(Foo(i32));
599686 \\}
600687 ,
601 ".tmp_source.zig:2:5: error: found compile log statement",
688 "tmp.zig:2:5: error: found compile log statement",
602689 );
603690
604691 cases.add(
......@@ -608,7 +695,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
608695 \\ var b = a[0..10];
609696 \\}
610697 ,
611 ".tmp_source.zig:3:14: error: slice of undefined",
698 "tmp.zig:3:14: error: slice of undefined",
612699 );
613700
614701 cases.add(
......@@ -618,7 +705,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
618705 \\ const sliceA: []u8 = &buffer;
619706 \\}
620707 ,
621 ".tmp_source.zig:3:27: error: expected type '[]u8', found '*const [1]u8'",
708 "tmp.zig:3:27: error: expected type '[]u8', found '*const [1]u8'",
622709 );
623710
624711 cases.add(
......@@ -628,7 +715,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
628715 \\ _ = a.*.len;
629716 \\}
630717 ,
631 ".tmp_source.zig:3:10: error: attempt to dereference non-pointer type '[]u8'",
718 "tmp.zig:3:10: error: attempt to dereference non-pointer type '[]u8'",
632719 );
633720
634721 cases.add(
......@@ -639,9 +726,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
639726 \\ return p == null;
640727 \\}
641728 ,
642 ".tmp_source.zig:3:15: error: '*u0' and '?*u0' do not have the same in-memory representation",
643 ".tmp_source.zig:3:31: note: '*u0' has no in-memory bits",
644 ".tmp_source.zig:3:24: note: '?*u0' has in-memory bits",
729 "tmp.zig:3:15: error: '*u0' and '?*u0' do not have the same in-memory representation",
730 "tmp.zig:3:31: note: '*u0' has no in-memory bits",
731 "tmp.zig:3:24: note: '?*u0' has in-memory bits",
645732 );
646733
647734 cases.add(
......@@ -651,7 +738,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
651738 \\ _ = &x == null;
652739 \\}
653740 ,
654 ".tmp_source.zig:3:12: error: comparison against null can only be done with optionals",
741 "tmp.zig:3:12: error: comparison against null can only be done with optionals",
655742 );
656743
657744 cases.add(
......@@ -663,10 +750,10 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
663750 \\ const Errors = error{} || u16;
664751 \\}
665752 ,
666 ".tmp_source.zig:2:20: error: expected error set type, found type 'u8'",
667 ".tmp_source.zig:2:23: note: `||` merges error sets; `or` performs boolean OR",
668 ".tmp_source.zig:5:31: error: expected error set type, found type 'u16'",
669 ".tmp_source.zig:5:28: note: `||` merges error sets; `or` performs boolean OR",
753 "tmp.zig:2:20: error: expected error set type, found type 'u8'",
754 "tmp.zig:2:23: note: `||` merges error sets; `or` performs boolean OR",
755 "tmp.zig:5:31: error: expected error set type, found type 'u16'",
756 "tmp.zig:5:28: note: `||` merges error sets; `or` performs boolean OR",
670757 );
671758
672759 cases.add(
......@@ -684,7 +771,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
684771 \\ const S = Gen();
685772 \\}
686773 ,
687 ".tmp_source.zig:2:12: error: use of undeclared identifier 'T'",
774 "tmp.zig:2:12: error: use of undeclared identifier 'T'",
688775 );
689776
690777 cases.add(
......@@ -695,7 +782,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
695782 \\ f(i32);
696783 \\}
697784 ,
698 ".tmp_source.zig:4:5: error: use of undefined value here causes undefined behavior",
785 "tmp.zig:4:5: error: use of undefined value here causes undefined behavior",
699786 );
700787
701788 cases.add(
......@@ -713,9 +800,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
713800 \\ var x = func(3);
714801 \\}
715802 ,
716 ".tmp_source.zig:4:24: error: 'y' not accessible from inner function",
717 ".tmp_source.zig:3:28: note: crossed function definition here",
718 ".tmp_source.zig:1:10: note: declared here",
803 "tmp.zig:4:24: error: 'y' not accessible from inner function",
804 "tmp.zig:3:28: note: crossed function definition here",
805 "tmp.zig:1:10: note: declared here",
719806 );
720807
721808 cases.add(
......@@ -724,7 +811,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
724811 \\ const x = @intToFloat(f32, 1.1);
725812 \\}
726813 ,
727 ".tmp_source.zig:2:32: error: expected int type, found 'comptime_float'",
814 "tmp.zig:2:32: error: expected int type, found 'comptime_float'",
728815 );
729816
730817 cases.add(
......@@ -733,7 +820,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
733820 \\ const x = @floatToInt(i32, i32(54));
734821 \\}
735822 ,
736 ".tmp_source.zig:2:35: error: expected float type, found 'i32'",
823 "tmp.zig:2:35: error: expected float type, found 'i32'",
737824 );
738825
739826 cases.add(
......@@ -742,7 +829,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
742829 \\ const x = @floatToInt(i8, 200);
743830 \\}
744831 ,
745 ".tmp_source.zig:2:31: error: integer value 200 cannot be implicitly casted to type 'i8'",
832 "tmp.zig:2:31: error: integer value 200 cannot be implicitly casted to type 'i8'",
746833 );
747834
748835 cases.add(
......@@ -754,7 +841,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
754841 \\ const int_val = int_ptr.*;
755842 \\}
756843 ,
757 ".tmp_source.zig:5:28: error: attempt to read 8 bytes from pointer to f32 which is 4 bytes",
844 "tmp.zig:5:28: error: attempt to read 8 bytes from pointer to f32 which is 4 bytes",
758845 );
759846
760847 cases.add(
......@@ -767,7 +854,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
767854 \\ const a = items[0];
768855 \\}
769856 ,
770 ".tmp_source.zig:2:12: error: use of undeclared identifier 'SomeNonexistentType'",
857 "tmp.zig:2:12: error: use of undeclared identifier 'SomeNonexistentType'",
771858 );
772859
773860 cases.add(
......@@ -778,7 +865,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
778865 \\ @noInlineCall(foo);
779866 \\}
780867 ,
781 ".tmp_source.zig:4:5: error: no-inline call of inline function",
868 "tmp.zig:4:5: error: no-inline call of inline function",
782869 );
783870
784871 cases.add(
......@@ -795,8 +882,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
795882 \\ }
796883 \\}
797884 ,
798 ".tmp_source.zig:6:19: error: comptime control flow inside runtime block",
799 ".tmp_source.zig:5:9: note: runtime block created here",
885 "tmp.zig:6:19: error: comptime control flow inside runtime block",
886 "tmp.zig:5:9: note: runtime block created here",
800887 );
801888
802889 cases.add(
......@@ -812,8 +899,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
812899 \\ }
813900 \\}
814901 ,
815 ".tmp_source.zig:6:13: error: comptime control flow inside runtime block",
816 ".tmp_source.zig:5:9: note: runtime block created here",
902 "tmp.zig:6:13: error: comptime control flow inside runtime block",
903 "tmp.zig:5:9: note: runtime block created here",
817904 );
818905
819906 cases.add(
......@@ -827,8 +914,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
827914 \\ }
828915 \\}
829916 ,
830 ".tmp_source.zig:5:23: error: comptime control flow inside runtime block",
831 ".tmp_source.zig:5:9: note: runtime block created here",
917 "tmp.zig:5:23: error: comptime control flow inside runtime block",
918 "tmp.zig:5:9: note: runtime block created here",
832919 );
833920
834921 cases.add(
......@@ -842,8 +929,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
842929 \\ }
843930 \\}
844931 ,
845 ".tmp_source.zig:5:25: error: comptime control flow inside runtime block",
846 ".tmp_source.zig:5:9: note: runtime block created here",
932 "tmp.zig:5:25: error: comptime control flow inside runtime block",
933 "tmp.zig:5:9: note: runtime block created here",
847934 );
848935
849936 cases.add(
......@@ -857,8 +944,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
857944 \\ }
858945 \\}
859946 ,
860 ".tmp_source.zig:5:20: error: comptime control flow inside runtime block",
861 ".tmp_source.zig:5:9: note: runtime block created here",
947 "tmp.zig:5:20: error: comptime control flow inside runtime block",
948 "tmp.zig:5:9: note: runtime block created here",
862949 );
863950
864951 cases.add(
......@@ -872,8 +959,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
872959 \\ }
873960 \\}
874961 ,
875 ".tmp_source.zig:5:20: error: comptime control flow inside runtime block",
876 ".tmp_source.zig:5:9: note: runtime block created here",
962 "tmp.zig:5:20: error: comptime control flow inside runtime block",
963 "tmp.zig:5:9: note: runtime block created here",
877964 );
878965
879966 cases.add(
......@@ -887,8 +974,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
887974 \\ }
888975 \\}
889976 ,
890 ".tmp_source.zig:5:22: error: comptime control flow inside runtime block",
891 ".tmp_source.zig:5:9: note: runtime block created here",
977 "tmp.zig:5:22: error: comptime control flow inside runtime block",
978 "tmp.zig:5:9: note: runtime block created here",
892979 );
893980
894981 cases.add(
......@@ -904,7 +991,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
904991 \\ };
905992 \\}
906993 ,
907 ".tmp_source.zig:7:17: error: switch on type 'type' provides no expression parameter",
994 "tmp.zig:7:17: error: switch on type 'type' provides no expression parameter",
908995 );
909996
910997 cases.add(
......@@ -914,24 +1001,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
9141001 \\ foo();
9151002 \\}
9161003 ,
917 ".tmp_source.zig:1:1: error: non-extern function has no body",
918 );
919
920 cases.add(
921 "@typeInfo causing depend on itself compile error",
922 \\const start = struct {
923 \\ fn crash() bug() {
924 \\ return bug;
925 \\ }
926 \\};
927 \\fn bug() void {
928 \\ _ = @typeInfo(start).Struct;
929 \\}
930 \\export fn entry() void {
931 \\ var boom = start.crash();
932 \\}
933 ,
934 ".tmp_source.zig:2:5: error: 'crash' depends on itself",
1004 "tmp.zig:1:1: error: non-extern function has no body",
9351005 );
9361006
9371007 cases.add(
......@@ -942,7 +1012,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
9421012 \\ return handle_undef == handle_dummy;
9431013 \\}
9441014 ,
945 ".tmp_source.zig:2:29: error: @handle() called outside of function definition",
1015 "tmp.zig:2:29: error: @handle() called outside of function definition",
9461016 );
9471017
9481018 cases.add(
......@@ -952,7 +1022,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
9521022 \\ return handle_undef == @handle();
9531023 \\}
9541024 ,
955 ".tmp_source.zig:3:28: error: @handle() in non-async function",
1025 "tmp.zig:3:28: error: @handle() in non-async function",
9561026 );
9571027
9581028 cases.add(
......@@ -962,8 +1032,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
9621032 \\ return _;
9631033 \\}
9641034 ,
965 ".tmp_source.zig:2:5: error: `_` is not a declarable symbol",
966 ".tmp_source.zig:3:12: error: use of undeclared identifier '_'",
1035 "tmp.zig:2:5: error: `_` is not a declarable symbol",
1036 "tmp.zig:3:12: error: use of undeclared identifier '_'",
9671037 );
9681038
9691039 cases.add(
......@@ -976,7 +1046,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
9761046 \\ }
9771047 \\}
9781048 ,
979 ".tmp_source.zig:4:20: error: use of undeclared identifier '_'",
1049 "tmp.zig:4:20: error: use of undeclared identifier '_'",
9801050 );
9811051
9821052 cases.add(
......@@ -992,7 +1062,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
9921062 \\ return 1;
9931063 \\}
9941064 ,
995 ".tmp_source.zig:4:20: error: use of undeclared identifier '_'",
1065 "tmp.zig:4:20: error: use of undeclared identifier '_'",
9961066 );
9971067
9981068 cases.add(
......@@ -1010,7 +1080,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
10101080 \\ return error.optionalReturnError;
10111081 \\}
10121082 ,
1013 ".tmp_source.zig:6:17: error: use of undeclared identifier '_'",
1083 "tmp.zig:6:17: error: use of undeclared identifier '_'",
10141084 );
10151085
10161086 cases.add(
......@@ -1030,9 +1100,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
10301100 \\ while (x) |_| returns() else |_| unreachable;
10311101 \\}
10321102 ,
1033 ".tmp_source.zig:5:25: error: expression value is ignored",
1034 ".tmp_source.zig:9:26: error: expression value is ignored",
1035 ".tmp_source.zig:13:26: error: expression value is ignored",
1103 "tmp.zig:5:25: error: expression value is ignored",
1104 "tmp.zig:9:26: error: expression value is ignored",
1105 "tmp.zig:13:26: error: expression value is ignored",
10361106 );
10371107
10381108 cases.add(
......@@ -1043,7 +1113,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
10431113 \\ dump(a);
10441114 \\}
10451115 ,
1046 ".tmp_source.zig:1:9: error: missing parameter name",
1116 "tmp.zig:1:9: error: missing parameter name",
10471117 );
10481118
10491119 cases.add(
......@@ -1057,7 +1127,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
10571127 \\ for (xx) |f| {}
10581128 \\}
10591129 ,
1060 ".tmp_source.zig:7:15: error: variable of type 'Foo' must be const or comptime",
1130 "tmp.zig:7:15: error: variable of type 'Foo' must be const or comptime",
10611131 );
10621132
10631133 cases.add(
......@@ -1068,7 +1138,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
10681138 \\ f(g);
10691139 \\}
10701140 ,
1071 ".tmp_source.zig:1:9: error: parameter of type 'fn(var)var' must be declared comptime",
1141 "tmp.zig:1:9: error: parameter of type 'fn(var)var' must be declared comptime",
10721142 );
10731143
10741144 cases.add(
......@@ -1082,7 +1152,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
10821152 \\};
10831153 \\export fn entry(bar: *Bar) void {}
10841154 ,
1085 ".tmp_source.zig:2:5: error: extern structs cannot contain fields of type '?*const void'",
1155 "tmp.zig:2:5: error: extern structs cannot contain fields of type '?*const void'",
10861156 );
10871157
10881158 cases.add(
......@@ -1095,7 +1165,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
10951165 \\ command.exec();
10961166 \\}
10971167 ,
1098 ".tmp_source.zig:6:12: error: use of undefined value here causes undefined behavior",
1168 "tmp.zig:6:12: error: use of undefined value here causes undefined behavior",
10991169 );
11001170
11011171 cases.add(
......@@ -1108,7 +1178,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
11081178 \\ command.exec();
11091179 \\}
11101180 ,
1111 ".tmp_source.zig:6:12: error: use of undefined value here causes undefined behavior",
1181 "tmp.zig:6:12: error: use of undefined value here causes undefined behavior",
11121182 );
11131183
11141184 cases.add(
......@@ -1118,7 +1188,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
11181188 \\ const aligned = @alignCast(4, ptr);
11191189 \\}
11201190 ,
1121 ".tmp_source.zig:3:35: error: pointer address 0x1 is not aligned to 4 bytes",
1191 "tmp.zig:3:35: error: pointer address 0x1 is not aligned to 4 bytes",
11221192 );
11231193
11241194 cases.add(
......@@ -1127,7 +1197,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
11271197 \\ return @ptrToInt(&{}) == @ptrToInt(&{});
11281198 \\}
11291199 ,
1130 ".tmp_source.zig:2:23: error: pointer to size 0 type has no address",
1200 "tmp.zig:2:23: error: pointer to size 0 type has no address",
11311201 );
11321202
11331203 cases.add(
......@@ -1136,7 +1206,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
11361206 \\ return @popCount(x);
11371207 \\}
11381208 ,
1139 ".tmp_source.zig:2:22: error: expected integer type, found 'f32'",
1209 "tmp.zig:2:22: error: expected integer type, found 'f32'",
11401210 );
11411211
11421212 cases.add(
......@@ -1145,7 +1215,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
11451215 \\ _ = @popCount(-1);
11461216 \\}
11471217 ,
1148 ".tmp_source.zig:2:9: error: @popCount on negative comptime_int value -1",
1218 "tmp.zig:2:9: error: @popCount on negative comptime_int value -1",
11491219 );
11501220
11511221 cases.addCase(x: {
......@@ -1161,10 +1231,10 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
11611231 \\
11621232 \\fn bar(x: *b.Foo) void {}
11631233 ,
1164 ".tmp_source.zig:6:10: error: expected type '*Foo', found '*Foo'",
1165 ".tmp_source.zig:6:10: note: pointer type child 'Foo' cannot cast into pointer type child 'Foo'",
1166 "a.zig:1:17: note: Foo declared here",
1167 "b.zig:1:17: note: Foo declared here",
1234 "tmp.zig:6:10: error: expected type '*b.Foo', found '*a.Foo'",
1235 "tmp.zig:6:10: note: pointer type child 'a.Foo' cannot cast into pointer type child 'b.Foo'",
1236 "a.zig:1:17: note: a.Foo declared here",
1237 "b.zig:1:17: note: b.Foo declared here",
11681238 );
11691239
11701240 tc.addSourceFile("a.zig",
......@@ -1182,19 +1252,6 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
11821252 break :x tc;
11831253 });
11841254
1185 cases.add(
1186 "enum field value references enum",
1187 \\pub const Foo = extern enum {
1188 \\ A = Foo.B,
1189 \\ C = D,
1190 \\};
1191 \\export fn entry() void {
1192 \\ var s: Foo = Foo.E;
1193 \\}
1194 ,
1195 ".tmp_source.zig:1:17: error: 'Foo' depends on itself",
1196 );
1197
11981255 cases.add(
11991256 "@floatToInt comptime safety",
12001257 \\comptime {
......@@ -1207,9 +1264,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
12071264 \\ _ = @floatToInt(u8, f32(256.1));
12081265 \\}
12091266 ,
1210 ".tmp_source.zig:2:9: error: integer value '-129' cannot be stored in type 'i8'",
1211 ".tmp_source.zig:5:9: error: integer value '-1' cannot be stored in type 'u8'",
1212 ".tmp_source.zig:8:9: error: integer value '256' cannot be stored in type 'u8'",
1267 "tmp.zig:2:9: error: integer value '-129' cannot be stored in type 'i8'",
1268 "tmp.zig:5:9: error: integer value '-1' cannot be stored in type 'u8'",
1269 "tmp.zig:8:9: error: integer value '256' cannot be stored in type 'u8'",
12131270 );
12141271
12151272 cases.add(
......@@ -1218,7 +1275,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
12181275 \\ const a: fn () c_void = undefined;
12191276 \\}
12201277 ,
1221 ".tmp_source.zig:2:20: error: return type cannot be opaque",
1278 "tmp.zig:2:20: error: return type cannot be opaque",
12221279 );
12231280
12241281 cases.add(
......@@ -1231,7 +1288,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
12311288 \\ var y = p.*;
12321289 \\}
12331290 ,
1234 ".tmp_source.zig:4:23: error: expected type '*?*i32', found '**i32'",
1291 "tmp.zig:4:23: error: expected type '*?*i32', found '**i32'",
12351292 );
12361293
12371294 cases.add(
......@@ -1240,7 +1297,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
12401297 \\ const x: [*]const bool = true;
12411298 \\}
12421299 ,
1243 ".tmp_source.zig:2:30: error: expected type '[*]const bool', found 'bool'",
1300 "tmp.zig:2:30: error: expected type '[*]const bool', found 'bool'",
12441301 );
12451302
12461303 cases.add(
......@@ -1249,7 +1306,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
12491306 \\ return x.*;
12501307 \\}
12511308 ,
1252 ".tmp_source.zig:2:13: error: index syntax required for unknown-length pointer type '[*]i32'",
1309 "tmp.zig:2:13: error: index syntax required for unknown-length pointer type '[*]i32'",
12531310 );
12541311
12551312 cases.add(
......@@ -1262,14 +1319,14 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
12621319 \\ foo.a += 1;
12631320 \\}
12641321 ,
1265 ".tmp_source.zig:6:8: error: type '[*]Foo' does not support field access",
1322 "tmp.zig:6:8: error: type '[*]Foo' does not support field access",
12661323 );
12671324
12681325 cases.add(
12691326 "unknown length pointer to opaque",
12701327 \\export const T = [*]@OpaqueType();
12711328 ,
1272 ".tmp_source.zig:1:18: error: unknown-length pointer to opaque",
1329 "tmp.zig:1:18: error: unknown-length pointer to opaque",
12731330 );
12741331
12751332 cases.add(
......@@ -1285,7 +1342,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
12851342 \\ var rule_set = try Foo.init();
12861343 \\}
12871344 ,
1288 ".tmp_source.zig:2:13: error: expected type 'i32', found 'type'",
1345 "tmp.zig:2:13: error: expected type 'i32', found 'type'",
12891346 );
12901347
12911348 cases.add(
......@@ -1294,7 +1351,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
12941351 \\ const slice = ptr[0..2];
12951352 \\}
12961353 ,
1297 ".tmp_source.zig:2:22: error: slice of single-item pointer",
1354 "tmp.zig:2:22: error: slice of single-item pointer",
12981355 );
12991356
13001357 cases.add(
......@@ -1303,7 +1360,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
13031360 \\ return ptr[1];
13041361 \\}
13051362 ,
1306 ".tmp_source.zig:2:15: error: index of single-item pointer",
1363 "tmp.zig:2:15: error: index of single-item pointer",
13071364 );
13081365
13091366 cases.add(
......@@ -1319,10 +1376,10 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
13191376 \\ return null;
13201377 \\}
13211378 ,
1322 ".tmp_source.zig:5:34: error: expected type '?NextError!i32', found '?OtherError!i32'",
1323 ".tmp_source.zig:5:34: note: optional type child 'OtherError!i32' cannot cast into optional type child 'NextError!i32'",
1324 ".tmp_source.zig:5:34: note: error set 'OtherError' cannot cast into error set 'NextError'",
1325 ".tmp_source.zig:2:26: note: 'error.OutOfMemory' not a member of destination error set",
1379 "tmp.zig:5:34: error: expected type '?NextError!i32', found '?OtherError!i32'",
1380 "tmp.zig:5:34: note: optional type child 'OtherError!i32' cannot cast into optional type child 'NextError!i32'",
1381 "tmp.zig:5:34: note: error set 'OtherError' cannot cast into error set 'NextError'",
1382 "tmp.zig:2:26: note: 'error.OutOfMemory' not a member of destination error set",
13261383 );
13271384
13281385 cases.add(
......@@ -1339,14 +1396,14 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
13391396 \\ Filled,
13401397 \\};
13411398 ,
1342 ".tmp_source.zig:3:17: error: attempt to dereference non-pointer type 'Tile'",
1399 "tmp.zig:3:17: error: attempt to dereference non-pointer type 'Tile'",
13431400 );
13441401
13451402 cases.add(
13461403 "invalid field access in comptime",
13471404 \\comptime { var x = doesnt_exist.whatever; }
13481405 ,
1349 ".tmp_source.zig:1:20: error: use of undeclared identifier 'doesnt_exist'",
1406 "tmp.zig:1:20: error: use of undeclared identifier 'doesnt_exist'",
13501407 );
13511408
13521409 cases.add(
......@@ -1367,8 +1424,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
13671424 \\ }
13681425 \\}
13691426 ,
1370 ".tmp_source.zig:12:9: error: cannot suspend inside suspend block",
1371 ".tmp_source.zig:11:5: note: other suspend block here",
1427 "tmp.zig:12:9: error: cannot suspend inside suspend block",
1428 "tmp.zig:11:5: note: other suspend block here",
13721429 );
13731430
13741431 cases.add(
......@@ -1378,8 +1435,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
13781435 \\}
13791436 \\inline fn b() void { }
13801437 ,
1381 ".tmp_source.zig:2:5: error: functions marked inline must be stored in const or comptime var",
1382 ".tmp_source.zig:4:1: note: declared here",
1438 "tmp.zig:2:5: error: functions marked inline must be stored in const or comptime var",
1439 "tmp.zig:4:1: note: declared here",
13831440 );
13841441
13851442 cases.add(
......@@ -1389,7 +1446,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
13891446 \\ @panic(e);
13901447 \\}
13911448 ,
1392 ".tmp_source.zig:3:12: error: expected type '[]const u8', found 'error{Foo}'",
1449 "tmp.zig:3:12: error: expected type '[]const u8', found 'error{Foo}'",
13931450 );
13941451
13951452 cases.add(
......@@ -1403,8 +1460,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
14031460 \\ var tagName = @tagName(fi);
14041461 \\}
14051462 ,
1406 ".tmp_source.zig:7:19: error: union has no associated enum",
1407 ".tmp_source.zig:1:18: note: declared here",
1463 "tmp.zig:7:19: error: union has no associated enum",
1464 "tmp.zig:1:18: note: declared here",
14081465 );
14091466
14101467 cases.add(
......@@ -1417,7 +1474,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
14171474 \\ return error.ShouldBeCompileError;
14181475 \\}
14191476 ,
1420 ".tmp_source.zig:6:17: error: expected type 'void', found 'error{ShouldBeCompileError}'",
1477 "tmp.zig:6:17: error: expected type 'void', found 'error{ShouldBeCompileError}'",
14211478 );
14221479
14231480 cases.add(
......@@ -1426,7 +1483,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
14261483 \\ var s = (struct{v: var}){.v=i32(10)};
14271484 \\}
14281485 ,
1429 ".tmp_source.zig:2:23: error: invalid token: 'var'",
1486 "tmp.zig:2:23: error: invalid token: 'var'",
14301487 );
14311488
14321489 cases.add(
......@@ -1436,7 +1493,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
14361493 \\ const y = @ptrCast(*i32, &x);
14371494 \\}
14381495 ,
1439 ".tmp_source.zig:3:15: error: cast discards const qualifier",
1496 "tmp.zig:3:15: error: cast discards const qualifier",
14401497 );
14411498
14421499 cases.add(
......@@ -1445,7 +1502,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
14451502 \\ const slice = ([*]i32)(undefined)[0..1];
14461503 \\}
14471504 ,
1448 ".tmp_source.zig:2:38: error: non-zero length slice of undefined pointer",
1505 "tmp.zig:2:38: error: non-zero length slice of undefined pointer",
14491506 );
14501507
14511508 cases.add(
......@@ -1460,7 +1517,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
14601517 \\ a(c);
14611518 \\}
14621519 ,
1463 ".tmp_source.zig:8:7: error: expected type 'fn(*const u8) void', found 'fn(u8) void'",
1520 "tmp.zig:8:7: error: expected type 'fn(*const u8) void', found 'fn(u8) void'",
14641521 );
14651522
14661523 cases.add(
......@@ -1474,7 +1531,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
14741531 \\ }
14751532 \\}
14761533 ,
1477 ".tmp_source.zig:5:5: error: else prong required when switching on type 'anyerror'",
1534 "tmp.zig:5:5: error: else prong required when switching on type 'anyerror'",
14781535 );
14791536
14801537 cases.add(
......@@ -1485,7 +1542,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
14851542 \\fn foo() !void {
14861543 \\}
14871544 ,
1488 ".tmp_source.zig:4:11: error: function with inferred error set must return at least one possible error",
1545 "tmp.zig:4:11: error: function with inferred error set must return at least one possible error",
14891546 );
14901547
14911548 cases.add(
......@@ -1504,8 +1561,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
15041561 \\ }
15051562 \\}
15061563 ,
1507 ".tmp_source.zig:2:26: error: error.Baz not handled in switch",
1508 ".tmp_source.zig:2:26: error: error.Bar not handled in switch",
1564 "tmp.zig:2:26: error: error.Baz not handled in switch",
1565 "tmp.zig:2:26: error: error.Bar not handled in switch",
15091566 );
15101567
15111568 cases.add(
......@@ -1526,8 +1583,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
15261583 \\ }
15271584 \\}
15281585 ,
1529 ".tmp_source.zig:5:14: error: duplicate switch value: '@typeOf(foo).ReturnType.ErrorSet.Foo'",
1530 ".tmp_source.zig:3:14: note: other value is here",
1586 "tmp.zig:5:14: error: duplicate switch value: '@typeOf(foo).ReturnType.ErrorSet.Foo'",
1587 "tmp.zig:3:14: note: other value is here",
15311588 );
15321589
15331590 cases.add("invalid cast from integral type to enum",
......@@ -1542,7 +1599,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
15421599 \\ E.One => {},
15431600 \\ }
15441601 \\}
1545 , ".tmp_source.zig:9:10: error: expected type 'usize', found 'E'");
1602 , "tmp.zig:9:10: error: expected type 'usize', found 'E'");
15461603
15471604 cases.add(
15481605 "range operator in switch used on error set",
......@@ -1560,7 +1617,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
15601617 \\ }
15611618 \\}
15621619 ,
1563 ".tmp_source.zig:3:17: error: operator not allowed for errors",
1620 "tmp.zig:3:17: error: operator not allowed for errors",
15641621 );
15651622
15661623 cases.add(
......@@ -1569,7 +1626,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
15691626 \\ const z: ?fn()!void = null;
15701627 \\}
15711628 ,
1572 ".tmp_source.zig:2:15: error: inferring error set of return type valid only for function definitions",
1629 "tmp.zig:2:15: error: inferring error set of return type valid only for function definitions",
15731630 );
15741631
15751632 cases.add(
......@@ -1579,7 +1636,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
15791636 \\ const z = Foo.Bar;
15801637 \\}
15811638 ,
1582 ".tmp_source.zig:3:18: error: no error named 'Bar' in 'Foo'",
1639 "tmp.zig:3:18: error: no error named 'Bar' in 'Foo'",
15831640 );
15841641
15851642 cases.add(
......@@ -1588,7 +1645,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
15881645 \\ const z = i32!i32;
15891646 \\}
15901647 ,
1591 ".tmp_source.zig:2:15: error: expected error set type, found type 'i32'",
1648 "tmp.zig:2:15: error: expected error set type, found type 'i32'",
15921649 );
15931650
15941651 cases.add(
......@@ -1604,7 +1661,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
16041661 \\ }
16051662 \\}
16061663 ,
1607 ".tmp_source.zig:7:11: error: error sets 'Set1' and 'Set2' have no common errors",
1664 "tmp.zig:7:11: error: error sets 'Set1' and 'Set2' have no common errors",
16081665 );
16091666
16101667 cases.add(
......@@ -1613,7 +1670,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
16131670 \\ const z = error.A > error.B;
16141671 \\}
16151672 ,
1616 ".tmp_source.zig:2:23: error: operator not allowed for errors",
1673 "tmp.zig:2:23: error: operator not allowed for errors",
16171674 );
16181675
16191676 cases.add(
......@@ -1625,7 +1682,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
16251682 \\ var y = @errSetCast(Set2, x);
16261683 \\}
16271684 ,
1628 ".tmp_source.zig:5:13: error: error.B not a member of error set 'Set2'",
1685 "tmp.zig:5:13: error: error.B not a member of error set 'Set2'",
16291686 );
16301687
16311688 cases.add(
......@@ -1638,9 +1695,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
16381695 \\ return error.B;
16391696 \\}
16401697 ,
1641 ".tmp_source.zig:3:35: error: expected type 'SmallErrorSet!i32', found 'anyerror!i32'",
1642 ".tmp_source.zig:3:35: note: error set 'anyerror' cannot cast into error set 'SmallErrorSet'",
1643 ".tmp_source.zig:3:35: note: cannot cast global error set into smaller set",
1698 "tmp.zig:3:35: error: expected type 'SmallErrorSet!i32', found 'anyerror!i32'",
1699 "tmp.zig:3:35: note: error set 'anyerror' cannot cast into error set 'SmallErrorSet'",
1700 "tmp.zig:3:35: note: cannot cast global error set into smaller set",
16441701 );
16451702
16461703 cases.add(
......@@ -1653,10 +1710,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
16531710 \\ return error.B;
16541711 \\}
16551712 ,
1656 ".tmp_source.zig:3:31: error: expected type 'SmallErrorSet', found 'anyerror'",
1657 ".tmp_source.zig:3:31: note: cannot cast global error set into smaller set",
1713 "tmp.zig:3:31: error: expected type 'SmallErrorSet', found 'anyerror'",
1714 "tmp.zig:3:31: note: cannot cast global error set into smaller set",
16581715 );
1659
16601716 cases.add(
16611717 "recursive inferred error set",
16621718 \\export fn entry() void {
......@@ -1666,7 +1722,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
16661722 \\ try foo();
16671723 \\}
16681724 ,
1669 ".tmp_source.zig:5:5: error: cannot resolve inferred error set '@typeOf(foo).ReturnType.ErrorSet': function 'foo' not fully analyzed yet",
1725 "tmp.zig:5:5: error: cannot resolve inferred error set '@typeOf(foo).ReturnType.ErrorSet': function 'foo' not fully analyzed yet",
16701726 );
16711727
16721728 cases.add(
......@@ -1680,8 +1736,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
16801736 \\ var x: Set2 = set1;
16811737 \\}
16821738 ,
1683 ".tmp_source.zig:7:19: error: expected type 'Set2', found 'Set1'",
1684 ".tmp_source.zig:1:23: note: 'error.B' not a member of destination error set",
1739 "tmp.zig:7:19: error: expected type 'Set2', found 'Set1'",
1740 "tmp.zig:1:23: note: 'error.B' not a member of destination error set",
16851741 );
16861742
16871743 cases.add(
......@@ -1695,7 +1751,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
16951751 \\ var y = @intToError(x);
16961752 \\}
16971753 ,
1698 ".tmp_source.zig:7:13: error: integer value 3 represents no error",
1754 "tmp.zig:7:13: error: integer value 3 represents no error",
16991755 );
17001756
17011757 cases.add(
......@@ -1713,7 +1769,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
17131769 \\ var y = @errSetCast(Set2, @intToError(x));
17141770 \\}
17151771 ,
1716 ".tmp_source.zig:11:13: error: error.B not a member of error set 'Set2'",
1772 "tmp.zig:11:13: error: error.B not a member of error set 'Set2'",
17171773 );
17181774
17191775 cases.add(
......@@ -1722,7 +1778,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
17221778 \\ _ = @memberCount(anyerror);
17231779 \\}
17241780 ,
1725 ".tmp_source.zig:2:9: error: global error set member count not available at comptime",
1781 "tmp.zig:2:9: error: global error set member count not available at comptime",
17261782 );
17271783
17281784 cases.add(
......@@ -1735,8 +1791,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
17351791 \\ const a: Foo = undefined;
17361792 \\}
17371793 ,
1738 ".tmp_source.zig:3:5: error: duplicate error: 'Bar'",
1739 ".tmp_source.zig:2:5: note: other error here",
1794 "tmp.zig:3:5: error: duplicate error: 'Bar'",
1795 "tmp.zig:2:5: note: other error here",
17401796 );
17411797
17421798 cases.add(
......@@ -1745,7 +1801,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
17451801 \\ const x = usize(-10);
17461802 \\}
17471803 ,
1748 ".tmp_source.zig:2:21: error: cannot cast negative value -10 to unsigned integer type 'usize'",
1804 "tmp.zig:2:21: error: cannot cast negative value -10 to unsigned integer type 'usize'",
17491805 );
17501806
17511807 cases.add(
......@@ -1755,7 +1811,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
17551811 \\ var arr: [v]u8 = undefined;
17561812 \\}
17571813 ,
1758 ".tmp_source.zig:1:1: error: unable to infer variable type",
1814 "tmp.zig:1:1: error: unable to infer variable type",
17591815 );
17601816
17611817 cases.add(
......@@ -1768,8 +1824,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
17681824 \\ const a: Foo = undefined;
17691825 \\}
17701826 ,
1771 ".tmp_source.zig:3:5: error: duplicate struct field: 'Bar'",
1772 ".tmp_source.zig:2:5: note: other field here",
1827 "tmp.zig:3:5: error: duplicate struct field: 'Bar'",
1828 "tmp.zig:2:5: note: other field here",
17731829 );
17741830
17751831 cases.add(
......@@ -1782,8 +1838,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
17821838 \\ const a: Foo = undefined;
17831839 \\}
17841840 ,
1785 ".tmp_source.zig:3:5: error: duplicate union field: 'Bar'",
1786 ".tmp_source.zig:2:5: note: other field here",
1841 "tmp.zig:3:5: error: duplicate union field: 'Bar'",
1842 "tmp.zig:2:5: note: other field here",
17871843 );
17881844
17891845 cases.add(
......@@ -1797,8 +1853,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
17971853 \\ const a: Foo = undefined;
17981854 \\}
17991855 ,
1800 ".tmp_source.zig:3:5: error: duplicate enum field: 'Bar'",
1801 ".tmp_source.zig:2:5: note: other field here",
1856 "tmp.zig:3:5: error: duplicate enum field: 'Bar'",
1857 "tmp.zig:2:5: note: other field here",
18021858 );
18031859
18041860 cases.add(
......@@ -1808,15 +1864,15 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
18081864 \\}
18091865 \\nakedcc fn foo() void { }
18101866 ,
1811 ".tmp_source.zig:2:5: error: unable to call function with naked calling convention",
1812 ".tmp_source.zig:4:1: note: declared here",
1867 "tmp.zig:2:5: error: unable to call function with naked calling convention",
1868 "tmp.zig:4:1: note: declared here",
18131869 );
18141870
18151871 cases.add(
18161872 "function with invalid return type",
18171873 \\export fn foo() boid {}
18181874 ,
1819 ".tmp_source.zig:1:17: error: use of undeclared identifier 'boid'",
1875 "tmp.zig:1:17: error: use of undeclared identifier 'boid'",
18201876 );
18211877
18221878 cases.add(
......@@ -1824,7 +1880,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
18241880 \\const Foo = enum { A, B, C };
18251881 \\export fn entry(foo: Foo) void { }
18261882 ,
1827 ".tmp_source.zig:2:22: error: parameter of type 'Foo' not allowed in function with calling convention 'ccc'",
1883 "tmp.zig:2:22: error: parameter of type 'Foo' not allowed in function with calling convention 'ccc'",
18281884 );
18291885
18301886 cases.add(
......@@ -1836,7 +1892,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
18361892 \\};
18371893 \\export fn entry(foo: Foo) void { }
18381894 ,
1839 ".tmp_source.zig:6:22: error: parameter of type 'Foo' not allowed in function with calling convention 'ccc'",
1895 "tmp.zig:6:22: error: parameter of type 'Foo' not allowed in function with calling convention 'ccc'",
18401896 );
18411897
18421898 cases.add(
......@@ -1848,7 +1904,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
18481904 \\};
18491905 \\export fn entry(foo: Foo) void { }
18501906 ,
1851 ".tmp_source.zig:6:22: error: parameter of type 'Foo' not allowed in function with calling convention 'ccc'",
1907 "tmp.zig:6:22: error: parameter of type 'Foo' not allowed in function with calling convention 'ccc'",
18521908 );
18531909
18541910 cases.add(
......@@ -1860,7 +1916,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
18601916 \\ switch (f) {}
18611917 \\}
18621918 ,
1863 ".tmp_source.zig:5:5: error: enumeration value 'Foo.M' not handled in switch",
1919 "tmp.zig:5:5: error: enumeration value 'Foo.M' not handled in switch",
18641920 );
18651921
18661922 cases.add(
......@@ -1869,7 +1925,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
18691925 \\ var a = 1 >> -1;
18701926 \\}
18711927 ,
1872 ".tmp_source.zig:2:18: error: shift by negative value -1",
1928 "tmp.zig:2:18: error: shift by negative value -1",
18731929 );
18741930
18751931 cases.add(
......@@ -1880,7 +1936,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
18801936 \\ }
18811937 \\}
18821938 ,
1883 ".tmp_source.zig:3:9: error: encountered @panic at compile-time",
1939 "tmp.zig:3:9: error: encountered @panic at compile-time",
18841940 );
18851941
18861942 cases.add(
......@@ -1910,7 +1966,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
19101966 \\ bogus;
19111967 \\}
19121968 ,
1913 ".tmp_source.zig:8:5: error: use of undeclared identifier 'bogus'",
1969 "tmp.zig:8:5: error: use of undeclared identifier 'bogus'",
19141970 );
19151971
19161972 cases.add(
......@@ -1923,7 +1979,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
19231979 \\ }
19241980 \\}
19251981 ,
1926 ".tmp_source.zig:4:13: error: label not found: 'outer'",
1982 "tmp.zig:4:13: error: label not found: 'outer'",
19271983 );
19281984
19291985 cases.add(
......@@ -1937,7 +1993,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
19371993 \\ }
19381994 \\}
19391995 ,
1940 ".tmp_source.zig:5:13: error: labeled loop not found: 'outer'",
1996 "tmp.zig:5:13: error: labeled loop not found: 'outer'",
19411997 );
19421998
19431999 cases.add(
......@@ -1950,8 +2006,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
19502006 \\
19512007 \\extern fn bar(x: *void) void { }
19522008 ,
1953 ".tmp_source.zig:1:30: error: parameter of type '*void' has 0 bits; not allowed in function with calling convention 'ccc'",
1954 ".tmp_source.zig:7:18: error: parameter of type '*void' has 0 bits; not allowed in function with calling convention 'ccc'",
2009 "tmp.zig:1:30: error: parameter of type '*void' has 0 bits; not allowed in function with calling convention 'ccc'",
2010 "tmp.zig:7:18: error: parameter of type '*void' has 0 bits; not allowed in function with calling convention 'ccc'",
19552011 );
19562012
19572013 cases.add(
......@@ -1963,7 +2019,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
19632019 \\ var bad = {};
19642020 \\}
19652021 ,
1966 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",
2022 "tmp.zig:5:5: error: expected token ';', found 'var'",
19672023 );
19682024
19692025 cases.add(
......@@ -1975,7 +2031,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
19752031 \\ var bad = {};
19762032 \\}
19772033 ,
1978 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",
2034 "tmp.zig:5:5: error: expected token ';', found 'var'",
19792035 );
19802036
19812037 cases.add(
......@@ -1987,7 +2043,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
19872043 \\ var bad = {};
19882044 \\}
19892045 ,
1990 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",
2046 "tmp.zig:5:5: error: expected token ';', found 'var'",
19912047 );
19922048
19932049 cases.add(
......@@ -1999,7 +2055,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
19992055 \\ var bad = {};
20002056 \\}
20012057 ,
2002 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",
2058 "tmp.zig:5:5: error: expected token ';', found 'var'",
20032059 );
20042060
20052061 cases.add(
......@@ -2011,7 +2067,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
20112067 \\ var bad = {};
20122068 \\}
20132069 ,
2014 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",
2070 "tmp.zig:5:5: error: expected token ';', found 'var'",
20152071 );
20162072
20172073 cases.add(
......@@ -2023,7 +2079,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
20232079 \\ var bad = {};
20242080 \\}
20252081 ,
2026 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",
2082 "tmp.zig:5:5: error: expected token ';', found 'var'",
20272083 );
20282084
20292085 cases.add(
......@@ -2035,7 +2091,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
20352091 \\ var bad = {};
20362092 \\}
20372093 ,
2038 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",
2094 "tmp.zig:5:5: error: expected token ';', found 'var'",
20392095 );
20402096
20412097 cases.add(
......@@ -2047,7 +2103,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
20472103 \\ var bad = {};
20482104 \\}
20492105 ,
2050 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",
2106 "tmp.zig:5:5: error: expected token ';', found 'var'",
20512107 );
20522108
20532109 cases.add(
......@@ -2059,7 +2115,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
20592115 \\ var bad = {};
20602116 \\}
20612117 ,
2062 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",
2118 "tmp.zig:5:5: error: expected token ';', found 'var'",
20632119 );
20642120
20652121 cases.add(
......@@ -2071,7 +2127,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
20712127 \\ var bad = {};
20722128 \\}
20732129 ,
2074 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",
2130 "tmp.zig:5:5: error: expected token ';', found 'var'",
20752131 );
20762132
20772133 cases.add(
......@@ -2083,7 +2139,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
20832139 \\ var bad = {};
20842140 \\}
20852141 ,
2086 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",
2142 "tmp.zig:5:5: error: expected token ';', found 'var'",
20872143 );
20882144
20892145 cases.add(
......@@ -2095,7 +2151,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
20952151 \\ var bad = {};
20962152 \\}
20972153 ,
2098 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",
2154 "tmp.zig:5:5: error: expected token ';', found 'var'",
20992155 );
21002156
21012157 cases.add(
......@@ -2107,7 +2163,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
21072163 \\ var bad = {};
21082164 \\}
21092165 ,
2110 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",
2166 "tmp.zig:5:5: error: expected token ';', found 'var'",
21112167 );
21122168
21132169 cases.add(
......@@ -2119,7 +2175,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
21192175 \\ var bad = {};
21202176 \\}
21212177 ,
2122 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",
2178 "tmp.zig:5:5: error: expected token ';', found 'var'",
21232179 );
21242180
21252181 cases.add(
......@@ -2131,7 +2187,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
21312187 \\ var bad = {};
21322188 \\}
21332189 ,
2134 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",
2190 "tmp.zig:5:5: error: expected token ';', found 'var'",
21352191 );
21362192
21372193 cases.add(
......@@ -2143,7 +2199,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
21432199 \\ var bad = {};
21442200 \\}
21452201 ,
2146 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",
2202 "tmp.zig:5:5: error: expected token ';', found 'var'",
21472203 );
21482204
21492205 cases.add(
......@@ -2155,7 +2211,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
21552211 \\ var bad = {};
21562212 \\}
21572213 ,
2158 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",
2214 "tmp.zig:5:5: error: expected token ';', found 'var'",
21592215 );
21602216
21612217 cases.add(
......@@ -2167,7 +2223,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
21672223 \\ var bad = {};
21682224 \\}
21692225 ,
2170 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",
2226 "tmp.zig:5:5: error: expected token ';', found 'var'",
21712227 );
21722228
21732229 cases.add(
......@@ -2179,7 +2235,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
21792235 \\ var bad = {};
21802236 \\}
21812237 ,
2182 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",
2238 "tmp.zig:5:5: error: expected token ';', found 'var'",
21832239 );
21842240
21852241 cases.add(
......@@ -2191,7 +2247,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
21912247 \\ var bad = {};
21922248 \\}
21932249 ,
2194 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",
2250 "tmp.zig:5:5: error: expected token ';', found 'var'",
21952251 );
21962252
21972253 cases.add(
......@@ -2203,7 +2259,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
22032259 \\ var bad = {};
22042260 \\}
22052261 ,
2206 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",
2262 "tmp.zig:5:5: error: expected token ';', found 'var'",
22072263 );
22082264
22092265 cases.add(
......@@ -2212,7 +2268,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
22122268 \\fn a() void {}
22132269 \\export fn entry() void { a(); }
22142270 ,
2215 ".tmp_source.zig:2:1: error: redefinition of 'a'",
2271 "tmp.zig:2:1: error: redefinition of 'a'",
22162272 );
22172273
22182274 cases.add(
......@@ -2220,7 +2276,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
22202276 \\fn a() noreturn {return;}
22212277 \\export fn entry() void { a(); }
22222278 ,
2223 ".tmp_source.zig:1:18: error: expected type 'noreturn', found 'void'",
2279 "tmp.zig:1:18: error: expected type 'noreturn', found 'void'",
22242280 );
22252281
22262282 cases.add(
......@@ -2228,7 +2284,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
22282284 \\fn a() i32 {}
22292285 \\export fn entry() void { _ = a(); }
22302286 ,
2231 ".tmp_source.zig:1:12: error: expected type 'i32', found 'void'",
2287 "tmp.zig:1:12: error: expected type 'i32', found 'void'",
22322288 );
22332289
22342290 cases.add(
......@@ -2237,7 +2293,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
22372293 \\ b();
22382294 \\}
22392295 ,
2240 ".tmp_source.zig:2:5: error: use of undeclared identifier 'b'",
2296 "tmp.zig:2:5: error: use of undeclared identifier 'b'",
22412297 );
22422298
22432299 cases.add(
......@@ -2247,7 +2303,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
22472303 \\}
22482304 \\fn b(a: i32, b: i32, c: i32) void { }
22492305 ,
2250 ".tmp_source.zig:2:6: error: expected 3 arguments, found 1",
2306 "tmp.zig:2:6: error: expected 3 arguments, found 1",
22512307 );
22522308
22532309 cases.add(
......@@ -2255,7 +2311,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
22552311 \\fn a() bogus {}
22562312 \\export fn entry() void { _ = a(); }
22572313 ,
2258 ".tmp_source.zig:1:8: error: use of undeclared identifier 'bogus'",
2314 "tmp.zig:1:8: error: use of undeclared identifier 'bogus'",
22592315 );
22602316
22612317 cases.add(
......@@ -2263,7 +2319,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
22632319 \\fn a() *noreturn {}
22642320 \\export fn entry() void { _ = a(); }
22652321 ,
2266 ".tmp_source.zig:1:8: error: pointer to noreturn not allowed",
2322 "tmp.zig:1:8: error: pointer to noreturn not allowed",
22672323 );
22682324
22692325 cases.add(
......@@ -2275,7 +2331,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
22752331 \\
22762332 \\fn b() void {}
22772333 ,
2278 ".tmp_source.zig:3:5: error: unreachable code",
2334 "tmp.zig:3:5: error: unreachable code",
22792335 );
22802336
22812337 cases.add(
......@@ -2283,7 +2339,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
22832339 \\const bogus = @import("bogus-does-not-exist.zig",);
22842340 \\export fn entry() void { bogus.bogo(); }
22852341 ,
2286 ".tmp_source.zig:1:15: error: unable to find 'bogus-does-not-exist.zig'",
2342 "tmp.zig:1:15: error: unable to find 'bogus-does-not-exist.zig'",
22872343 );
22882344
22892345 cases.add(
......@@ -2294,8 +2350,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
22942350 \\ c;
22952351 \\}
22962352 ,
2297 ".tmp_source.zig:3:5: error: use of undeclared identifier 'b'",
2298 ".tmp_source.zig:4:5: error: use of undeclared identifier 'c'",
2353 "tmp.zig:3:5: error: use of undeclared identifier 'b'",
2354 "tmp.zig:4:5: error: use of undeclared identifier 'c'",
22992355 );
23002356
23012357 cases.add(
......@@ -2304,7 +2360,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
23042360 \\}
23052361 \\export fn entry() void { f(1, 2); }
23062362 ,
2307 ".tmp_source.zig:1:15: error: redeclaration of variable 'a'",
2363 "tmp.zig:1:15: error: redeclaration of variable 'a'",
23082364 );
23092365
23102366 cases.add(
......@@ -2314,7 +2370,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
23142370 \\ const a = 0;
23152371 \\}
23162372 ,
2317 ".tmp_source.zig:3:5: error: redeclaration of variable 'a'",
2373 "tmp.zig:3:5: error: redeclaration of variable 'a'",
23182374 );
23192375
23202376 cases.add(
......@@ -2324,7 +2380,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
23242380 \\}
23252381 \\export fn entry() void { f(1); }
23262382 ,
2327 ".tmp_source.zig:2:5: error: redeclaration of variable 'a'",
2383 "tmp.zig:2:5: error: redeclaration of variable 'a'",
23282384 );
23292385
23302386 cases.add(
......@@ -2334,7 +2390,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
23342390 \\ return a;
23352391 \\}
23362392 ,
2337 ".tmp_source.zig:3:12: error: expected type 'i32', found '[*]const u8'",
2393 "tmp.zig:3:12: error: expected type 'i32', found '[*]const u8'",
23382394 );
23392395
23402396 cases.add(
......@@ -2343,7 +2399,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
23432399 \\ if (0) {}
23442400 \\}
23452401 ,
2346 ".tmp_source.zig:2:9: error: expected type 'bool', found 'comptime_int'",
2402 "tmp.zig:2:9: error: expected type 'bool', found 'comptime_int'",
23472403 );
23482404
23492405 cases.add(
......@@ -2352,7 +2408,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
23522408 \\ const a = return;
23532409 \\}
23542410 ,
2355 ".tmp_source.zig:2:5: error: unreachable code",
2411 "tmp.zig:2:5: error: unreachable code",
23562412 );
23572413
23582414 cases.add(
......@@ -2361,7 +2417,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
23612417 \\ const a: noreturn = {};
23622418 \\}
23632419 ,
2364 ".tmp_source.zig:2:14: error: variable of type 'noreturn' not allowed",
2420 "tmp.zig:2:14: error: variable of type 'noreturn' not allowed",
23652421 );
23662422
23672423 cases.add(
......@@ -2369,7 +2425,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
23692425 \\fn f(a: noreturn) void {}
23702426 \\export fn entry() void { f(); }
23712427 ,
2372 ".tmp_source.zig:1:9: error: parameter of type 'noreturn' not allowed",
2428 "tmp.zig:1:9: error: parameter of type 'noreturn' not allowed",
23732429 );
23742430
23752431 cases.add(
......@@ -2378,7 +2434,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
23782434 \\ 3 = 3;
23792435 \\}
23802436 ,
2381 ".tmp_source.zig:2:7: error: cannot assign to constant",
2437 "tmp.zig:2:7: error: cannot assign to constant",
23822438 );
23832439
23842440 cases.add(
......@@ -2388,7 +2444,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
23882444 \\ a = 4;
23892445 \\}
23902446 ,
2391 ".tmp_source.zig:3:7: error: cannot assign to constant",
2447 "tmp.zig:3:7: error: cannot assign to constant",
23922448 );
23932449
23942450 cases.add(
......@@ -2397,7 +2453,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
23972453 \\ b = 3;
23982454 \\}
23992455 ,
2400 ".tmp_source.zig:2:5: error: use of undeclared identifier 'b'",
2456 "tmp.zig:2:5: error: use of undeclared identifier 'b'",
24012457 );
24022458
24032459 cases.add(
......@@ -2406,7 +2462,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
24062462 \\ (const a = 0);
24072463 \\}
24082464 ,
2409 ".tmp_source.zig:2:6: error: invalid token: 'const'",
2465 "tmp.zig:2:6: error: invalid token: 'const'",
24102466 );
24112467
24122468 cases.add(
......@@ -2415,7 +2471,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
24152471 \\ i[i] = i[i];
24162472 \\}
24172473 ,
2418 ".tmp_source.zig:2:5: error: use of undeclared identifier 'i'",
2474 "tmp.zig:2:5: error: use of undeclared identifier 'i'",
24192475 );
24202476
24212477 cases.add(
......@@ -2425,8 +2481,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
24252481 \\ bad[bad] = bad[bad];
24262482 \\}
24272483 ,
2428 ".tmp_source.zig:3:8: error: array access of non-array type 'bool'",
2429 ".tmp_source.zig:3:19: error: array access of non-array type 'bool'",
2484 "tmp.zig:3:8: error: array access of non-array type 'bool'",
2485 "tmp.zig:3:19: error: array access of non-array type 'bool'",
24302486 );
24312487
24322488 cases.add(
......@@ -2437,8 +2493,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
24372493 \\ array[bad] = array[bad];
24382494 \\}
24392495 ,
2440 ".tmp_source.zig:4:11: error: expected type 'usize', found 'bool'",
2441 ".tmp_source.zig:4:24: error: expected type 'usize', found 'bool'",
2496 "tmp.zig:4:11: error: expected type 'usize', found 'bool'",
2497 "tmp.zig:4:24: error: expected type 'usize', found 'bool'",
24422498 );
24432499
24442500 cases.add(
......@@ -2449,7 +2505,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
24492505 \\}
24502506 \\export fn entry() void { f(); }
24512507 ,
2452 ".tmp_source.zig:3:7: error: cannot assign to constant",
2508 "tmp.zig:3:7: error: cannot assign to constant",
24532509 );
24542510
24552511 cases.add(
......@@ -2460,26 +2516,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
24602516 \\}
24612517 \\export fn entry() void { f(true); }
24622518 ,
2463 ".tmp_source.zig:2:42: error: integer value 1 cannot be implicitly casted to type 'void'",
2464 ".tmp_source.zig:3:15: error: incompatible types: 'i32' and 'void'",
2465 );
2466
2467 cases.add(
2468 "direct struct loop",
2469 \\const A = struct { a : A, };
2470 \\export fn entry() usize { return @sizeOf(A); }
2471 ,
2472 ".tmp_source.zig:1:11: error: struct 'A' contains itself",
2473 );
2474
2475 cases.add(
2476 "indirect struct loop",
2477 \\const A = struct { b : B, };
2478 \\const B = struct { c : C, };
2479 \\const C = struct { a : A, };
2480 \\export fn entry() usize { return @sizeOf(A); }
2481 ,
2482 ".tmp_source.zig:1:11: error: struct 'A' contains itself",
2519 "tmp.zig:2:42: error: integer value 1 cannot be implicitly casted to type 'void'",
2520 "tmp.zig:3:15: error: incompatible types: 'i32' and 'void'",
24832521 );
24842522
24852523 cases.add(
......@@ -2491,8 +2529,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
24912529 \\ const y = a.bar;
24922530 \\}
24932531 ,
2494 ".tmp_source.zig:4:6: error: no member named 'foo' in struct 'A'",
2495 ".tmp_source.zig:5:16: error: no member named 'bar' in struct 'A'",
2532 "tmp.zig:4:6: error: no member named 'foo' in struct 'A'",
2533 "tmp.zig:5:16: error: no member named 'bar' in struct 'A'",
24962534 );
24972535
24982536 cases.add(
......@@ -2500,7 +2538,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
25002538 \\const A = struct { x : i32, };
25012539 \\const A = struct { y : i32, };
25022540 ,
2503 ".tmp_source.zig:2:1: error: redefinition of 'A'",
2541 "tmp.zig:2:1: error: redefinition of 'A'",
25042542 );
25052543
25062544 cases.add(
......@@ -2508,7 +2546,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
25082546 \\const A = enum {};
25092547 \\const A = enum {};
25102548 ,
2511 ".tmp_source.zig:2:1: error: redefinition of 'A'",
2549 "tmp.zig:2:1: error: redefinition of 'A'",
25122550 );
25132551
25142552 cases.add(
......@@ -2516,8 +2554,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
25162554 \\var a : i32 = 1;
25172555 \\var a : i32 = 2;
25182556 ,
2519 ".tmp_source.zig:2:1: error: redefinition of 'a'",
2520 ".tmp_source.zig:1:1: note: previous definition is here",
2557 "tmp.zig:2:1: error: redefinition of 'a'",
2558 "tmp.zig:1:1: note: previous definition is here",
25212559 );
25222560
25232561 cases.add(
......@@ -2536,7 +2574,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
25362574 \\ };
25372575 \\}
25382576 ,
2539 ".tmp_source.zig:11:9: error: duplicate field",
2577 "tmp.zig:11:9: error: duplicate field",
25402578 );
25412579
25422580 cases.add(
......@@ -2555,7 +2593,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
25552593 \\ };
25562594 \\}
25572595 ,
2558 ".tmp_source.zig:9:17: error: missing field: 'x'",
2596 "tmp.zig:9:17: error: missing field: 'x'",
25592597 );
25602598
25612599 cases.add(
......@@ -2573,7 +2611,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
25732611 \\ };
25742612 \\}
25752613 ,
2576 ".tmp_source.zig:10:9: error: no member named 'foo' in struct 'A'",
2614 "tmp.zig:10:9: error: no member named 'foo' in struct 'A'",
25772615 );
25782616
25792617 cases.add(
......@@ -2582,7 +2620,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
25822620 \\ break;
25832621 \\}
25842622 ,
2585 ".tmp_source.zig:2:5: error: break expression outside loop",
2623 "tmp.zig:2:5: error: break expression outside loop",
25862624 );
25872625
25882626 cases.add(
......@@ -2591,7 +2629,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
25912629 \\ continue;
25922630 \\}
25932631 ,
2594 ".tmp_source.zig:2:5: error: continue expression outside loop",
2632 "tmp.zig:2:5: error: continue expression outside loop",
25952633 );
25962634
25972635 cases.add(
......@@ -2600,7 +2638,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
26002638 \\ if (true) |x| { }
26012639 \\}
26022640 ,
2603 ".tmp_source.zig:2:9: error: expected optional type, found 'bool'",
2641 "tmp.zig:2:9: error: expected optional type, found 'bool'",
26042642 );
26052643
26062644 cases.add(
......@@ -2610,7 +2648,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
26102648 \\}
26112649 \\export fn entry() void { _ = f(); }
26122650 ,
2613 ".tmp_source.zig:2:15: error: unreachable code",
2651 "tmp.zig:2:15: error: unreachable code",
26142652 );
26152653
26162654 cases.add(
......@@ -2619,18 +2657,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
26192657 \\}
26202658 \\export fn entry() void { _ = f(); }
26212659 ,
2622 ".tmp_source.zig:1:8: error: invalid builtin function: 'bogus'",
2623 );
2624
2625 cases.add(
2626 "top level decl dependency loop",
2627 \\const a : @typeOf(b) = 0;
2628 \\const b : @typeOf(a) = 0;
2629 \\export fn entry() void {
2630 \\ const c = a + b;
2631 \\}
2632 ,
2633 ".tmp_source.zig:1:1: error: 'a' depends on itself",
2660 "tmp.zig:1:8: error: invalid builtin function: 'bogus'",
26342661 );
26352662
26362663 cases.add(
......@@ -2638,7 +2665,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
26382665 \\fn f(noalias x: i32) void {}
26392666 \\export fn entry() void { f(1234); }
26402667 ,
2641 ".tmp_source.zig:1:6: error: noalias on non-pointer parameter",
2668 "tmp.zig:1:6: error: noalias on non-pointer parameter",
26422669 );
26432670
26442671 cases.add(
......@@ -2646,7 +2673,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
26462673 \\const foo = []u16{.x = 1024,};
26472674 \\export fn entry() usize { return @sizeOf(@typeOf(foo)); }
26482675 ,
2649 ".tmp_source.zig:1:18: error: type '[]u16' does not support struct initialization syntax",
2676 "tmp.zig:1:18: error: type '[]u16' does not support struct initialization syntax",
26502677 );
26512678
26522679 cases.add(
......@@ -2656,7 +2683,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
26562683 \\ return 1;
26572684 \\}
26582685 ,
2659 ".tmp_source.zig:1:1: error: variable of type 'type' must be constant",
2686 "tmp.zig:1:1: error: variable of type 'type' must be constant",
26602687 );
26612688
26622689 cases.add(
......@@ -2672,10 +2699,10 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
26722699 \\ f(1234);
26732700 \\}
26742701 ,
2675 ".tmp_source.zig:4:6: error: redefinition of 'Foo'",
2676 ".tmp_source.zig:1:1: note: previous definition is here",
2677 ".tmp_source.zig:5:5: error: redefinition of 'Bar'",
2678 ".tmp_source.zig:2:1: note: previous definition is here",
2702 "tmp.zig:4:6: error: redefinition of 'Foo'",
2703 "tmp.zig:1:1: note: previous definition is here",
2704 "tmp.zig:5:5: error: redefinition of 'Bar'",
2705 "tmp.zig:2:1: note: previous definition is here",
26792706 );
26802707
26812708 cases.add(
......@@ -2696,7 +2723,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
26962723 \\
26972724 \\export fn entry() usize { return @sizeOf(@typeOf(f)); }
26982725 ,
2699 ".tmp_source.zig:8:5: error: enumeration value 'Number.Four' not handled in switch",
2726 "tmp.zig:8:5: error: enumeration value 'Number.Four' not handled in switch",
27002727 );
27012728
27022729 cases.add(
......@@ -2719,8 +2746,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
27192746 \\
27202747 \\export fn entry() usize { return @sizeOf(@typeOf(f)); }
27212748 ,
2722 ".tmp_source.zig:13:15: error: duplicate switch value",
2723 ".tmp_source.zig:10:15: note: other value is here",
2749 "tmp.zig:13:15: error: duplicate switch value",
2750 "tmp.zig:10:15: note: other value is here",
27242751 );
27252752
27262753 cases.add(
......@@ -2744,8 +2771,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
27442771 \\
27452772 \\export fn entry() usize { return @sizeOf(@typeOf(f)); }
27462773 ,
2747 ".tmp_source.zig:13:15: error: duplicate switch value",
2748 ".tmp_source.zig:10:15: note: other value is here",
2774 "tmp.zig:13:15: error: duplicate switch value",
2775 "tmp.zig:10:15: note: other value is here",
27492776 );
27502777
27512778 cases.add(
......@@ -2761,7 +2788,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
27612788 \\ f(1234);
27622789 \\}
27632790 ,
2764 ".tmp_source.zig:5:9: error: multiple else prongs in switch expression",
2791 "tmp.zig:5:9: error: multiple else prongs in switch expression",
27652792 );
27662793
27672794 cases.add(
......@@ -2773,7 +2800,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
27732800 \\}
27742801 \\export fn entry() usize { return @sizeOf(@typeOf(foo)); }
27752802 ,
2776 ".tmp_source.zig:2:5: error: switch must handle all possibilities",
2803 "tmp.zig:2:5: error: switch must handle all possibilities",
27772804 );
27782805
27792806 cases.add(
......@@ -2788,8 +2815,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
27882815 \\}
27892816 \\export fn entry() usize { return @sizeOf(@typeOf(foo)); }
27902817 ,
2791 ".tmp_source.zig:6:9: error: duplicate switch value",
2792 ".tmp_source.zig:5:14: note: previous value is here",
2818 "tmp.zig:6:9: error: duplicate switch value",
2819 "tmp.zig:5:14: note: previous value is here",
27932820 );
27942821
27952822 cases.add(
......@@ -2802,7 +2829,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
28022829 \\const y: u8 = 100;
28032830 \\export fn entry() usize { return @sizeOf(@typeOf(foo)); }
28042831 ,
2805 ".tmp_source.zig:2:5: error: else prong required when switching on type '*u8'",
2832 "tmp.zig:2:5: error: else prong required when switching on type '*u8'",
28062833 );
28072834
28082835 cases.add(
......@@ -2811,7 +2838,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
28112838 \\const x = foo();
28122839 \\export fn entry() i32 { return x; }
28132840 ,
2814 ".tmp_source.zig:2:11: error: unable to evaluate constant expression",
2841 "tmp.zig:2:11: error: unable to evaluate constant expression",
28152842 );
28162843
28172844 cases.add(
......@@ -2822,7 +2849,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
28222849 \\
28232850 \\export fn entry() usize { return @sizeOf(@typeOf(a)); }
28242851 ,
2825 ".tmp_source.zig:3:11: error: expected array or C string literal, found 'usize'",
2852 "tmp.zig:3:11: error: expected array or C string literal, found 'usize'",
28262853 );
28272854
28282855 cases.add(
......@@ -2833,7 +2860,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
28332860 \\var s: [10]u8 = undefined;
28342861 \\export fn entry() usize { return @sizeOf(@typeOf(f)); }
28352862 ,
2836 ".tmp_source.zig:2:12: error: unable to evaluate constant expression",
2863 "tmp.zig:2:12: error: unable to evaluate constant expression",
28372864 );
28382865
28392866 cases.add(
......@@ -2841,7 +2868,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
28412868 \\const c = @cImport(@cInclude("bogus.h"));
28422869 \\export fn entry() usize { return @sizeOf(@typeOf(c.bogo)); }
28432870 ,
2844 ".tmp_source.zig:1:11: error: C import failed",
2871 "tmp.zig:1:11: error: C import failed",
28452872 ".h:1:10: note: 'bogus.h' file not found",
28462873 );
28472874
......@@ -2852,7 +2879,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
28522879 \\fn foo() *const i32 { return y; }
28532880 \\export fn entry() usize { return @sizeOf(@typeOf(foo)); }
28542881 ,
2855 ".tmp_source.zig:3:30: error: expected type '*const i32', found '*const comptime_int'",
2882 "tmp.zig:3:30: error: expected type '*const i32', found '*const comptime_int'",
28562883 );
28572884
28582885 cases.add(
......@@ -2860,7 +2887,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
28602887 \\const x : u8 = 300;
28612888 \\export fn entry() usize { return @sizeOf(@typeOf(x)); }
28622889 ,
2863 ".tmp_source.zig:1:16: error: integer value 300 cannot be implicitly casted to type 'u8'",
2890 "tmp.zig:1:16: error: integer value 300 cannot be implicitly casted to type 'u8'",
28642891 );
28652892
28662893 cases.add(
......@@ -2871,8 +2898,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
28712898 \\}
28722899 \\export fn entry() u16 { return f(); }
28732900 ,
2874 ".tmp_source.zig:3:14: error: RHS of shift is too large for LHS type",
2875 ".tmp_source.zig:3:17: note: value 8 cannot fit into type u3",
2901 "tmp.zig:3:14: error: RHS of shift is too large for LHS type",
2902 "tmp.zig:3:17: note: value 8 cannot fit into type u3",
28762903 );
28772904
28782905 cases.add(
......@@ -2880,7 +2907,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
28802907 \\const x = 2 == 2.0;
28812908 \\export fn entry() usize { return @sizeOf(@typeOf(x)); }
28822909 ,
2883 ".tmp_source.zig:1:11: error: integer value 2 cannot be implicitly casted to type 'comptime_float'",
2910 "tmp.zig:1:11: error: integer value 2 cannot be implicitly casted to type 'comptime_float'",
28842911 );
28852912
28862913 cases.add(
......@@ -2909,7 +2936,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
29092936 \\
29102937 \\export fn entry() usize { return @sizeOf(@typeOf(f)); }
29112938 ,
2912 ".tmp_source.zig:20:34: error: expected 1 arguments, found 0",
2939 "tmp.zig:20:34: error: expected 1 arguments, found 0",
29132940 );
29142941
29152942 cases.add(
......@@ -2918,8 +2945,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
29182945 \\fn f(i32) void {}
29192946 \\export fn entry() usize { return @sizeOf(@typeOf(f)); }
29202947 ,
2921 ".tmp_source.zig:1:1: error: missing function name",
2922 ".tmp_source.zig:2:6: error: missing parameter name",
2948 "tmp.zig:1:1: error: missing function name",
2949 "tmp.zig:2:6: error: missing parameter name",
29232950 );
29242951
29252952 cases.add(
......@@ -2930,7 +2957,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
29302957 \\fn c() i32 {return 2;}
29312958 \\export fn entry() usize { return @sizeOf(@typeOf(fns)); }
29322959 ,
2933 ".tmp_source.zig:1:27: error: expected type 'fn() void', found 'fn() i32'",
2960 "tmp.zig:1:27: error: expected type 'fn() void', found 'fn() i32'",
29342961 );
29352962
29362963 cases.add(
......@@ -2942,7 +2969,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
29422969 \\
29432970 \\export fn entry() usize { return @sizeOf(@typeOf(fns)); }
29442971 ,
2945 ".tmp_source.zig:1:36: error: expected type 'fn(i32) i32', found 'extern fn(i32) i32'",
2972 "tmp.zig:1:36: error: expected type 'fn(i32) i32', found 'extern fn(i32) i32'",
29462973 );
29472974
29482975 cases.add(
......@@ -2951,16 +2978,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
29512978 \\fn func() bogus {}
29522979 \\export fn entry() usize { return @sizeOf(@typeOf(func)); }
29532980 ,
2954 ".tmp_source.zig:2:1: error: redefinition of 'func'",
2955 ".tmp_source.zig:1:11: error: use of undeclared identifier 'bogus'",
2956 );
2957
2958 cases.add(
2959 "bogus compile var",
2960 \\const x = @import("builtin").bogus;
2961 \\export fn entry() usize { return @sizeOf(@typeOf(x)); }
2962 ,
2963 ".tmp_source.zig:1:29: error: no member named 'bogus' in '",
2981 "tmp.zig:2:1: error: redefinition of 'func'",
2982 "tmp.zig:1:11: error: use of undeclared identifier 'bogus'",
29642983 );
29652984
29662985 cases.add(
......@@ -2973,9 +2992,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
29732992 \\
29742993 \\export fn entry() usize { return @sizeOf(@typeOf(Foo)); }
29752994 ,
2976 ".tmp_source.zig:5:25: error: unable to evaluate constant expression",
2977 ".tmp_source.zig:2:12: note: called from here",
2978 ".tmp_source.zig:2:8: note: called from here",
2995 "tmp.zig:5:25: error: unable to evaluate constant expression",
2996 "tmp.zig:2:12: note: called from here",
2997 "tmp.zig:2:8: note: called from here",
29792998 );
29802999
29813000 cases.add(
......@@ -2987,7 +3006,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
29873006 \\
29883007 \\export fn entry() usize { return @sizeOf(@typeOf(x)); }
29893008 ,
2990 ".tmp_source.zig:4:28: error: invalid operands to binary expression: 'Foo' and 'Foo'",
3009 "tmp.zig:4:28: error: invalid operands to binary expression: 'Foo' and 'Foo'",
29913010 );
29923011
29933012 cases.add(
......@@ -3002,10 +3021,10 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
30023021 \\export fn entry3() usize { return @sizeOf(@typeOf(int_x)); }
30033022 \\export fn entry4() usize { return @sizeOf(@typeOf(float_x)); }
30043023 ,
3005 ".tmp_source.zig:1:21: error: division by zero",
3006 ".tmp_source.zig:2:25: error: division by zero",
3007 ".tmp_source.zig:3:22: error: division by zero",
3008 ".tmp_source.zig:4:26: error: division by zero",
3024 "tmp.zig:1:21: error: division by zero",
3025 "tmp.zig:2:25: error: division by zero",
3026 "tmp.zig:3:22: error: division by zero",
3027 "tmp.zig:4:26: error: division by zero",
30093028 );
30103029
30113030 cases.add(
......@@ -3015,7 +3034,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
30153034 \\
30163035 \\export fn entry() usize { return @sizeOf(@typeOf(foo)); }
30173036 ,
3018 ".tmp_source.zig:1:15: error: newline not allowed in string literal",
3037 "tmp.zig:1:15: error: newline not allowed in string literal",
30193038 );
30203039
30213040 cases.add(
......@@ -3025,7 +3044,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
30253044 \\
30263045 \\export fn entry() usize { return @sizeOf(@typeOf(invalid)); }
30273046 ,
3028 ".tmp_source.zig:2:21: error: operator not allowed for type 'fn() void'",
3047 "tmp.zig:2:21: error: operator not allowed for type 'fn() void'",
30293048 );
30303049
30313050 cases.add(
......@@ -3037,7 +3056,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
30373056 \\
30383057 \\export fn entry() usize { return @sizeOf(@typeOf(test1)); }
30393058 ,
3040 ".tmp_source.zig:3:16: error: unable to evaluate constant expression",
3059 "tmp.zig:3:16: error: unable to evaluate constant expression",
30413060 );
30423061
30433062 cases.add(
......@@ -3046,7 +3065,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
30463065 \\
30473066 \\export fn entry() usize { return @sizeOf(@typeOf(a)); }
30483067 ,
3049 ".tmp_source.zig:1:16: error: expected type '*u8', found '(null)'",
3068 "tmp.zig:1:16: error: expected type '*u8', found '(null)'",
30503069 );
30513070
30523071 cases.add(
......@@ -3056,7 +3075,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
30563075 \\ const pointer = &array[0];
30573076 \\}
30583077 ,
3059 ".tmp_source.zig:3:27: error: index 0 outside array of size 0",
3078 "tmp.zig:3:27: error: index 0 outside array of size 0",
30603079 );
30613080
30623081 cases.add(
......@@ -3068,8 +3087,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
30683087 \\
30693088 \\export fn entry() usize { return @sizeOf(@typeOf(y)); }
30703089 ,
3071 ".tmp_source.zig:3:14: error: division by zero",
3072 ".tmp_source.zig:1:14: note: called from here",
3090 "tmp.zig:3:14: error: division by zero",
3091 "tmp.zig:1:14: note: called from here",
30733092 );
30743093
30753094 cases.add(
......@@ -3078,7 +3097,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
30783097 \\
30793098 \\export fn entry() usize { return @sizeOf(@typeOf(x)); }
30803099 ,
3081 ".tmp_source.zig:1:15: error: use of undefined value here causes undefined behavior",
3100 "tmp.zig:1:15: error: use of undefined value here causes undefined behavior",
30823101 );
30833102
30843103 cases.add(
......@@ -3088,7 +3107,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
30883107 \\ _ = a / a;
30893108 \\}
30903109 ,
3091 ".tmp_source.zig:3:9: error: use of undefined value here causes undefined behavior",
3110 "tmp.zig:3:9: error: use of undefined value here causes undefined behavior",
30923111 );
30933112
30943113 cases.add(
......@@ -3098,7 +3117,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
30983117 \\ a /= a;
30993118 \\}
31003119 ,
3101 ".tmp_source.zig:3:5: error: use of undefined value here causes undefined behavior",
3120 "tmp.zig:3:5: error: use of undefined value here causes undefined behavior",
31023121 );
31033122
31043123 cases.add(
......@@ -3108,7 +3127,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
31083127 \\ _ = a % a;
31093128 \\}
31103129 ,
3111 ".tmp_source.zig:3:9: error: use of undefined value here causes undefined behavior",
3130 "tmp.zig:3:9: error: use of undefined value here causes undefined behavior",
31123131 );
31133132
31143133 cases.add(
......@@ -3118,7 +3137,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
31183137 \\ a %= a;
31193138 \\}
31203139 ,
3121 ".tmp_source.zig:3:5: error: use of undefined value here causes undefined behavior",
3140 "tmp.zig:3:5: error: use of undefined value here causes undefined behavior",
31223141 );
31233142
31243143 cases.add(
......@@ -3128,7 +3147,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
31283147 \\ _ = a + a;
31293148 \\}
31303149 ,
3131 ".tmp_source.zig:3:9: error: use of undefined value here causes undefined behavior",
3150 "tmp.zig:3:9: error: use of undefined value here causes undefined behavior",
31323151 );
31333152
31343153 cases.add(
......@@ -3138,7 +3157,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
31383157 \\ a += a;
31393158 \\}
31403159 ,
3141 ".tmp_source.zig:3:5: error: use of undefined value here causes undefined behavior",
3160 "tmp.zig:3:5: error: use of undefined value here causes undefined behavior",
31423161 );
31433162
31443163 cases.add(
......@@ -3148,7 +3167,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
31483167 \\ _ = a +% a;
31493168 \\}
31503169 ,
3151 ".tmp_source.zig:3:9: error: use of undefined value here causes undefined behavior",
3170 "tmp.zig:3:9: error: use of undefined value here causes undefined behavior",
31523171 );
31533172
31543173 cases.add(
......@@ -3158,7 +3177,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
31583177 \\ a +%= a;
31593178 \\}
31603179 ,
3161 ".tmp_source.zig:3:5: error: use of undefined value here causes undefined behavior",
3180 "tmp.zig:3:5: error: use of undefined value here causes undefined behavior",
31623181 );
31633182
31643183 cases.add(
......@@ -3168,7 +3187,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
31683187 \\ _ = a - a;
31693188 \\}
31703189 ,
3171 ".tmp_source.zig:3:9: error: use of undefined value here causes undefined behavior",
3190 "tmp.zig:3:9: error: use of undefined value here causes undefined behavior",
31723191 );
31733192
31743193 cases.add(
......@@ -3178,7 +3197,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
31783197 \\ a -= a;
31793198 \\}
31803199 ,
3181 ".tmp_source.zig:3:5: error: use of undefined value here causes undefined behavior",
3200 "tmp.zig:3:5: error: use of undefined value here causes undefined behavior",
31823201 );
31833202
31843203 cases.add(
......@@ -3188,7 +3207,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
31883207 \\ _ = a -% a;
31893208 \\}
31903209 ,
3191 ".tmp_source.zig:3:9: error: use of undefined value here causes undefined behavior",
3210 "tmp.zig:3:9: error: use of undefined value here causes undefined behavior",
31923211 );
31933212
31943213 cases.add(
......@@ -3198,7 +3217,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
31983217 \\ a -%= a;
31993218 \\}
32003219 ,
3201 ".tmp_source.zig:3:5: error: use of undefined value here causes undefined behavior",
3220 "tmp.zig:3:5: error: use of undefined value here causes undefined behavior",
32023221 );
32033222
32043223 cases.add(
......@@ -3208,7 +3227,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
32083227 \\ _ = a * a;
32093228 \\}
32103229 ,
3211 ".tmp_source.zig:3:9: error: use of undefined value here causes undefined behavior",
3230 "tmp.zig:3:9: error: use of undefined value here causes undefined behavior",
32123231 );
32133232
32143233 cases.add(
......@@ -3218,7 +3237,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
32183237 \\ a *= a;
32193238 \\}
32203239 ,
3221 ".tmp_source.zig:3:5: error: use of undefined value here causes undefined behavior",
3240 "tmp.zig:3:5: error: use of undefined value here causes undefined behavior",
32223241 );
32233242
32243243 cases.add(
......@@ -3228,7 +3247,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
32283247 \\ _ = a *% a;
32293248 \\}
32303249 ,
3231 ".tmp_source.zig:3:9: error: use of undefined value here causes undefined behavior",
3250 "tmp.zig:3:9: error: use of undefined value here causes undefined behavior",
32323251 );
32333252
32343253 cases.add(
......@@ -3238,7 +3257,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
32383257 \\ a *%= a;
32393258 \\}
32403259 ,
3241 ".tmp_source.zig:3:5: error: use of undefined value here causes undefined behavior",
3260 "tmp.zig:3:5: error: use of undefined value here causes undefined behavior",
32423261 );
32433262
32443263 cases.add(
......@@ -3248,7 +3267,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
32483267 \\ _ = a << 2;
32493268 \\}
32503269 ,
3251 ".tmp_source.zig:3:9: error: use of undefined value here causes undefined behavior",
3270 "tmp.zig:3:9: error: use of undefined value here causes undefined behavior",
32523271 );
32533272
32543273 cases.add(
......@@ -3258,7 +3277,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
32583277 \\ a <<= 2;
32593278 \\}
32603279 ,
3261 ".tmp_source.zig:3:5: error: use of undefined value here causes undefined behavior",
3280 "tmp.zig:3:5: error: use of undefined value here causes undefined behavior",
32623281 );
32633282
32643283 cases.add(
......@@ -3268,7 +3287,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
32683287 \\ _ = a >> 2;
32693288 \\}
32703289 ,
3271 ".tmp_source.zig:3:9: error: use of undefined value here causes undefined behavior",
3290 "tmp.zig:3:9: error: use of undefined value here causes undefined behavior",
32723291 );
32733292
32743293 cases.add(
......@@ -3278,7 +3297,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
32783297 \\ a >>= 2;
32793298 \\}
32803299 ,
3281 ".tmp_source.zig:3:5: error: use of undefined value here causes undefined behavior",
3300 "tmp.zig:3:5: error: use of undefined value here causes undefined behavior",
32823301 );
32833302
32843303 cases.add(
......@@ -3288,7 +3307,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
32883307 \\ _ = a & a;
32893308 \\}
32903309 ,
3291 ".tmp_source.zig:3:9: error: use of undefined value here causes undefined behavior",
3310 "tmp.zig:3:9: error: use of undefined value here causes undefined behavior",
32923311 );
32933312
32943313 cases.add(
......@@ -3298,7 +3317,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
32983317 \\ a &= a;
32993318 \\}
33003319 ,
3301 ".tmp_source.zig:3:5: error: use of undefined value here causes undefined behavior",
3320 "tmp.zig:3:5: error: use of undefined value here causes undefined behavior",
33023321 );
33033322
33043323 cases.add(
......@@ -3308,7 +3327,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
33083327 \\ _ = a | a;
33093328 \\}
33103329 ,
3311 ".tmp_source.zig:3:9: error: use of undefined value here causes undefined behavior",
3330 "tmp.zig:3:9: error: use of undefined value here causes undefined behavior",
33123331 );
33133332
33143333 cases.add(
......@@ -3318,7 +3337,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
33183337 \\ a |= a;
33193338 \\}
33203339 ,
3321 ".tmp_source.zig:3:5: error: use of undefined value here causes undefined behavior",
3340 "tmp.zig:3:5: error: use of undefined value here causes undefined behavior",
33223341 );
33233342
33243343 cases.add(
......@@ -3328,7 +3347,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
33283347 \\ _ = a ^ a;
33293348 \\}
33303349 ,
3331 ".tmp_source.zig:3:9: error: use of undefined value here causes undefined behavior",
3350 "tmp.zig:3:9: error: use of undefined value here causes undefined behavior",
33323351 );
33333352
33343353 cases.add(
......@@ -3338,7 +3357,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
33383357 \\ a ^= a;
33393358 \\}
33403359 ,
3341 ".tmp_source.zig:3:5: error: use of undefined value here causes undefined behavior",
3360 "tmp.zig:3:5: error: use of undefined value here causes undefined behavior",
33423361 );
33433362
33443363 cases.add(
......@@ -3348,7 +3367,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
33483367 \\ _ = a == a;
33493368 \\}
33503369 ,
3351 ".tmp_source.zig:3:9: error: use of undefined value here causes undefined behavior",
3370 "tmp.zig:3:9: error: use of undefined value here causes undefined behavior",
33523371 );
33533372
33543373 cases.add(
......@@ -3358,7 +3377,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
33583377 \\ _ = a != a;
33593378 \\}
33603379 ,
3361 ".tmp_source.zig:3:9: error: use of undefined value here causes undefined behavior",
3380 "tmp.zig:3:9: error: use of undefined value here causes undefined behavior",
33623381 );
33633382
33643383 cases.add(
......@@ -3368,7 +3387,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
33683387 \\ _ = a > a;
33693388 \\}
33703389 ,
3371 ".tmp_source.zig:3:9: error: use of undefined value here causes undefined behavior",
3390 "tmp.zig:3:9: error: use of undefined value here causes undefined behavior",
33723391 );
33733392
33743393 cases.add(
......@@ -3378,7 +3397,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
33783397 \\ _ = a >= a;
33793398 \\}
33803399 ,
3381 ".tmp_source.zig:3:9: error: use of undefined value here causes undefined behavior",
3400 "tmp.zig:3:9: error: use of undefined value here causes undefined behavior",
33823401 );
33833402
33843403 cases.add(
......@@ -3388,7 +3407,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
33883407 \\ _ = a < a;
33893408 \\}
33903409 ,
3391 ".tmp_source.zig:3:9: error: use of undefined value here causes undefined behavior",
3410 "tmp.zig:3:9: error: use of undefined value here causes undefined behavior",
33923411 );
33933412
33943413 cases.add(
......@@ -3398,7 +3417,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
33983417 \\ _ = a <= a;
33993418 \\}
34003419 ,
3401 ".tmp_source.zig:3:9: error: use of undefined value here causes undefined behavior",
3420 "tmp.zig:3:9: error: use of undefined value here causes undefined behavior",
34023421 );
34033422
34043423 cases.add(
......@@ -3408,7 +3427,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
34083427 \\ _ = a and a;
34093428 \\}
34103429 ,
3411 ".tmp_source.zig:3:9: error: use of undefined value here causes undefined behavior",
3430 "tmp.zig:3:9: error: use of undefined value here causes undefined behavior",
34123431 );
34133432
34143433 cases.add(
......@@ -3418,7 +3437,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
34183437 \\ _ = a or a;
34193438 \\}
34203439 ,
3421 ".tmp_source.zig:3:9: error: use of undefined value here causes undefined behavior",
3440 "tmp.zig:3:9: error: use of undefined value here causes undefined behavior",
34223441 );
34233442
34243443 cases.add(
......@@ -3428,7 +3447,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
34283447 \\ _ = -a;
34293448 \\}
34303449 ,
3431 ".tmp_source.zig:3:10: error: use of undefined value here causes undefined behavior",
3450 "tmp.zig:3:10: error: use of undefined value here causes undefined behavior",
34323451 );
34333452
34343453 cases.add(
......@@ -3438,7 +3457,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
34383457 \\ _ = -%a;
34393458 \\}
34403459 ,
3441 ".tmp_source.zig:3:11: error: use of undefined value here causes undefined behavior",
3460 "tmp.zig:3:11: error: use of undefined value here causes undefined behavior",
34423461 );
34433462
34443463 cases.add(
......@@ -3448,7 +3467,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
34483467 \\ _ = ~a;
34493468 \\}
34503469 ,
3451 ".tmp_source.zig:3:10: error: use of undefined value here causes undefined behavior",
3470 "tmp.zig:3:10: error: use of undefined value here causes undefined behavior",
34523471 );
34533472
34543473 cases.add(
......@@ -3458,7 +3477,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
34583477 \\ _ = !a;
34593478 \\}
34603479 ,
3461 ".tmp_source.zig:3:10: error: use of undefined value here causes undefined behavior",
3480 "tmp.zig:3:10: error: use of undefined value here causes undefined behavior",
34623481 );
34633482
34643483 cases.add(
......@@ -3468,7 +3487,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
34683487 \\ _ = a orelse false;
34693488 \\}
34703489 ,
3471 ".tmp_source.zig:3:11: error: use of undefined value here causes undefined behavior",
3490 "tmp.zig:3:11: error: use of undefined value here causes undefined behavior",
34723491 );
34733492
34743493 cases.add(
......@@ -3478,7 +3497,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
34783497 \\ _ = a catch |err| false;
34793498 \\}
34803499 ,
3481 ".tmp_source.zig:3:11: error: use of undefined value here causes undefined behavior",
3500 "tmp.zig:3:11: error: use of undefined value here causes undefined behavior",
34823501 );
34833502
34843503 cases.add(
......@@ -3488,7 +3507,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
34883507 \\ _ = a.*;
34893508 \\}
34903509 ,
3491 ".tmp_source.zig:3:9: error: attempt to dereference undefined value",
3510 "tmp.zig:3:9: error: attempt to dereference undefined value",
34923511 );
34933512
34943513 cases.add(
......@@ -3500,8 +3519,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
35003519 \\
35013520 \\export fn entry() usize { return @sizeOf(@typeOf(seventh_fib_number)); }
35023521 ,
3503 ".tmp_source.zig:3:21: error: evaluation exceeded 1000 backwards branches",
3504 ".tmp_source.zig:3:21: note: called from here",
3522 "tmp.zig:3:21: error: evaluation exceeded 1000 backwards branches",
3523 "tmp.zig:3:21: note: called from here",
35053524 );
35063525
35073526 cases.add(
......@@ -3510,7 +3529,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
35103529 \\
35113530 \\export fn entry() usize { return @sizeOf(@typeOf(resource)); }
35123531 ,
3513 ".tmp_source.zig:1:29: error: unable to find '",
3532 "tmp.zig:1:29: error: unable to find '",
35143533 "bogus.txt'",
35153534 );
35163535
......@@ -3524,7 +3543,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
35243543 \\
35253544 \\export fn entry() usize { return @sizeOf(@typeOf(a)); }
35263545 ,
3527 ".tmp_source.zig:4:21: error: unable to evaluate constant expression",
3546 "tmp.zig:4:21: error: unable to evaluate constant expression",
35283547 );
35293548
35303549 cases.add(
......@@ -3541,8 +3560,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
35413560 \\
35423561 \\export fn entry() usize { return @sizeOf(@typeOf(a)); }
35433562 ,
3544 ".tmp_source.zig:6:24: error: unable to evaluate constant expression",
3545 ".tmp_source.zig:4:17: note: called from here",
3563 "tmp.zig:6:24: error: unable to evaluate constant expression",
3564 "tmp.zig:4:17: note: called from here",
35463565 );
35473566
35483567 cases.add(
......@@ -3554,7 +3573,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
35543573 \\ bad_fn_call();
35553574 \\}
35563575 ,
3557 ".tmp_source.zig:5:5: error: use of undeclared identifier 'bad_fn_call'",
3576 "tmp.zig:5:5: error: use of undeclared identifier 'bad_fn_call'",
35583577 );
35593578
35603579 cases.add(
......@@ -3573,8 +3592,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
35733592 \\export fn entry1() usize { return @sizeOf(@typeOf(bad_eql_1)); }
35743593 \\export fn entry2() usize { return @sizeOf(@typeOf(bad_eql_2)); }
35753594 ,
3576 ".tmp_source.zig:2:14: error: operator not allowed for type '[]u8'",
3577 ".tmp_source.zig:9:16: error: operator not allowed for type 'EnumWithData'",
3595 "tmp.zig:2:14: error: operator not allowed for type '[]u8'",
3596 "tmp.zig:9:16: error: operator not allowed for type 'EnumWithData'",
35783597 );
35793598
35803599 cases.add(
......@@ -3590,7 +3609,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
35903609 \\ return 2;
35913610 \\}
35923611 ,
3593 ".tmp_source.zig:2:15: error: values of type 'comptime_int' must be comptime known",
3612 "tmp.zig:2:15: error: values of type 'comptime_int' must be comptime known",
35943613 );
35953614
35963615 cases.add(
......@@ -3601,7 +3620,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
36013620 \\ while (!@cmpxchgWeak(i32, &x, 1234, 5678, AtomicOrder.Monotonic, AtomicOrder.SeqCst)) {}
36023621 \\}
36033622 ,
3604 ".tmp_source.zig:4:81: error: failure atomic ordering must be no stricter than success",
3623 "tmp.zig:4:81: error: failure atomic ordering must be no stricter than success",
36053624 );
36063625
36073626 cases.add(
......@@ -3612,7 +3631,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
36123631 \\ while (!@cmpxchgWeak(i32, &x, 1234, 5678, AtomicOrder.Unordered, AtomicOrder.Unordered)) {}
36133632 \\}
36143633 ,
3615 ".tmp_source.zig:4:58: error: success atomic ordering must be Monotonic or stricter",
3634 "tmp.zig:4:58: error: success atomic ordering must be Monotonic or stricter",
36163635 );
36173636
36183637 cases.add(
......@@ -3624,8 +3643,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
36243643 \\
36253644 \\export fn entry() usize { return @sizeOf(@typeOf(y)); }
36263645 ,
3627 ".tmp_source.zig:3:12: error: negation caused overflow",
3628 ".tmp_source.zig:1:14: note: called from here",
3646 "tmp.zig:3:12: error: negation caused overflow",
3647 "tmp.zig:1:14: note: called from here",
36293648 );
36303649
36313650 cases.add(
......@@ -3637,8 +3656,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
36373656 \\
36383657 \\export fn entry() usize { return @sizeOf(@typeOf(y)); }
36393658 ,
3640 ".tmp_source.zig:3:14: error: operation caused overflow",
3641 ".tmp_source.zig:1:14: note: called from here",
3659 "tmp.zig:3:14: error: operation caused overflow",
3660 "tmp.zig:1:14: note: called from here",
36423661 );
36433662
36443663 cases.add(
......@@ -3650,8 +3669,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
36503669 \\
36513670 \\export fn entry() usize { return @sizeOf(@typeOf(y)); }
36523671 ,
3653 ".tmp_source.zig:3:14: error: operation caused overflow",
3654 ".tmp_source.zig:1:14: note: called from here",
3672 "tmp.zig:3:14: error: operation caused overflow",
3673 "tmp.zig:1:14: note: called from here",
36553674 );
36563675
36573676 cases.add(
......@@ -3663,8 +3682,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
36633682 \\
36643683 \\export fn entry() usize { return @sizeOf(@typeOf(y)); }
36653684 ,
3666 ".tmp_source.zig:3:14: error: operation caused overflow",
3667 ".tmp_source.zig:1:14: note: called from here",
3685 "tmp.zig:3:14: error: operation caused overflow",
3686 "tmp.zig:1:14: note: called from here",
36683687 );
36693688
36703689 cases.add(
......@@ -3676,7 +3695,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
36763695 \\
36773696 \\export fn entry() usize { return @sizeOf(@typeOf(f)); }
36783697 ,
3679 ".tmp_source.zig:3:26: error: expected signed integer type, found 'u32'",
3698 "tmp.zig:3:26: error: expected signed integer type, found 'u32'",
36803699 );
36813700
36823701 cases.add(
......@@ -3686,8 +3705,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
36863705 \\}
36873706 \\fn something() anyerror!void { }
36883707 ,
3689 ".tmp_source.zig:2:5: error: expected type 'void', found 'anyerror'",
3690 ".tmp_source.zig:1:15: note: return type declared here",
3708 "tmp.zig:2:5: error: expected type 'void', found 'anyerror'",
3709 "tmp.zig:1:15: note: return type declared here",
36913710 );
36923711
36933712 cases.add(
......@@ -3700,7 +3719,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
37003719 \\ }
37013720 \\}
37023721 ,
3703 ".tmp_source.zig:2:13: error: unable to evaluate constant expression",
3722 "tmp.zig:2:13: error: unable to evaluate constant expression",
37043723 );
37053724
37063725 cases.add(
......@@ -3709,7 +3728,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
37093728 \\ return x + y;
37103729 \\}
37113730 ,
3712 ".tmp_source.zig:1:15: error: comptime parameter not allowed in function with calling convention 'ccc'",
3731 "tmp.zig:1:15: error: comptime parameter not allowed in function with calling convention 'ccc'",
37133732 );
37143733
37153734 cases.add(
......@@ -3720,7 +3739,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
37203739 \\}
37213740 \\export fn entry() usize { return @sizeOf(@typeOf(f)); }
37223741 ,
3723 ".tmp_source.zig:1:15: error: comptime parameter not allowed in function with calling convention 'ccc'",
3742 "tmp.zig:1:15: error: comptime parameter not allowed in function with calling convention 'ccc'",
37243743 );
37253744
37263745 cases.add(
......@@ -3730,8 +3749,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
37303749 \\ var foo = @bytesToSlice(u32, array)[0];
37313750 \\}
37323751 ,
3733 ".tmp_source.zig:3:15: error: unable to convert [5]u8 to []align(1) const u32: size mismatch",
3734 ".tmp_source.zig:3:29: note: u32 has size 4; remaining bytes: 1",
3752 "tmp.zig:3:15: error: unable to convert [5]u8 to []align(1) const u32: size mismatch",
3753 "tmp.zig:3:29: note: u32 has size 4; remaining bytes: 1",
37353754 );
37363755
37373756 cases.add(
......@@ -3755,8 +3774,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
37553774 \\ list.length = 10;
37563775 \\}
37573776 ,
3758 ".tmp_source.zig:3:7: error: unable to evaluate constant expression",
3759 ".tmp_source.zig:16:19: note: called from here",
3777 "tmp.zig:3:7: error: unable to evaluate constant expression",
3778 "tmp.zig:16:19: note: called from here",
37603779 );
37613780
37623781 cases.add(
......@@ -3767,7 +3786,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
37673786 \\}
37683787 \\export fn entry() usize { return @sizeOf(@typeOf(f)); }
37693788 ,
3770 ".tmp_source.zig:3:6: error: no member named 'copy' in '[]const u8'",
3789 "tmp.zig:3:6: error: no member named 'copy' in '[]const u8'",
37713790 );
37723791
37733792 cases.add(
......@@ -3781,7 +3800,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
37813800 \\}
37823801 \\export fn entry() usize { return @sizeOf(@typeOf(f)); }
37833802 ,
3784 ".tmp_source.zig:6:15: error: expected 2 arguments, found 3",
3803 "tmp.zig:6:15: error: expected 2 arguments, found 3",
37853804 );
37863805
37873806 cases.add(
......@@ -3791,7 +3810,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
37913810 \\ cstr[0] = 'W';
37923811 \\}
37933812 ,
3794 ".tmp_source.zig:3:11: error: cannot assign to constant",
3813 "tmp.zig:3:11: error: cannot assign to constant",
37953814 );
37963815
37973816 cases.add(
......@@ -3801,14 +3820,14 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
38013820 \\ cstr[0] = 'W';
38023821 \\}
38033822 ,
3804 ".tmp_source.zig:3:11: error: cannot assign to constant",
3823 "tmp.zig:3:11: error: cannot assign to constant",
38053824 );
38063825
38073826 cases.add(
38083827 "main function with bogus args type",
38093828 \\pub fn main(args: [][]bogus) !void {}
38103829 ,
3811 ".tmp_source.zig:1:23: error: use of undeclared identifier 'bogus'",
3830 "tmp.zig:1:23: error: use of undeclared identifier 'bogus'",
38123831 );
38133832
38143833 cases.add(
......@@ -3844,7 +3863,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
38443863 \\
38453864 \\export fn entry() usize { return @sizeOf(@typeOf(foo)); }
38463865 ,
3847 ".tmp_source.zig:5:16: error: use of undeclared identifier 'JsonList'",
3866 "tmp.zig:5:16: error: use of undeclared identifier 'JsonList'",
38483867 );
38493868
38503869 cases.add(
......@@ -3865,7 +3884,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
38653884 \\ derp.init();
38663885 \\}
38673886 ,
3868 ".tmp_source.zig:14:5: error: expected type 'i32', found 'Foo'",
3887 "tmp.zig:14:5: error: expected type 'i32', found 'Foo'",
38693888 );
38703889
38713890 cases.add(
......@@ -3895,7 +3914,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
38953914 \\ x.init();
38963915 \\}
38973916 ,
3898 ".tmp_source.zig:23:5: error: expected type '*Allocator', found '*List'",
3917 "tmp.zig:23:5: error: expected type '*Allocator', found '*List'",
38993918 );
39003919
39013920 cases.add(
......@@ -3906,7 +3925,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
39063925 \\
39073926 \\export fn entry() usize { return @sizeOf(@typeOf(block_aligned_stuff)); }
39083927 ,
3909 ".tmp_source.zig:3:60: error: unable to perform binary not operation on type 'comptime_int'",
3928 "tmp.zig:3:60: error: unable to perform binary not operation on type 'comptime_int'",
39103929 );
39113930
39123931 cases.addCase(x: {
......@@ -3918,7 +3937,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
39183937 \\ foo.privateFunction();
39193938 \\}
39203939 ,
3921 ".tmp_source.zig:4:8: error: 'privateFunction' is private",
3940 "tmp.zig:4:8: error: 'privateFunction' is private",
39223941 "foo.zig:1:1: note: declared here",
39233942 );
39243943
......@@ -3936,7 +3955,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
39363955 \\
39373956 \\export fn entry() usize { return @sizeOf(@typeOf(a)); }
39383957 ,
3939 ".tmp_source.zig:2:11: error: expected type 'type', found 'i32'",
3958 "tmp.zig:2:11: error: expected type 'type', found 'i32'",
39403959 );
39413960
39423961 cases.add(
......@@ -3949,7 +3968,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
39493968 \\ f.field = 0;
39503969 \\}
39513970 ,
3952 ".tmp_source.zig:6:13: error: cannot assign to constant",
3971 "tmp.zig:6:13: error: cannot assign to constant",
39533972 );
39543973
39553974 cases.add(
......@@ -3970,7 +3989,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
39703989 \\
39713990 \\export fn entry() usize { return @sizeOf(@typeOf(testTrickyDefer)); }
39723991 ,
3973 ".tmp_source.zig:4:11: error: cannot return from defer expression",
3992 "tmp.zig:4:11: error: cannot return from defer expression",
39743993 );
39753994
39763995 cases.add(
......@@ -3985,8 +4004,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
39854004 \\
39864005 \\export fn entry() usize { return @sizeOf(@typeOf(foo)); }
39874006 ,
3988 ".tmp_source.zig:2:26: error: index 1 outside argument list of size 1",
3989 ".tmp_source.zig:6:15: note: called from here",
4007 "tmp.zig:2:26: error: index 1 outside argument list of size 1",
4008 "tmp.zig:6:15: note: called from here",
39904009 );
39914010
39924011 cases.add(
......@@ -4005,7 +4024,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
40054024 \\
40064025 \\export fn entry() usize { return @sizeOf(@typeOf(bar)); }
40074026 ,
4008 ".tmp_source.zig:10:16: error: compiler bug: integer and float literals in var args function must be casted",
4027 "tmp.zig:10:16: error: compiler bug: integer and float literals in var args function must be casted",
40094028 );
40104029
40114030 cases.add(
......@@ -4014,7 +4033,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
40144033 \\ var vga_mem: u16 = 0xB8000;
40154034 \\}
40164035 ,
4017 ".tmp_source.zig:2:24: error: integer value 753664 cannot be implicitly casted to type 'u16'",
4036 "tmp.zig:2:24: error: integer value 753664 cannot be implicitly casted to type 'u16'",
40184037 );
40194038
40204039 cases.add(
......@@ -4022,7 +4041,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
40224041 \\const some_data: [100]u8 align(3) = undefined;
40234042 \\export fn entry() usize { return @sizeOf(@typeOf(some_data)); }
40244043 ,
4025 ".tmp_source.zig:1:32: error: alignment value 3 is not a power of 2",
4044 "tmp.zig:1:32: error: alignment value 3 is not a power of 2",
40264045 );
40274046
40284047 cases.add(
......@@ -4030,7 +4049,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
40304049 \\extern fn foo() align(3) void;
40314050 \\export fn entry() void { return foo(); }
40324051 ,
4033 ".tmp_source.zig:1:23: error: alignment value 3 is not a power of 2",
4052 "tmp.zig:1:23: error: alignment value 3 is not a power of 2",
40344053 );
40354054
40364055 cases.add(
......@@ -4044,9 +4063,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
40444063 \\ @compileLog("end",);
40454064 \\}
40464065 ,
4047 ".tmp_source.zig:5:5: error: found compile log statement",
4048 ".tmp_source.zig:6:5: error: found compile log statement",
4049 ".tmp_source.zig:7:5: error: found compile log statement",
4066 "tmp.zig:5:5: error: found compile log statement",
4067 "tmp.zig:6:5: error: found compile log statement",
4068 "tmp.zig:7:5: error: found compile log statement",
40504069 );
40514070
40524071 cases.add(
......@@ -4067,7 +4086,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
40674086 \\
40684087 \\export fn entry() usize { return @sizeOf(@typeOf(foo)); }
40694088 ,
4070 ".tmp_source.zig:8:26: error: expected type '*const u3', found '*align(:3:1) const u3'",
4089 "tmp.zig:8:26: error: expected type '*const u3', found '*align(:3:1) const u3'",
40714090 );
40724091
40734092 cases.add(
......@@ -4084,8 +4103,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
40844103 \\ if (!ok) unreachable;
40854104 \\}
40864105 ,
4087 ".tmp_source.zig:10:14: error: unable to evaluate constant expression",
4088 ".tmp_source.zig:6:20: note: called from here",
4106 "tmp.zig:10:14: error: unable to evaluate constant expression",
4107 "tmp.zig:6:20: note: called from here",
40894108 );
40904109
40914110 cases.add(
......@@ -4099,8 +4118,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
40994118 \\
41004119 \\fn bar() void { }
41014120 ,
4102 ".tmp_source.zig:3:5: error: control flow attempts to use compile-time variable at runtime",
4103 ".tmp_source.zig:3:24: note: compile-time variable assigned here",
4121 "tmp.zig:3:5: error: control flow attempts to use compile-time variable at runtime",
4122 "tmp.zig:3:24: note: compile-time variable assigned here",
41044123 );
41054124
41064125 cases.add(
......@@ -4110,7 +4129,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
41104129 \\}
41114130 \\fn bar() i32 { return 0; }
41124131 ,
4113 ".tmp_source.zig:2:8: error: expression value is ignored",
4132 "tmp.zig:2:8: error: expression value is ignored",
41144133 );
41154134
41164135 cases.add(
......@@ -4120,7 +4139,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
41204139 \\}
41214140 \\fn bar() anyerror!i32 { return 0; }
41224141 ,
4123 ".tmp_source.zig:2:11: error: expression value is ignored",
4142 "tmp.zig:2:11: error: expression value is ignored",
41244143 );
41254144
41264145 cases.add(
......@@ -4129,7 +4148,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
41294148 \\ 1;
41304149 \\}
41314150 ,
4132 ".tmp_source.zig:2:5: error: expression value is ignored",
4151 "tmp.zig:2:5: error: expression value is ignored",
41334152 );
41344153
41354154 cases.add(
......@@ -4138,7 +4157,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
41384157 \\ comptime {1;}
41394158 \\}
41404159 ,
4141 ".tmp_source.zig:2:15: error: expression value is ignored",
4160 "tmp.zig:2:15: error: expression value is ignored",
41424161 );
41434162
41444163 cases.add(
......@@ -4147,7 +4166,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
41474166 \\ comptime 1;
41484167 \\}
41494168 ,
4150 ".tmp_source.zig:2:5: error: expression value is ignored",
4169 "tmp.zig:2:5: error: expression value is ignored",
41514170 );
41524171
41534172 cases.add(
......@@ -4156,7 +4175,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
41564175 \\ defer {1;}
41574176 \\}
41584177 ,
4159 ".tmp_source.zig:2:12: error: expression value is ignored",
4178 "tmp.zig:2:12: error: expression value is ignored",
41604179 );
41614180
41624181 cases.add(
......@@ -4166,7 +4185,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
41664185 \\}
41674186 \\fn bar() anyerror!i32 { return 0; }
41684187 ,
4169 ".tmp_source.zig:2:14: error: expression value is ignored",
4188 "tmp.zig:2:14: error: expression value is ignored",
41704189 );
41714190
41724191 cases.add(
......@@ -4180,7 +4199,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
41804199 \\
41814200 \\export fn entry() usize { return @sizeOf(@typeOf(pass)); }
41824201 ,
4183 ".tmp_source.zig:4:10: error: attempt to dereference non-pointer type '[10]u8'",
4202 "tmp.zig:4:10: error: attempt to dereference non-pointer type '[10]u8'",
41844203 );
41854204
41864205 cases.add(
......@@ -4196,7 +4215,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
41964215 \\
41974216 \\export fn entry() usize { return @sizeOf(@typeOf(foo)); }
41984217 ,
4199 ".tmp_source.zig:4:19: error: expected type '*[]const u8', found '*const []const u8'",
4218 "tmp.zig:4:19: error: expected type '*[]const u8', found '*const []const u8'",
42004219 );
42014220
42024221 cases.addCase(x: {
......@@ -4209,7 +4228,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
42094228 \\}
42104229 ,
42114230 "foo.zig:1:1: error: exported symbol collision: 'bar'",
4212 ".tmp_source.zig:3:1: note: other symbol here",
4231 "tmp.zig:3:1: note: other symbol here",
42134232 );
42144233
42154234 tc.addSourceFile("foo.zig",
......@@ -4228,7 +4247,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
42284247 \\ foo(global_array);
42294248 \\}
42304249 ,
4231 ".tmp_source.zig:4:9: error: expected type '[]i32', found '[10]i32'",
4250 "tmp.zig:4:9: error: expected type '[]i32', found '[10]i32'",
42324251 );
42334252
42344253 cases.add(
......@@ -4237,7 +4256,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
42374256 \\ return @ptrCast(usize, a);
42384257 \\}
42394258 ,
4240 ".tmp_source.zig:2:21: error: expected pointer, found 'usize'",
4259 "tmp.zig:2:21: error: expected pointer, found 'usize'",
42414260 );
42424261
42434262 cases.add(
......@@ -4254,7 +4273,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
42544273 \\ );
42554274 \\}
42564275 ,
4257 ".tmp_source.zig:6:5: error: unable to evaluate constant expression",
4276 "tmp.zig:6:5: error: unable to evaluate constant expression",
42584277 );
42594278
42604279 cases.add(
......@@ -4264,7 +4283,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
42644283 \\ const foo = builtin.Arch.x86;
42654284 \\}
42664285 ,
4267 ".tmp_source.zig:3:29: error: container 'Arch' has no member called 'x86'",
4286 "tmp.zig:3:29: error: container 'builtin.Arch' has no member called 'x86'",
42684287 );
42694288
42704289 cases.add(
......@@ -4274,7 +4293,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
42744293 \\ var y: *void = @intToPtr(*void, x);
42754294 \\}
42764295 ,
4277 ".tmp_source.zig:3:30: error: type '*void' has 0 bits and cannot store information",
4296 "tmp.zig:3:30: error: type '*void' has 0 bits and cannot store information",
42784297 );
42794298
42804299 cases.add(
......@@ -4284,7 +4303,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
42844303 \\ return @fieldParentPtr(Foo, "a", a);
42854304 \\}
42864305 ,
4287 ".tmp_source.zig:3:28: error: expected struct type, found 'i32'",
4306 "tmp.zig:3:28: error: expected struct type, found 'i32'",
42884307 );
42894308
42904309 cases.add(
......@@ -4296,7 +4315,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
42964315 \\ return @fieldParentPtr(Foo, "a", a);
42974316 \\}
42984317 ,
4299 ".tmp_source.zig:5:33: error: struct 'Foo' has no field 'a'",
4318 "tmp.zig:5:33: error: struct 'Foo' has no field 'a'",
43004319 );
43014320
43024321 cases.add(
......@@ -4308,7 +4327,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
43084327 \\ return @fieldParentPtr(Foo, "a", a);
43094328 \\}
43104329 ,
4311 ".tmp_source.zig:5:38: error: expected pointer, found 'i32'",
4330 "tmp.zig:5:38: error: expected pointer, found 'i32'",
43124331 );
43134332
43144333 cases.add(
......@@ -4324,7 +4343,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
43244343 \\ const another_foo_ptr = @fieldParentPtr(Foo, "b", field_ptr);
43254344 \\}
43264345 ,
4327 ".tmp_source.zig:9:55: error: pointer value not based on parent struct",
4346 "tmp.zig:9:55: error: pointer value not based on parent struct",
43284347 );
43294348
43304349 cases.add(
......@@ -4339,7 +4358,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
43394358 \\ const another_foo_ptr = @fieldParentPtr(Foo, "b", &foo.a);
43404359 \\}
43414360 ,
4342 ".tmp_source.zig:8:29: error: field 'b' has index 1 but pointer value is index 0 of struct 'Foo'",
4361 "tmp.zig:8:29: error: field 'b' has index 1 but pointer value is index 0 of struct 'Foo'",
43434362 );
43444363
43454364 cases.add(
......@@ -4349,7 +4368,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
43494368 \\ return @byteOffsetOf(Foo, "a",);
43504369 \\}
43514370 ,
4352 ".tmp_source.zig:3:26: error: expected struct type, found 'i32'",
4371 "tmp.zig:3:26: error: expected struct type, found 'i32'",
43534372 );
43544373
43554374 cases.add(
......@@ -4361,14 +4380,14 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
43614380 \\ return @byteOffsetOf(Foo, "a",);
43624381 \\}
43634382 ,
4364 ".tmp_source.zig:5:31: error: struct 'Foo' has no field 'a'",
4383 "tmp.zig:5:31: error: struct 'Foo' has no field 'a'",
43654384 );
43664385
43674386 cases.addExe(
43684387 "missing main fn in executable",
43694388 \\
43704389 ,
4371 "error: no member named 'main' in '",
4390 "error: root source file has no member called 'main'",
43724391 );
43734392
43744393 cases.addExe(
......@@ -4376,7 +4395,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
43764395 \\fn main() void {}
43774396 ,
43784397 "error: 'main' is private",
4379 ".tmp_source.zig:1:1: note: declared here",
4398 "tmp.zig:1:1: note: declared here",
43804399 );
43814400
43824401 cases.add(
......@@ -4386,7 +4405,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
43864405 \\ return foo;
43874406 \\}
43884407 ,
4389 ".tmp_source.zig:1:33: error: cannot set section of external variable 'foo'",
4408 "tmp.zig:1:33: error: cannot set section of external variable 'foo'",
43904409 );
43914410
43924411 cases.add(
......@@ -4396,7 +4415,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
43964415 \\ return foo;
43974416 \\}
43984417 ,
4399 ".tmp_source.zig:2:30: error: cannot set section of local variable 'foo'",
4418 "tmp.zig:2:30: error: cannot set section of local variable 'foo'",
44004419 );
44014420
44024421 cases.add(
......@@ -4406,7 +4425,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
44064425 \\ foo();
44074426 \\}
44084427 ,
4409 ".tmp_source.zig:1:29: error: cannot set section of external function 'foo'",
4428 "tmp.zig:1:29: error: cannot set section of external function 'foo'",
44104429 );
44114430
44124431 cases.add(
......@@ -4416,7 +4435,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
44164435 \\ return &a;
44174436 \\}
44184437 ,
4419 ".tmp_source.zig:3:13: error: function returns address of local variable",
4438 "tmp.zig:3:13: error: function returns address of local variable",
44204439 );
44214440
44224441 cases.add(
......@@ -4427,7 +4446,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
44274446 \\ return if (c) &a else &b;
44284447 \\}
44294448 ,
4430 ".tmp_source.zig:4:12: error: function returns address of local variable",
4449 "tmp.zig:4:12: error: function returns address of local variable",
44314450 );
44324451
44334452 cases.add(
......@@ -4452,8 +4471,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
44524471 \\ if (!ok) unreachable;
44534472 \\}
44544473 ,
4455 ".tmp_source.zig:9:17: error: redefinition of 'Self'",
4456 ".tmp_source.zig:5:9: note: previous definition is here",
4474 "tmp.zig:9:17: error: redefinition of 'Self'",
4475 "tmp.zig:5:9: note: previous definition is here",
44574476 );
44584477
44594478 cases.add(
......@@ -4463,7 +4482,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
44634482 \\}
44644483 \\fn bar() ?i32 { return 1; }
44654484 ,
4466 ".tmp_source.zig:2:15: error: expected type 'bool', found '?i32'",
4485 "tmp.zig:2:15: error: expected type 'bool', found '?i32'",
44674486 );
44684487
44694488 cases.add(
......@@ -4473,7 +4492,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
44734492 \\}
44744493 \\fn bar() anyerror!i32 { return 1; }
44754494 ,
4476 ".tmp_source.zig:2:15: error: expected type 'bool', found 'anyerror!i32'",
4495 "tmp.zig:2:15: error: expected type 'bool', found 'anyerror!i32'",
44774496 );
44784497
44794498 cases.add(
......@@ -4483,7 +4502,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
44834502 \\}
44844503 \\fn bar() bool { return true; }
44854504 ,
4486 ".tmp_source.zig:2:15: error: expected optional type, found 'bool'",
4505 "tmp.zig:2:15: error: expected optional type, found 'bool'",
44874506 );
44884507
44894508 cases.add(
......@@ -4493,7 +4512,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
44934512 \\}
44944513 \\fn bar() anyerror!i32 { return 1; }
44954514 ,
4496 ".tmp_source.zig:2:15: error: expected optional type, found 'anyerror!i32'",
4515 "tmp.zig:2:15: error: expected optional type, found 'anyerror!i32'",
44974516 );
44984517
44994518 cases.add(
......@@ -4503,7 +4522,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
45034522 \\}
45044523 \\fn bar() bool { return true; }
45054524 ,
4506 ".tmp_source.zig:2:15: error: expected error union type, found 'bool'",
4525 "tmp.zig:2:15: error: expected error union type, found 'bool'",
45074526 );
45084527
45094528 cases.add(
......@@ -4513,7 +4532,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
45134532 \\}
45144533 \\fn bar() ?i32 { return 1; }
45154534 ,
4516 ".tmp_source.zig:2:15: error: expected error union type, found '?i32'",
4535 "tmp.zig:2:15: error: expected error union type, found '?i32'",
45174536 );
45184537
45194538 cases.add(
......@@ -4531,7 +4550,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
45314550 \\}
45324551 \\extern fn quux() void;
45334552 ,
4534 ".tmp_source.zig:4:1: error: unable to inline function",
4553 "tmp.zig:4:1: error: unable to inline function",
45354554 );
45364555
45374556 cases.add(
......@@ -4542,7 +4561,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
45424561 \\inline fn bar() void { }
45434562 \\extern fn quux(usize) void;
45444563 ,
4545 ".tmp_source.zig:4:1: error: unable to inline function",
4564 "tmp.zig:4:1: error: unable to inline function",
45464565 );
45474566
45484567 cases.add(
......@@ -4551,7 +4570,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
45514570 \\ return a / b;
45524571 \\}
45534572 ,
4554 ".tmp_source.zig:2:14: error: division with 'i32' and 'i32': signed integers must use @divTrunc, @divFloor, or @divExact",
4573 "tmp.zig:2:14: error: division with 'i32' and 'i32': signed integers must use @divTrunc, @divFloor, or @divExact",
45554574 );
45564575
45574576 cases.add(
......@@ -4560,7 +4579,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
45604579 \\ return a % b;
45614580 \\}
45624581 ,
4563 ".tmp_source.zig:2:14: error: remainder division with 'i32' and 'i32': signed integers and floats must use @rem or @mod",
4582 "tmp.zig:2:14: error: remainder division with 'i32' and 'i32': signed integers and floats must use @rem or @mod",
45644583 );
45654584
45664585 cases.add(
......@@ -4571,7 +4590,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
45714590 \\ const c = a / b;
45724591 \\}
45734592 ,
4574 ".tmp_source.zig:4:17: error: division by zero",
4593 "tmp.zig:4:17: error: division by zero",
45754594 );
45764595
45774596 cases.add(
......@@ -4582,7 +4601,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
45824601 \\ const c = a % b;
45834602 \\}
45844603 ,
4585 ".tmp_source.zig:4:17: error: division by zero",
4604 "tmp.zig:4:17: error: division by zero",
45864605 );
45874606
45884607 cases.add(
......@@ -4592,8 +4611,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
45924611 \\ @setRuntimeSafety(false);
45934612 \\}
45944613 ,
4595 ".tmp_source.zig:3:5: error: runtime safety set twice for same scope",
4596 ".tmp_source.zig:2:5: note: first set here",
4614 "tmp.zig:3:5: error: runtime safety set twice for same scope",
4615 "tmp.zig:2:5: note: first set here",
45974616 );
45984617
45994618 cases.add(
......@@ -4603,8 +4622,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
46034622 \\ @setFloatMode(@import("builtin").FloatMode.Optimized);
46044623 \\}
46054624 ,
4606 ".tmp_source.zig:3:5: error: float mode set twice for same scope",
4607 ".tmp_source.zig:2:5: note: first set here",
4625 "tmp.zig:3:5: error: float mode set twice for same scope",
4626 "tmp.zig:2:5: note: first set here",
46084627 );
46094628
46104629 cases.add(
......@@ -4613,7 +4632,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
46134632 \\ var b: u8[40] = undefined;
46144633 \\}
46154634 ,
4616 ".tmp_source.zig:2:14: error: array access of non-array type 'type'",
4635 "tmp.zig:2:14: error: array access of non-array type 'type'",
46174636 );
46184637
46194638 cases.add(
......@@ -4626,7 +4645,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
46264645 \\ }
46274646 \\}
46284647 ,
4629 ".tmp_source.zig:4:13: error: cannot break out of defer expression",
4648 "tmp.zig:4:13: error: cannot break out of defer expression",
46304649 );
46314650
46324651 cases.add(
......@@ -4639,7 +4658,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
46394658 \\ }
46404659 \\}
46414660 ,
4642 ".tmp_source.zig:4:13: error: cannot continue out of defer expression",
4661 "tmp.zig:4:13: error: cannot continue out of defer expression",
46434662 );
46444663
46454664 cases.add(
......@@ -4653,7 +4672,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
46534672 \\ foos[0]();
46544673 \\}
46554674 ,
4656 ".tmp_source.zig:7:9: error: calling a generic function requires compile-time known function value",
4675 "tmp.zig:7:9: error: calling a generic function requires compile-time known function value",
46574676 );
46584677
46594678 cases.add(
......@@ -4667,7 +4686,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
46674686 \\ foos[0](true);
46684687 \\}
46694688 ,
4670 ".tmp_source.zig:7:9: error: calling a generic function requires compile-time known function value",
4689 "tmp.zig:7:9: error: calling a generic function requires compile-time known function value",
46714690 );
46724691
46734692 cases.add(
......@@ -4681,24 +4700,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
46814700 \\ return bar;
46824701 \\}
46834702 ,
4684 ".tmp_source.zig:1:13: error: aoeu",
4685 ".tmp_source.zig:3:19: note: referenced here",
4686 ".tmp_source.zig:7:12: note: referenced here",
4687 );
4688
4689 cases.add(
4690 "instantiating an undefined value for an invalid struct that contains itself",
4691 \\const Foo = struct {
4692 \\ x: Foo,
4693 \\};
4694 \\
4695 \\var foo: Foo = undefined;
4696 \\
4697 \\export fn entry() usize {
4698 \\ return @sizeOf(@typeOf(foo.x));
4699 \\}
4700 ,
4701 ".tmp_source.zig:1:13: error: struct 'Foo' contains itself",
4703 "tmp.zig:1:13: error: aoeu",
4704 "tmp.zig:3:19: note: referenced here",
4705 "tmp.zig:7:12: note: referenced here",
47024706 );
47034707
47044708 cases.add(
......@@ -4707,7 +4711,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
47074711 \\ const a = 0x1.0p16384;
47084712 \\}
47094713 ,
4710 ".tmp_source.zig:2:15: error: float literal out of range of any type",
4714 "tmp.zig:2:15: error: float literal out of range of any type",
47114715 );
47124716
47134717 cases.add(
......@@ -4716,7 +4720,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
47164720 \\ const a = 0x1.0p-16384;
47174721 \\}
47184722 ,
4719 ".tmp_source.zig:2:15: error: float literal out of range of any type",
4723 "tmp.zig:2:15: error: float literal out of range of any type",
47204724 );
47214725
47224726 cases.add(
......@@ -4725,7 +4729,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
47254729 \\ return i32(12.34);
47264730 \\}
47274731 ,
4728 ".tmp_source.zig:2:16: error: fractional component prevents float value 12.340000 from being casted to type 'i32'",
4732 "tmp.zig:2:16: error: fractional component prevents float value 12.340000 from being casted to type 'i32'",
47294733 );
47304734
47314735 cases.add(
......@@ -4734,7 +4738,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
47344738 \\ return @ptrToInt(x);
47354739 \\}
47364740 ,
4737 ".tmp_source.zig:2:22: error: expected pointer, found 'i32'",
4741 "tmp.zig:2:22: error: expected pointer, found 'i32'",
47384742 );
47394743
47404744 cases.add(
......@@ -4743,7 +4747,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
47434747 \\ const x = @shlExact(u8(0b01010101), 2);
47444748 \\}
47454749 ,
4746 ".tmp_source.zig:2:15: error: operation caused overflow",
4750 "tmp.zig:2:15: error: operation caused overflow",
47474751 );
47484752
47494753 cases.add(
......@@ -4752,7 +4756,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
47524756 \\ const x = @shrExact(u8(0b10101010), 2);
47534757 \\}
47544758 ,
4755 ".tmp_source.zig:2:15: error: exact shift shifted out 1 bits",
4759 "tmp.zig:2:15: error: exact shift shifted out 1 bits",
47564760 );
47574761
47584762 cases.add(
......@@ -4761,7 +4765,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
47614765 \\ return 0x11 << x;
47624766 \\}
47634767 ,
4764 ".tmp_source.zig:2:17: error: LHS of shift must be an integer type, or RHS must be compile-time known",
4768 "tmp.zig:2:17: error: LHS of shift must be an integer type, or RHS must be compile-time known",
47654769 );
47664770
47674771 cases.add(
......@@ -4770,7 +4774,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
47704774 \\ return x << y;
47714775 \\}
47724776 ,
4773 ".tmp_source.zig:2:17: error: expected type 'u3', found 'u8'",
4777 "tmp.zig:2:17: error: expected type 'u3', found 'u8'",
47744778 );
47754779
47764780 cases.add(
......@@ -4780,7 +4784,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
47804784 \\ const a: u16 = 300;
47814785 \\}
47824786 ,
4783 ".tmp_source.zig:1:1: error: declaration shadows primitive type 'u16'",
4787 "tmp.zig:1:1: error: declaration shadows primitive type 'u16'",
47844788 );
47854789
47864790 cases.add(
......@@ -4799,7 +4803,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
47994803 \\ x.* += 1;
48004804 \\}
48014805 ,
4802 ".tmp_source.zig:8:13: error: expected type '*u32', found '*align(1) u32'",
4806 "tmp.zig:8:13: error: expected type '*u32', found '*align(1) u32'",
48034807 );
48044808
48054809 cases.add(
......@@ -4819,9 +4823,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
48194823 \\ x[0] += 1;
48204824 \\}
48214825 ,
4822 ".tmp_source.zig:9:18: error: cast increases pointer alignment",
4823 ".tmp_source.zig:9:23: note: '*align(1) u32' has alignment 1",
4824 ".tmp_source.zig:9:18: note: '*[1]u32' has alignment 4",
4826 "tmp.zig:9:18: error: cast increases pointer alignment",
4827 "tmp.zig:9:23: note: '*align(1) u32' has alignment 1",
4828 "tmp.zig:9:18: note: '*[1]u32' has alignment 4",
48254829 );
48264830
48274831 cases.add(
......@@ -4832,9 +4836,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
48324836 \\ return ptr.*;
48334837 \\}
48344838 ,
4835 ".tmp_source.zig:3:17: error: cast increases pointer alignment",
4836 ".tmp_source.zig:3:38: note: '*u8' has alignment 1",
4837 ".tmp_source.zig:3:26: note: '*u32' has alignment 4",
4839 "tmp.zig:3:17: error: cast increases pointer alignment",
4840 "tmp.zig:3:38: note: '*u8' has alignment 1",
4841 "tmp.zig:3:26: note: '*u32' has alignment 4",
48384842 );
48394843
48404844 cases.add(
......@@ -4843,7 +4847,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
48434847 \\ @alignCast(4, u32(3));
48444848 \\}
48454849 ,
4846 ".tmp_source.zig:2:22: error: expected pointer or slice, found 'u32'",
4850 "tmp.zig:2:22: error: expected pointer or slice, found 'u32'",
48474851 );
48484852
48494853 cases.add(
......@@ -4856,7 +4860,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
48564860 \\}
48574861 \\fn alignedSmall() align(4) i32 { return 1234; }
48584862 ,
4859 ".tmp_source.zig:2:35: error: expected type 'fn() align(8) i32', found 'fn() align(4) i32'",
4863 "tmp.zig:2:35: error: expected type 'fn() align(8) i32', found 'fn() align(4) i32'",
48604864 );
48614865
48624866 cases.add(
......@@ -4868,7 +4872,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
48684872 \\ return x == 5678;
48694873 \\}
48704874 ,
4871 ".tmp_source.zig:4:32: error: expected type '*i32', found '*align(1) i32'",
4875 "tmp.zig:4:32: error: expected type '*i32', found '*align(1) i32'",
48724876 );
48734877
48744878 cases.add(
......@@ -4877,7 +4881,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
48774881 \\ const array = [2]u8{1, 2, 3};
48784882 \\}
48794883 ,
4880 ".tmp_source.zig:2:24: error: expected [2]u8 literal, found [3]u8 literal",
4884 "tmp.zig:2:24: error: expected [2]u8 literal, found [3]u8 literal",
48814885 );
48824886
48834887 cases.add(
......@@ -4889,7 +4893,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
48894893 \\ bar(@ptrCast(*c_void, &x));
48904894 \\}
48914895 ,
4892 ".tmp_source.zig:5:9: error: expected type '*Derp', found '*c_void'",
4896 "tmp.zig:5:9: error: expected type '*Derp', found '*c_void'",
48934897 );
48944898
48954899 cases.add(
......@@ -4906,7 +4910,6 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
49064910 \\ var d = null;
49074911 \\ var e = opaque.*;
49084912 \\ var f = i32;
4909 \\ var g = @import("std",);
49104913 \\ var h = (Foo {}).bar;
49114914 \\
49124915 \\ var z: noreturn = return;
......@@ -4916,16 +4919,15 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
49164919 \\ fn bar(self: *const Foo) void {}
49174920 \\};
49184921 ,
4919 ".tmp_source.zig:4:4: error: variable of type '*comptime_int' must be const or comptime",
4920 ".tmp_source.zig:7:4: error: variable of type '(undefined)' must be const or comptime",
4921 ".tmp_source.zig:8:4: error: variable of type 'comptime_int' must be const or comptime",
4922 ".tmp_source.zig:9:4: error: variable of type 'comptime_float' must be const or comptime",
4923 ".tmp_source.zig:10:4: error: variable of type '(null)' must be const or comptime",
4924 ".tmp_source.zig:11:4: error: variable of type 'Opaque' not allowed",
4925 ".tmp_source.zig:12:4: error: variable of type 'type' must be const or comptime",
4926 ".tmp_source.zig:13:4: error: variable of type '(namespace)' must be const or comptime",
4927 ".tmp_source.zig:14:4: error: variable of type '(bound fn(*const Foo) void)' must be const or comptime",
4928 ".tmp_source.zig:16:4: error: unreachable code",
4922 "tmp.zig:4:4: error: variable of type '*comptime_int' must be const or comptime",
4923 "tmp.zig:7:4: error: variable of type '(undefined)' must be const or comptime",
4924 "tmp.zig:8:4: error: variable of type 'comptime_int' must be const or comptime",
4925 "tmp.zig:9:4: error: variable of type 'comptime_float' must be const or comptime",
4926 "tmp.zig:10:4: error: variable of type '(null)' must be const or comptime",
4927 "tmp.zig:11:4: error: variable of type 'Opaque' not allowed",
4928 "tmp.zig:12:4: error: variable of type 'type' must be const or comptime",
4929 "tmp.zig:13:4: error: variable of type '(bound fn(*const Foo) void)' must be const or comptime",
4930 "tmp.zig:15:4: error: unreachable code",
49294931 );
49304932
49314933 cases.add(
......@@ -4935,7 +4937,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
49354937 \\ while (!@cmpxchgWeak(i32, &x, 1234, 5678, u32(1234), u32(1234))) {}
49364938 \\}
49374939 ,
4938 ".tmp_source.zig:3:50: error: expected type 'AtomicOrder', found 'u32'",
4940 "tmp.zig:3:50: error: expected type 'builtin.AtomicOrder', found 'u32'",
49394941 );
49404942
49414943 cases.add(
......@@ -4945,7 +4947,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
49454947 \\ @export("entry", entry, u32(1234));
49464948 \\}
49474949 ,
4948 ".tmp_source.zig:3:32: error: expected type 'GlobalLinkage', found 'u32'",
4950 "tmp.zig:3:32: error: expected type 'builtin.GlobalLinkage', found 'u32'",
49494951 );
49504952
49514953 cases.add(
......@@ -4974,7 +4976,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
49744976 \\ };
49754977 \\}
49764978 ,
4977 ".tmp_source.zig:14:17: error: use of undeclared identifier 'HeaderValue'",
4979 "tmp.zig:14:17: error: use of undeclared identifier 'HeaderValue'",
49784980 );
49794981
49804982 cases.add(
......@@ -4983,7 +4985,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
49834985 \\ @setAlignStack(16);
49844986 \\}
49854987 ,
4986 ".tmp_source.zig:2:5: error: @setAlignStack outside function",
4988 "tmp.zig:2:5: error: @setAlignStack outside function",
49874989 );
49884990
49894991 cases.add(
......@@ -4992,7 +4994,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
49924994 \\ @setAlignStack(16);
49934995 \\}
49944996 ,
4995 ".tmp_source.zig:2:5: error: @setAlignStack in naked function",
4997 "tmp.zig:2:5: error: @setAlignStack in naked function",
49964998 );
49974999
49985000 cases.add(
......@@ -5004,7 +5006,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
50045006 \\ @setAlignStack(16);
50055007 \\}
50065008 ,
5007 ".tmp_source.zig:5:5: error: @setAlignStack in inline function",
5009 "tmp.zig:5:5: error: @setAlignStack in inline function",
50085010 );
50095011
50105012 cases.add(
......@@ -5014,8 +5016,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
50145016 \\ @setAlignStack(16);
50155017 \\}
50165018 ,
5017 ".tmp_source.zig:3:5: error: alignstack set twice",
5018 ".tmp_source.zig:2:5: note: first set here",
5019 "tmp.zig:3:5: error: alignstack set twice",
5020 "tmp.zig:2:5: note: first set here",
50195021 );
50205022
50215023 cases.add(
......@@ -5024,7 +5026,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
50245026 \\ @setAlignStack(511 + 1);
50255027 \\}
50265028 ,
5027 ".tmp_source.zig:2:5: error: attempt to @setAlignStack(512); maximum is 256",
5029 "tmp.zig:2:5: error: attempt to @setAlignStack(512); maximum is 256",
50285030 );
50295031
50305032 cases.add(
......@@ -5071,7 +5073,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
50715073 \\ }
50725074 \\}
50735075 ,
5074 ".tmp_source.zig:37:16: error: cannot store runtime value in compile time variable",
5076 "tmp.zig:37:16: error: cannot store runtime value in compile time variable",
50755077 );
50765078
50775079 cases.add(
......@@ -5087,7 +5089,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
50875089 \\ return x.blah;
50885090 \\}
50895091 ,
5090 ".tmp_source.zig:9:13: error: type '*MyType' does not support field access",
5092 "tmp.zig:9:13: error: type '*MyType' does not support field access",
50915093 );
50925094
50935095 cases.add(
......@@ -5095,7 +5097,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
50955097 "fn test() bool {\r\n" ++
50965098 " true\r\n" ++
50975099 "}\r\n",
5098 ".tmp_source.zig:1:17: error: invalid carriage return, only '\\n' line endings are supported",
5100 "tmp.zig:1:17: error: invalid carriage return, only '\\n' line endings are supported",
50995101 );
51005102
51015103 cases.add(
......@@ -5105,7 +5107,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
51055107 \\ true\r
51065108 \\}
51075109 ,
5108 ".tmp_source.zig:1:1: error: invalid character: '\\xff'",
5110 "tmp.zig:1:1: error: invalid character: '\\xff'",
51095111 );
51105112
51115113 cases.add(
......@@ -5113,7 +5115,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
51135115 "fn test() bool {\n" ++
51145116 "\ttrue\n" ++
51155117 "}\n",
5116 ".tmp_source.zig:2:1: error: invalid character: '\\t'",
5118 "tmp.zig:2:1: error: invalid character: '\\t'",
51175119 );
51185120
51195121 cases.add(
......@@ -5122,7 +5124,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
51225124 \\ _ = @ArgType(i32, 3);
51235125 \\}
51245126 ,
5125 ".tmp_source.zig:2:18: error: expected function, found 'i32'",
5127 "tmp.zig:2:18: error: expected function, found 'i32'",
51265128 );
51275129
51285130 cases.add(
......@@ -5132,7 +5134,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
51325134 \\}
51335135 \\fn add(a: i32, b: i32) i32 { return a + b; }
51345136 ,
5135 ".tmp_source.zig:2:32: error: arg index 2 out of bounds; 'fn(i32, i32) i32' has 2 arguments",
5137 "tmp.zig:2:32: error: arg index 2 out of bounds; 'fn(i32, i32) i32' has 2 arguments",
51365138 );
51375139
51385140 cases.add(
......@@ -5141,7 +5143,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
51415143 \\ _ = @memberType(i32, 0);
51425144 \\}
51435145 ,
5144 ".tmp_source.zig:2:21: error: type 'i32' does not support @memberType",
5146 "tmp.zig:2:21: error: type 'i32' does not support @memberType",
51455147 );
51465148
51475149 cases.add(
......@@ -5151,7 +5153,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
51515153 \\}
51525154 \\const Foo = enum {A,};
51535155 ,
5154 ".tmp_source.zig:2:21: error: type 'Foo' does not support @memberType",
5156 "tmp.zig:2:21: error: type 'Foo' does not support @memberType",
51555157 );
51565158
51575159 cases.add(
......@@ -5161,7 +5163,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
51615163 \\}
51625164 \\const Foo = struct {};
51635165 ,
5164 ".tmp_source.zig:2:26: error: member index 0 out of bounds; 'Foo' has 0 members",
5166 "tmp.zig:2:26: error: member index 0 out of bounds; 'Foo' has 0 members",
51655167 );
51665168
51675169 cases.add(
......@@ -5171,7 +5173,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
51715173 \\}
51725174 \\const Foo = union {A: void,};
51735175 ,
5174 ".tmp_source.zig:2:26: error: member index 1 out of bounds; 'Foo' has 1 members",
5176 "tmp.zig:2:26: error: member index 1 out of bounds; 'Foo' has 1 members",
51755177 );
51765178
51775179 cases.add(
......@@ -5180,7 +5182,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
51805182 \\ _ = @memberName(i32, 0);
51815183 \\}
51825184 ,
5183 ".tmp_source.zig:2:21: error: type 'i32' does not support @memberName",
5185 "tmp.zig:2:21: error: type 'i32' does not support @memberName",
51845186 );
51855187
51865188 cases.add(
......@@ -5190,7 +5192,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
51905192 \\}
51915193 \\const Foo = struct {};
51925194 ,
5193 ".tmp_source.zig:2:26: error: member index 0 out of bounds; 'Foo' has 0 members",
5195 "tmp.zig:2:26: error: member index 0 out of bounds; 'Foo' has 0 members",
51945196 );
51955197
51965198 cases.add(
......@@ -5200,7 +5202,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
52005202 \\}
52015203 \\const Foo = enum {A,};
52025204 ,
5203 ".tmp_source.zig:2:26: error: member index 1 out of bounds; 'Foo' has 1 members",
5205 "tmp.zig:2:26: error: member index 1 out of bounds; 'Foo' has 1 members",
52045206 );
52055207
52065208 cases.add(
......@@ -5210,7 +5212,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
52105212 \\}
52115213 \\const Foo = union {A:i32,};
52125214 ,
5213 ".tmp_source.zig:2:26: error: member index 1 out of bounds; 'Foo' has 1 members",
5215 "tmp.zig:2:26: error: member index 1 out of bounds; 'Foo' has 1 members",
52145216 );
52155217
52165218 cases.add(
......@@ -5220,7 +5222,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
52205222 \\}
52215223 \\pub extern fn foo(format: *const u8, ...) void;
52225224 ,
5223 ".tmp_source.zig:2:9: error: expected type '*const u8', found '[5]u8'",
5225 "tmp.zig:2:9: error: expected type '*const u8', found '[5]u8'",
52245226 );
52255227
52265228 cases.add(
......@@ -5239,9 +5241,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
52395241 \\ var allocator: ContextAllocator = undefined;
52405242 \\}
52415243 ,
5242 ".tmp_source.zig:4:25: error: aoeu",
5243 ".tmp_source.zig:1:36: note: called from here",
5244 ".tmp_source.zig:12:20: note: referenced here",
5244 "tmp.zig:4:25: error: aoeu",
5245 "tmp.zig:1:36: note: called from here",
5246 "tmp.zig:12:20: note: referenced here",
52455247 );
52465248
52475249 cases.add(
......@@ -5258,7 +5260,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
52585260 \\ var x = Small.One;
52595261 \\}
52605262 ,
5261 ".tmp_source.zig:1:21: error: 'u2' too small to hold all bits; must be at least 'u3'",
5263 "tmp.zig:1:21: error: 'u2' too small to hold all bits; must be at least 'u3'",
52625264 );
52635265
52645266 cases.add(
......@@ -5273,7 +5275,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
52735275 \\ var x = Small.One;
52745276 \\}
52755277 ,
5276 ".tmp_source.zig:1:21: error: expected integer, found 'f32'",
5278 "tmp.zig:1:21: error: expected integer, found 'f32'",
52775279 );
52785280
52795281 cases.add(
......@@ -5289,7 +5291,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
52895291 \\ var x: u2 = Small.Two;
52905292 \\}
52915293 ,
5292 ".tmp_source.zig:9:22: error: expected type 'u2', found 'Small'",
5294 "tmp.zig:9:22: error: expected type 'u2', found 'Small'",
52935295 );
52945296
52955297 cases.add(
......@@ -5306,7 +5308,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
53065308 \\ var x = @intToEnum(Small, y);
53075309 \\}
53085310 ,
5309 ".tmp_source.zig:10:31: error: expected type 'u2', found 'u3'",
5311 "tmp.zig:10:31: error: expected type 'u2', found 'u3'",
53105312 );
53115313
53125314 cases.add(
......@@ -5322,7 +5324,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
53225324 \\ var y = Small.Two;
53235325 \\}
53245326 ,
5325 ".tmp_source.zig:1:20: error: expected unsigned integer, found 'i2'",
5327 "tmp.zig:1:20: error: expected unsigned integer, found 'i2'",
53265328 );
53275329
53285330 cases.add(
......@@ -5334,7 +5336,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
53345336 \\ var x: MultipleChoice = undefined;
53355337 \\}
53365338 ,
5337 ".tmp_source.zig:2:14: error: enums, not structs, support field assignment",
5339 "tmp.zig:2:14: error: enums, not structs, support field assignment",
53385340 );
53395341
53405342 cases.add(
......@@ -5346,8 +5348,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
53465348 \\ var x: MultipleChoice = undefined;
53475349 \\}
53485350 ,
5349 ".tmp_source.zig:2:14: error: non-enum union field assignment",
5350 ".tmp_source.zig:1:24: note: consider 'union(enum)' here",
5351 "tmp.zig:2:14: error: non-enum union field assignment",
5352 "tmp.zig:1:24: note: consider 'union(enum)' here",
53515353 );
53525354
53535355 cases.add(
......@@ -5357,7 +5359,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
53575359 \\ return @sizeOf(Foo);
53585360 \\}
53595361 ,
5360 ".tmp_source.zig:1:13: error: enums must have 1 or more fields",
5362 "tmp.zig:1:13: error: enums must have 1 or more fields",
53615363 );
53625364
53635365 cases.add(
......@@ -5367,7 +5369,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
53675369 \\ return @sizeOf(Foo);
53685370 \\}
53695371 ,
5370 ".tmp_source.zig:1:13: error: unions must have 1 or more fields",
5372 "tmp.zig:1:13: error: unions must have 1 or more fields",
53715373 );
53725374
53735375 cases.add(
......@@ -5383,8 +5385,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
53835385 \\ var x = MultipleChoice.C;
53845386 \\}
53855387 ,
5386 ".tmp_source.zig:6:9: error: enum tag value 60 already taken",
5387 ".tmp_source.zig:4:9: note: other occurrence here",
5388 "tmp.zig:6:9: error: enum tag value 60 already taken",
5389 "tmp.zig:4:9: note: other occurrence here",
53885390 );
53895391
53905392 cases.add(
......@@ -5402,8 +5404,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
54025404 \\ return @sizeOf(Payload);
54035405 \\}
54045406 ,
5405 ".tmp_source.zig:6:17: error: enum field missing: 'C'",
5406 ".tmp_source.zig:4:5: note: declared here",
5407 "tmp.zig:6:17: error: enum field missing: 'C'",
5408 "tmp.zig:4:5: note: declared here",
54075409 );
54085410
54095411 cases.add(
......@@ -5415,8 +5417,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
54155417 \\ const x = @TagType(Foo);
54165418 \\}
54175419 ,
5418 ".tmp_source.zig:5:24: error: union 'Foo' has no tag",
5419 ".tmp_source.zig:1:13: note: consider 'union(enum)' here",
5420 "tmp.zig:5:24: error: union 'Foo' has no tag",
5421 "tmp.zig:1:13: note: consider 'union(enum)' here",
54205422 );
54215423
54225424 cases.add(
......@@ -5428,7 +5430,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
54285430 \\ const x = @TagType(Foo);
54295431 \\}
54305432 ,
5431 ".tmp_source.zig:1:24: error: expected integer tag type, found 'f32'",
5433 "tmp.zig:1:24: error: expected integer tag type, found 'f32'",
54325434 );
54335435
54345436 cases.add(
......@@ -5440,7 +5442,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
54405442 \\ const x = @TagType(Foo);
54415443 \\}
54425444 ,
5443 ".tmp_source.zig:1:19: error: expected enum tag type, found 'u32'",
5445 "tmp.zig:1:19: error: expected enum tag type, found 'u32'",
54445446 );
54455447
54465448 cases.add(
......@@ -5456,8 +5458,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
54565458 \\ var x = MultipleChoice { .C = {} };
54575459 \\}
54585460 ,
5459 ".tmp_source.zig:6:9: error: enum tag value 60 already taken",
5460 ".tmp_source.zig:4:9: note: other occurrence here",
5461 "tmp.zig:6:9: error: enum tag value 60 already taken",
5462 "tmp.zig:4:9: note: other occurrence here",
54615463 );
54625464
54635465 cases.add(
......@@ -5477,8 +5479,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
54775479 \\ var a = Payload {.A = 1234};
54785480 \\}
54795481 ,
5480 ".tmp_source.zig:10:5: error: enum field not found: 'D'",
5481 ".tmp_source.zig:1:16: note: enum declared here",
5482 "tmp.zig:10:5: error: enum field not found: 'D'",
5483 "tmp.zig:1:16: note: enum declared here",
54825484 );
54835485
54845486 cases.add(
......@@ -5492,8 +5494,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
54925494 \\ var b = Letter.B;
54935495 \\}
54945496 ,
5495 ".tmp_source.zig:2:8: error: structs and unions, not enums, support field types",
5496 ".tmp_source.zig:1:16: note: consider 'union(enum)' here",
5497 "tmp.zig:2:8: error: structs and unions, not enums, support field types",
5498 "tmp.zig:1:16: note: consider 'union(enum)' here",
54975499 );
54985500
54995501 cases.add(
......@@ -5505,7 +5507,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
55055507 \\ var a = Letter { .A = {} };
55065508 \\}
55075509 ,
5508 ".tmp_source.zig:2:5: error: struct field missing type",
5510 "tmp.zig:2:5: error: struct field missing type",
55095511 );
55105512
55115513 cases.add(
......@@ -5517,7 +5519,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
55175519 \\ var a = Letter { .A = {} };
55185520 \\}
55195521 ,
5520 ".tmp_source.zig:2:5: error: union field missing type",
5522 "tmp.zig:2:5: error: union field missing type",
55215523 );
55225524
55235525 cases.add(
......@@ -5536,7 +5538,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
55365538 \\ var a = Payload { .A = 1234 };
55375539 \\}
55385540 ,
5539 ".tmp_source.zig:6:30: error: extern union does not support enum tag type",
5541 "tmp.zig:6:30: error: extern union does not support enum tag type",
55405542 );
55415543
55425544 cases.add(
......@@ -5555,7 +5557,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
55555557 \\ var a = Payload { .A = 1234 };
55565558 \\}
55575559 ,
5558 ".tmp_source.zig:6:30: error: packed union does not support enum tag type",
5560 "tmp.zig:6:30: error: packed union does not support enum tag type",
55595561 );
55605562
55615563 cases.add(
......@@ -5576,8 +5578,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
55765578 \\ }
55775579 \\}
55785580 ,
5579 ".tmp_source.zig:11:14: error: switch on union which has no attached enum",
5580 ".tmp_source.zig:1:17: note: consider 'union(enum)' here",
5581 "tmp.zig:11:14: error: switch on union which has no attached enum",
5582 "tmp.zig:1:17: note: consider 'union(enum)' here",
55815583 );
55825584
55835585 cases.add(
......@@ -5590,8 +5592,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
55905592 \\ var x = @intToEnum(Foo, 0);
55915593 \\}
55925594 ,
5593 ".tmp_source.zig:6:13: error: enum 'Foo' has no tag matching integer value 0",
5594 ".tmp_source.zig:1:13: note: 'Foo' declared here",
5595 "tmp.zig:6:13: error: enum 'Foo' has no tag matching integer value 0",
5596 "tmp.zig:1:13: note: 'Foo' declared here",
55955597 );
55965598
55975599 cases.add(
......@@ -5606,8 +5608,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
56065608 \\ var x: Value = Letter.A;
56075609 \\}
56085610 ,
5609 ".tmp_source.zig:8:26: error: cast to union 'Value' must initialize 'i32' field 'A'",
5610 ".tmp_source.zig:3:5: note: field 'A' declared here",
5611 "tmp.zig:8:26: error: cast to union 'Value' must initialize 'i32' field 'A'",
5612 "tmp.zig:3:5: note: field 'A' declared here",
56115613 );
56125614
56135615 cases.add(
......@@ -5625,8 +5627,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
56255627 \\ var x: Value = l;
56265628 \\}
56275629 ,
5628 ".tmp_source.zig:11:20: error: runtime cast to union 'Value' which has non-void fields",
5629 ".tmp_source.zig:3:5: note: field 'A' has type 'i32'",
5630 "tmp.zig:11:20: error: runtime cast to union 'Value' which has non-void fields",
5631 "tmp.zig:3:5: note: field 'A' has type 'i32'",
56305632 );
56315633
56325634 cases.add(
......@@ -5638,7 +5640,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
56385640 \\ const fieldOffset = @byteOffsetOf(Empty, "val",);
56395641 \\}
56405642 ,
5641 ".tmp_source.zig:5:46: error: zero-bit field 'val' in struct 'Empty' has no offset",
5643 "tmp.zig:5:46: error: zero-bit field 'val' in struct 'Empty' has no offset",
56425644 );
56435645
56445646 cases.add(
......@@ -5650,7 +5652,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
56505652 \\ const fieldOffset = @bitOffsetOf(Empty, "val",);
56515653 \\}
56525654 ,
5653 ".tmp_source.zig:5:45: error: zero-bit field 'val' in struct 'Empty' has no offset",
5655 "tmp.zig:5:45: error: zero-bit field 'val' in struct 'Empty' has no offset",
56545656 );
56555657
56565658 cases.add(
......@@ -5664,7 +5666,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
56645666 \\ const bar_val = foo.Bar;
56655667 \\}
56665668 ,
5667 ".tmp_source.zig:7:24: error: accessing union field 'Bar' while field 'Baz' is set",
5669 "tmp.zig:7:24: error: accessing union field 'Bar' while field 'Baz' is set",
56685670 );
56695671
56705672 cases.add(
......@@ -5674,7 +5676,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
56745676 \\ _ = @typeOf(generic).ReturnType;
56755677 \\}
56765678 ,
5677 ".tmp_source.zig:3:25: error: ReturnType has not been resolved because 'fn(var)var' is generic",
5679 "tmp.zig:3:25: error: ReturnType has not been resolved because 'fn(var)var' is generic",
56785680 );
56795681
56805682 cases.add(
......@@ -5684,7 +5686,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
56845686 \\ _ = @ArgType(@typeOf(generic), 0);
56855687 \\}
56865688 ,
5687 ".tmp_source.zig:3:36: error: @ArgType could not resolve the type of arg 0 because 'fn(var)var' is generic",
5689 "tmp.zig:3:36: error: @ArgType could not resolve the type of arg 0 because 'fn(var)var' is generic",
56885690 );
56895691
56905692 cases.add(
......@@ -5694,7 +5696,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
56945696 \\ asm volatile ("" : [baz]"+r"(bar) : : "");
56955697 \\}
56965698 ,
5697 ".tmp_source.zig:3:5: error: invalid modifier starting output constraint for 'baz': '+', only '=' is supported. Compiler TODO: see https://github.com/ziglang/zig/issues/215",
5699 "tmp.zig:3:5: error: invalid modifier starting output constraint for 'baz': '+', only '=' is supported. Compiler TODO: see https://github.com/ziglang/zig/issues/215",
56985700 );
56995701
57005702 cases.add(
......@@ -5703,7 +5705,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
57035705 \\ asm volatile ("" : : [bar]"r"(3) : "");
57045706 \\}
57055707 ,
5706 ".tmp_source.zig:2:35: error: expected sized integer or sized float, found comptime_int",
5708 "tmp.zig:2:35: error: expected sized integer or sized float, found comptime_int",
57075709 );
57085710
57095711 cases.add(
......@@ -5712,7 +5714,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
57125714 \\ asm volatile ("" : : [bar]"r"(3.17) : "");
57135715 \\}
57145716 ,
5715 ".tmp_source.zig:2:35: error: expected sized integer or sized float, found comptime_float",
5717 "tmp.zig:2:35: error: expected sized integer or sized float, found comptime_float",
57165718 );
57175719
57185720 cases.add(
......@@ -5726,7 +5728,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
57265728 \\ const foo = Foo { .Bar = x, .Baz = u8 };
57275729 \\}
57285730 ,
5729 ".tmp_source.zig:7:30: error: unable to evaluate constant expression",
5731 "tmp.zig:7:30: error: unable to evaluate constant expression",
57305732 );
57315733
57325734 cases.add(
......@@ -5740,7 +5742,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
57405742 \\ const foo = Foo { .Bar = x };
57415743 \\}
57425744 ,
5743 ".tmp_source.zig:7:30: error: unable to evaluate constant expression",
5745 "tmp.zig:7:30: error: unable to evaluate constant expression",
57445746 );
57455747
57465748 cases.addTest(
......@@ -5750,7 +5752,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
57505752 \\ var v: V = undefined;
57515753 \\}
57525754 ,
5753 ".tmp_source.zig:2:26: error: vector element type must be integer, float, or pointer; '@Vector(4, u8)' is invalid",
5755 "tmp.zig:2:26: error: vector element type must be integer, float, or pointer; '@Vector(4, u8)' is invalid",
57545756 );
57555757
57565758 cases.add("compileLog of tagged enum doesn't crash the compiler",
......@@ -5765,5 +5767,5 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
57655767 \\pub fn main () void {
57665768 \\ comptime testCompileLog(Bar{.X = 123});
57675769 \\}
5768 , ".tmp_source.zig:6:5: error: found compile log statement");
5770 , "tmp.zig:6:5: error: found compile log statement");
57695771}
test/stage1/behavior.zig+2
......@@ -18,6 +18,7 @@ comptime {
1818 _ = @import("behavior/bugs/1421.zig");
1919 _ = @import("behavior/bugs/1442.zig");
2020 _ = @import("behavior/bugs/1486.zig");
21 _ = @import("behavior/bugs/1500.zig");
2122 _ = @import("behavior/bugs/1851.zig");
2223 _ = @import("behavior/bugs/2006.zig");
2324 _ = @import("behavior/bugs/394.zig");
......@@ -25,6 +26,7 @@ comptime {
2526 _ = @import("behavior/bugs/529.zig");
2627 _ = @import("behavior/bugs/655.zig");
2728 _ = @import("behavior/bugs/656.zig");
29 _ = @import("behavior/bugs/679.zig");
2830 _ = @import("behavior/bugs/704.zig");
2931 _ = @import("behavior/bugs/718.zig");
3032 _ = @import("behavior/bugs/726.zig");
test/stage1/behavior/asm.zig+5-5
......@@ -4,16 +4,16 @@ const expect = @import("std").testing.expect;
44comptime {
55 if (config.arch == config.Arch.x86_64 and config.os == config.Os.linux) {
66 asm volatile (
7 \\.globl aoeu;
8 \\.type aoeu, @function;
9 \\.set aoeu, derp;
7 \\.globl this_is_my_alias;
8 \\.type this_is_my_alias, @function;
9 \\.set this_is_my_alias, derp;
1010 );
1111 }
1212}
1313
1414test "module level assembly" {
1515 if (config.arch == config.Arch.x86_64 and config.os == config.Os.linux) {
16 expect(aoeu() == 1234);
16 expect(this_is_my_alias() == 1234);
1717 }
1818}
1919
......@@ -85,7 +85,7 @@ test "sized integer/float in asm input" {
8585 );
8686}
8787
88extern fn aoeu() i32;
88extern fn this_is_my_alias() i32;
8989
9090export fn derp() i32 {
9191 return 1234;
test/stage1/behavior/bugs/1500.zig created+10
......@@ -0,0 +1,10 @@
1const A = struct {
2 b: B,
3};
4
5const B = fn (A) void;
6
7test "allow these dependencies" {
8 var a: A = undefined;
9 var b: B = undefined;
10}
test/stage1/behavior/bugs/679.zig created+17
......@@ -0,0 +1,17 @@
1const std = @import("std");
2const expect = std.testing.expect;
3
4pub fn List(comptime T: type) type {
5 return u32;
6}
7
8const ElementList = List(Element);
9const Element = struct {
10 link: ElementList,
11};
12
13test "false dependency loop in struct definition" {
14 const listType = ElementList;
15 var x: listType = 42;
16 expect(x == 42);
17}
test/stage1/behavior/misc.zig+3-2
......@@ -1,5 +1,6 @@
11const std = @import("std");
22const expect = std.testing.expect;
3const expectEqualSlices = std.testing.expectEqualSlices;
34const mem = std.mem;
45const cstr = std.cstr;
56const builtin = @import("builtin");
......@@ -469,7 +470,7 @@ test "@typeId" {
469470 expect(@typeId(AUnionEnum) == Tid.Union);
470471 expect(@typeId(AUnion) == Tid.Union);
471472 expect(@typeId(fn () void) == Tid.Fn);
472 expect(@typeId(@typeOf(builtin)) == Tid.Namespace);
473 expect(@typeId(@typeOf(builtin)) == Tid.Type);
473474 // TODO bound fn
474475 // TODO arg tuple
475476 // TODO opaque
......@@ -488,7 +489,7 @@ test "@typeName" {
488489 expect(mem.eql(u8, @typeName(i64), "i64"));
489490 expect(mem.eql(u8, @typeName(*usize), "*usize"));
490491 // https://github.com/ziglang/zig/issues/675
491 expect(mem.eql(u8, @typeName(TypeFromFn(u8)), "TypeFromFn(u8)"));
492 expectEqualSlices(u8, "behavior.misc.TypeFromFn(u8)", @typeName(TypeFromFn(u8)));
492493 expect(mem.eql(u8, @typeName(Struct), "Struct"));
493494 expect(mem.eql(u8, @typeName(Union), "Union"));
494495 expect(mem.eql(u8, @typeName(Enum), "Enum"));
test/stage1/behavior/type_info.zig+1-1
......@@ -186,7 +186,7 @@ fn testUnion() void {
186186 expect(TypeId(typeinfo_info) == TypeId.Union);
187187 expect(typeinfo_info.Union.layout == TypeInfo.ContainerLayout.Auto);
188188 expect(typeinfo_info.Union.tag_type.? == TypeId);
189 expect(typeinfo_info.Union.fields.len == 25);
189 expect(typeinfo_info.Union.fields.len == 24);
190190 expect(typeinfo_info.Union.fields[4].enum_field != null);
191191 expect(typeinfo_info.Union.fields[4].enum_field.?.value == 4);
192192 expect(typeinfo_info.Union.fields[4].field_type == @typeOf(@typeInfo(u8).Int));
test/tests.zig+5-2
......@@ -569,7 +569,7 @@ pub const CompileErrorContext = struct {
569569 const ErrLineIter = struct {
570570 lines: mem.SplitIterator,
571571
572 const source_file = ".tmp_source.zig";
572 const source_file = "tmp.zig";
573573
574574 fn init(input: []const u8) ErrLineIter {
575575 return ErrLineIter{ .lines = mem.separate(input, "\n") };
......@@ -759,7 +759,7 @@ pub const CompileErrorContext = struct {
759759 .is_test = false,
760760 };
761761
762 tc.addSourceFile(".tmp_source.zig", source);
762 tc.addSourceFile("tmp.zig", source);
763763 comptime var arg_i = 0;
764764 inline while (arg_i < expected_lines.len) : (arg_i += 1) {
765765 tc.addExpectedError(expected_lines[arg_i]);
......@@ -980,15 +980,18 @@ pub const TranslateCContext = struct {
980980 Term.Exited => |code| {
981981 if (code != 0) {
982982 warn("Compilation failed with exit code {}\n", code);
983 printInvocation(zig_args.toSliceConst());
983984 return error.TestFailed;
984985 }
985986 },
986987 Term.Signal => |code| {
987988 warn("Compilation failed with signal {}\n", code);
989 printInvocation(zig_args.toSliceConst());
988990 return error.TestFailed;
989991 },
990992 else => {
991993 warn("Compilation terminated unexpectedly\n");
994 printInvocation(zig_args.toSliceConst());
992995 return error.TestFailed;
993996 },
994997 }