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 {...@@ -6785,7 +6785,6 @@ pub const TypeId = enum {
6785 Enum,6785 Enum,
6786 Union,6786 Union,
6787 Fn,6787 Fn,
6788 Namespace,
6789 Block,6788 Block,
6790 BoundFn,6789 BoundFn,
6791 ArgTuple,6790 ArgTuple,
...@@ -6820,7 +6819,6 @@ pub const TypeInfo = union(TypeId) {...@@ -6820,7 +6819,6 @@ pub const TypeInfo = union(TypeId) {
6820 Enum: Enum,6819 Enum: Enum,
6821 Union: Union,6820 Union: Union,
6822 Fn: Fn,6821 Fn: Fn,
6823 Namespace: void,
6824 BoundFn: Fn,6822 BoundFn: Fn,
6825 ArgTuple: void,6823 ArgTuple: void,
6826 Opaque: void,6824 Opaque: void,
...@@ -8167,17 +8165,18 @@ coding style....@@ -8167,17 +8165,18 @@ coding style.
8167 </p>8165 </p>
8168 <ul>8166 <ul>
8169 <li>8167 <li>
8170 If {#syntax#}x{#endsyntax#} is a {#syntax#}struct{#endsyntax#} (or an alias of a {#syntax#}struct{#endsyntax#}),8168 If {#syntax#}x{#endsyntax#} is a {#syntax#}type{#endsyntax#}
8171 then {#syntax#}x{#endsyntax#} should be {#syntax#}TitleCase{#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#}.
8172 </li>8172 </li>
8173 <li>8173 <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#}.
8175 </li>8176 </li>
8176 <li>8177 <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 If {#syntax#}x{#endsyntax#} is otherwise callable, then {#syntax#}x{#endsyntax#} should
8178 </li>8179 be {#syntax#}camelCase{#endsyntax#}.
8179 <li>
8180 If {#syntax#}x{#endsyntax#} is otherwise callable, then {#syntax#}x{#endsyntax#} should be {#syntax#}camelCase{#endsyntax#}.
8181 </li>8180 </li>
8182 <li>8181 <li>
8183 Otherwise, {#syntax#}x{#endsyntax#} should be {#syntax#}snake_case{#endsyntax#}.8182 Otherwise, {#syntax#}x{#endsyntax#} should be {#syntax#}snake_case{#endsyntax#}.
...@@ -8203,7 +8202,9 @@ const const_name = 42;...@@ -8203,7 +8202,9 @@ const const_name = 42;
8203const primitive_type_alias = f32;8202const primitive_type_alias = f32;
8204const string_alias = []u8;8203const string_alias = []u8;
82058204
8206const StructName = struct {};8205const StructName = struct {
8206 field: i32,
8207};
8207const StructAlias = StructName;8208const StructAlias = StructName;
82088209
8209fn functionName(param_name: TypeName) void {8210fn functionName(param_name: TypeName) void {
...@@ -8231,7 +8232,9 @@ const xml_document =...@@ -8231,7 +8232,9 @@ const xml_document =
8231 \\<document>8232 \\<document>
8232 \\</document>8233 \\</document>
8233;8234;
8234const XmlParser = struct {};8235const XmlParser = struct {
8236 field: i32,
8237};
82358238
8236// The initials BE (Big Endian) are just another word in Zig identifier names.8239// The initials BE (Big Endian) are just another word in Zig identifier names.
8237fn readU32Be() u32 {}8240fn readU32Be() u32 {}
src-self-hosted/compilation.zig+1-1
...@@ -47,7 +47,7 @@ pub const ZigCompiler = struct {...@@ -47,7 +47,7 @@ pub const ZigCompiler = struct {
4747
48 var lazy_init_targets = std.lazyInit(void);48 var lazy_init_targets = std.lazyInit(void);
4949
50 fn init(loop: *event.Loop) !ZigCompiler {50 pub fn init(loop: *event.Loop) !ZigCompiler {
51 lazy_init_targets.get() orelse {51 lazy_init_targets.get() orelse {
52 Target.initializeAll();52 Target.initializeAll();
53 lazy_init_targets.resolve();53 lazy_init_targets.resolve();
src-self-hosted/type.zig-12
...@@ -39,7 +39,6 @@ pub const Type = struct {...@@ -39,7 +39,6 @@ pub const Type = struct {
39 Id.ErrorSet => @fieldParentPtr(ErrorSet, "base", base).destroy(comp),39 Id.ErrorSet => @fieldParentPtr(ErrorSet, "base", base).destroy(comp),
40 Id.Enum => @fieldParentPtr(Enum, "base", base).destroy(comp),40 Id.Enum => @fieldParentPtr(Enum, "base", base).destroy(comp),
41 Id.Union => @fieldParentPtr(Union, "base", base).destroy(comp),41 Id.Union => @fieldParentPtr(Union, "base", base).destroy(comp),
42 Id.Namespace => @fieldParentPtr(Namespace, "base", base).destroy(comp),
43 Id.BoundFn => @fieldParentPtr(BoundFn, "base", base).destroy(comp),42 Id.BoundFn => @fieldParentPtr(BoundFn, "base", base).destroy(comp),
44 Id.ArgTuple => @fieldParentPtr(ArgTuple, "base", base).destroy(comp),43 Id.ArgTuple => @fieldParentPtr(ArgTuple, "base", base).destroy(comp),
45 Id.Opaque => @fieldParentPtr(Opaque, "base", base).destroy(comp),44 Id.Opaque => @fieldParentPtr(Opaque, "base", base).destroy(comp),
...@@ -73,7 +72,6 @@ pub const Type = struct {...@@ -73,7 +72,6 @@ pub const Type = struct {
73 Id.ErrorSet => return @fieldParentPtr(ErrorSet, "base", base).getLlvmType(allocator, llvm_context),72 Id.ErrorSet => return @fieldParentPtr(ErrorSet, "base", base).getLlvmType(allocator, llvm_context),
74 Id.Enum => return @fieldParentPtr(Enum, "base", base).getLlvmType(allocator, llvm_context),73 Id.Enum => return @fieldParentPtr(Enum, "base", base).getLlvmType(allocator, llvm_context),
75 Id.Union => return @fieldParentPtr(Union, "base", base).getLlvmType(allocator, llvm_context),74 Id.Union => return @fieldParentPtr(Union, "base", base).getLlvmType(allocator, llvm_context),
76 Id.Namespace => unreachable,
77 Id.BoundFn => return @fieldParentPtr(BoundFn, "base", base).getLlvmType(allocator, llvm_context),75 Id.BoundFn => return @fieldParentPtr(BoundFn, "base", base).getLlvmType(allocator, llvm_context),
78 Id.ArgTuple => unreachable,76 Id.ArgTuple => unreachable,
79 Id.Opaque => return @fieldParentPtr(Opaque, "base", base).getLlvmType(allocator, llvm_context),77 Id.Opaque => return @fieldParentPtr(Opaque, "base", base).getLlvmType(allocator, llvm_context),
...@@ -89,7 +87,6 @@ pub const Type = struct {...@@ -89,7 +87,6 @@ pub const Type = struct {
89 Id.ComptimeInt,87 Id.ComptimeInt,
90 Id.Undefined,88 Id.Undefined,
91 Id.Null,89 Id.Null,
92 Id.Namespace,
93 Id.BoundFn,90 Id.BoundFn,
94 Id.ArgTuple,91 Id.ArgTuple,
95 Id.Opaque,92 Id.Opaque,
...@@ -123,7 +120,6 @@ pub const Type = struct {...@@ -123,7 +120,6 @@ pub const Type = struct {
123 Id.ComptimeInt,120 Id.ComptimeInt,
124 Id.Undefined,121 Id.Undefined,
125 Id.Null,122 Id.Null,
126 Id.Namespace,
127 Id.BoundFn,123 Id.BoundFn,
128 Id.ArgTuple,124 Id.ArgTuple,
129 Id.Opaque,125 Id.Opaque,
...@@ -1020,14 +1016,6 @@ pub const Type = struct {...@@ -1020,14 +1016,6 @@ pub const Type = struct {
1020 }1016 }
1021 };1017 };
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
1031 pub const BoundFn = struct {1019 pub const BoundFn = struct {
1032 base: Type,1020 base: Type,
10331021
src/all_types.hpp+49-48
...@@ -21,7 +21,6 @@...@@ -21,7 +21,6 @@
21#include "libc_installation.hpp"21#include "libc_installation.hpp"
2222
23struct AstNode;23struct AstNode;
24struct ImportTableEntry;
25struct ZigFn;24struct ZigFn;
26struct Scope;25struct Scope;
27struct ScopeBlock;26struct ScopeBlock;
...@@ -317,7 +316,6 @@ struct ConstExprValue {...@@ -317,7 +316,6 @@ struct ConstExprValue {
317 ConstUnionValue x_union;316 ConstUnionValue x_union;
318 ConstArrayValue x_array;317 ConstArrayValue x_array;
319 ConstPtrValue x_ptr;318 ConstPtrValue x_ptr;
320 ImportTableEntry *x_import;
321 ConstArgTuple x_arg_tuple;319 ConstArgTuple x_arg_tuple;
322320
323 // populated if special == ConstValSpecialRuntime321 // populated if special == ConstValSpecialRuntime
...@@ -369,10 +367,8 @@ struct Tld {...@@ -369,10 +367,8 @@ struct Tld {
369 VisibMod visib_mod;367 VisibMod visib_mod;
370 AstNode *source_node;368 AstNode *source_node;
371369
372 ImportTableEntry *import;370 ZigType *import;
373 Scope *parent_scope;371 Scope *parent_scope;
374 // set this flag temporarily to detect infinite loops
375 bool dep_loop_flag;
376 TldResolution resolution;372 TldResolution resolution;
377};373};
378374
...@@ -382,6 +378,7 @@ struct TldVar {...@@ -382,6 +378,7 @@ struct TldVar {
382 ZigVar *var;378 ZigVar *var;
383 Buf *extern_lib_name;379 Buf *extern_lib_name;
384 Buf *section_name;380 Buf *section_name;
381 bool analyzing_type; // flag to detect dependency loops
385};382};
386383
387struct TldFn {384struct TldFn {
...@@ -700,7 +697,7 @@ struct AstNodeUse {...@@ -700,7 +697,7 @@ struct AstNodeUse {
700 AstNode *expr;697 AstNode *expr;
701698
702 TldResolution resolution;699 TldResolution resolution;
703 ConstExprValue *value;700 ConstExprValue *using_namespace_value;
704};701};
705702
706struct AstNodeIfBoolExpr {703struct AstNodeIfBoolExpr {
...@@ -937,7 +934,7 @@ struct AstNode {...@@ -937,7 +934,7 @@ struct AstNode {
937 enum NodeType type;934 enum NodeType type;
938 size_t line;935 size_t line;
939 size_t column;936 size_t column;
940 ImportTableEntry *owner;937 ZigType *owner;
941 union {938 union {
942 AstNodeFnDef fn_def;939 AstNodeFnDef fn_def;
943 AstNodeFnProto fn_proto;940 AstNodeFnProto fn_proto;
...@@ -1075,12 +1072,32 @@ enum ResolveStatus {...@@ -1075,12 +1072,32 @@ enum ResolveStatus {
1075 ResolveStatusSizeKnown,1072 ResolveStatusSizeKnown,
1076};1073};
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
1078struct ZigTypeStruct {1094struct ZigTypeStruct {
1079 AstNode *decl_node;1095 AstNode *decl_node;
1080 TypeStructField *fields;1096 TypeStructField *fields;
1081 ScopeDecls *decls_scope;1097 ScopeDecls *decls_scope;
1082 uint64_t size_bytes;1098 uint64_t size_bytes;
1083 HashMap<Buf *, TypeStructField *, buf_hash, buf_eql_buf> fields_by_name;1099 HashMap<Buf *, TypeStructField *, buf_hash, buf_eql_buf> fields_by_name;
1100 RootStruct *root_struct;
10841101
1085 uint32_t src_field_count;1102 uint32_t src_field_count;
1086 uint32_t gen_field_count;1103 uint32_t gen_field_count;
...@@ -1232,7 +1249,6 @@ enum ZigTypeId {...@@ -1232,7 +1249,6 @@ enum ZigTypeId {
1232 ZigTypeIdEnum,1249 ZigTypeIdEnum,
1233 ZigTypeIdUnion,1250 ZigTypeIdUnion,
1234 ZigTypeIdFn,1251 ZigTypeIdFn,
1235 ZigTypeIdNamespace,
1236 ZigTypeIdBoundFn,1252 ZigTypeIdBoundFn,
1237 ZigTypeIdArgTuple,1253 ZigTypeIdArgTuple,
1238 ZigTypeIdOpaque,1254 ZigTypeIdOpaque,
...@@ -1246,6 +1262,10 @@ enum OnePossibleValue {...@@ -1246,6 +1262,10 @@ enum OnePossibleValue {
1246 OnePossibleValueYes,1262 OnePossibleValueYes,
1247};1263};
12481264
1265struct ZigTypeOpaque {
1266 Buf *bare_name;
1267};
1268
1249struct ZigType {1269struct ZigType {
1250 ZigTypeId id;1270 ZigTypeId id;
1251 Buf name;1271 Buf name;
...@@ -1268,6 +1288,7 @@ struct ZigType {...@@ -1268,6 +1288,7 @@ struct ZigType {
1268 ZigTypeBoundFn bound_fn;1288 ZigTypeBoundFn bound_fn;
1269 ZigTypePromise promise;1289 ZigTypePromise promise;
1270 ZigTypeVector vector;1290 ZigTypeVector vector;
1291 ZigTypeOpaque opaque;
1271 } data;1292 } data;
12721293
1273 // use these fields to make sure we don't duplicate type table entries for the same type1294 // use these fields to make sure we don't duplicate type table entries for the same type
...@@ -1285,29 +1306,6 @@ struct ZigType {...@@ -1285,29 +1306,6 @@ struct ZigType {
1285 bool gen_h_loop_flag;1306 bool gen_h_loop_flag;
1286};1307};
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
1311enum FnAnalState {1309enum FnAnalState {
1312 FnAnalStateReady,1310 FnAnalStateReady,
1313 FnAnalStateProbing,1311 FnAnalStateProbing,
...@@ -1670,7 +1668,7 @@ struct CodeGen {...@@ -1670,7 +1668,7 @@ struct CodeGen {
1670 LLVMValueRef return_err_fn;1668 LLVMValueRef return_err_fn;
16711669
1672 // reminder: hash tables must be initialized before use1670 // 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;
1674 HashMap<Buf *, BuiltinFnEntry *, buf_hash, buf_eql_buf> builtin_fn_table;1672 HashMap<Buf *, BuiltinFnEntry *, buf_hash, buf_eql_buf> builtin_fn_table;
1675 HashMap<Buf *, ZigType *, buf_hash, buf_eql_buf> primitive_type_table;1673 HashMap<Buf *, ZigType *, buf_hash, buf_eql_buf> primitive_type_table;
1676 HashMap<TypeId, ZigType *, type_id_hash, type_id_eql> type_table;1674 HashMap<TypeId, ZigType *, type_id_hash, type_id_eql> type_table;
...@@ -1684,8 +1682,6 @@ struct CodeGen {...@@ -1684,8 +1682,6 @@ struct CodeGen {
1684 HashMap<Buf *, ConstExprValue *, buf_hash, buf_eql_buf> string_literals_table;1682 HashMap<Buf *, ConstExprValue *, buf_hash, buf_eql_buf> string_literals_table;
1685 HashMap<const ZigType *, ConstExprValue *, type_ptr_hash, type_ptr_eql> type_info_cache;1683 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;
1689 ZigList<Tld *> resolve_queue;1685 ZigList<Tld *> resolve_queue;
1690 size_t resolve_queue_index;1686 size_t resolve_queue_index;
1691 ZigList<AstNode *> use_queue;1687 ZigList<AstNode *> use_queue;
...@@ -1699,14 +1695,14 @@ struct CodeGen {...@@ -1699,14 +1695,14 @@ struct CodeGen {
1699 ZigList<ErrorTableEntry *> errors_by_index;1695 ZigList<ErrorTableEntry *> errors_by_index;
1700 size_t largest_err_name_len;1696 size_t largest_err_name_len;
17011697
1702 PackageTableEntry *std_package;1698 ZigPackage *std_package;
1703 PackageTableEntry *panic_package;1699 ZigPackage *panic_package;
1704 PackageTableEntry *test_runner_package;1700 ZigPackage *test_runner_package;
1705 PackageTableEntry *compile_var_package;1701 ZigPackage *compile_var_package;
1706 ImportTableEntry *compile_var_import;1702 ZigType *compile_var_import;
1707 ImportTableEntry *root_import;1703 ZigType *root_import;
1708 ImportTableEntry *bootstrap_import;1704 ZigType *bootstrap_import;
1709 ImportTableEntry *test_runner_import;1705 ZigType *test_runner_import;
17101706
1711 struct {1707 struct {
1712 ZigType *entry_bool;1708 ZigType *entry_bool;
...@@ -1731,7 +1727,6 @@ struct CodeGen {...@@ -1731,7 +1727,6 @@ struct CodeGen {
1731 ZigType *entry_unreachable;1727 ZigType *entry_unreachable;
1732 ZigType *entry_type;1728 ZigType *entry_type;
1733 ZigType *entry_invalid;1729 ZigType *entry_invalid;
1734 ZigType *entry_namespace;
1735 ZigType *entry_block;1730 ZigType *entry_block;
1736 ZigType *entry_num_lit_int;1731 ZigType *entry_num_lit_int;
1737 ZigType *entry_num_lit_float;1732 ZigType *entry_num_lit_float;
...@@ -1851,7 +1846,7 @@ struct CodeGen {...@@ -1851,7 +1846,7 @@ struct CodeGen {
1851 Buf *root_out_name;1846 Buf *root_out_name;
1852 Buf *test_filter;1847 Buf *test_filter;
1853 Buf *test_name_prefix;1848 Buf *test_name_prefix;
1854 PackageTableEntry *root_package;1849 ZigPackage *root_package;
1855 Buf *zig_lib_dir;1850 Buf *zig_lib_dir;
1856 Buf *zig_std_dir;1851 Buf *zig_std_dir;
18571852
...@@ -1945,13 +1940,17 @@ struct ScopeDecls {...@@ -1945,13 +1940,17 @@ struct ScopeDecls {
1945 Scope base;1940 Scope base;
19461941
1947 HashMap<Buf *, Tld *, buf_hash, buf_eql_buf> decl_table;1942 HashMap<Buf *, Tld *, buf_hash, buf_eql_buf> decl_table;
1948 bool safety_off;1943 ZigList<AstNode *> use_decls;
1949 AstNode *safety_set_node;1944 AstNode *safety_set_node;
1950 bool fast_math_on;
1951 AstNode *fast_math_set_node;1945 AstNode *fast_math_set_node;
1952 ImportTableEntry *import;1946 ZigType *import;
1953 // If this is a scope from a container, this is the type entry, otherwise null1947 // If this is a scope from a container, this is the type entry, otherwise null
1954 ZigType *container_type;1948 ZigType *container_type;
1949 Buf *bare_name;
1950
1951 bool safety_off;
1952 bool fast_math_on;
1953 bool any_imports_failed;
1955};1954};
19561955
1957// This scope comes from a block expression in user code.1956// This scope comes from a block expression in user code.
...@@ -3477,6 +3476,8 @@ static const size_t stack_trace_ptr_count = 32;...@@ -3477,6 +3476,8 @@ static const size_t stack_trace_ptr_count = 32;
3477#define ERR_RET_TRACE_PTR_FIELD_NAME "err_ret_trace_ptr"3476#define ERR_RET_TRACE_PTR_FIELD_NAME "err_ret_trace_ptr"
3478#define RESULT_PTR_FIELD_NAME "result_ptr"3477#define RESULT_PTR_FIELD_NAME "result_ptr"
34793478
3479#define NAMESPACE_SEP_CHAR '.'
3480#define NAMESPACE_SEP_STR "."
34803481
3481enum FloatMode {3482enum FloatMode {
3482 FloatModeStrict,3483 FloatModeStrict,
...@@ -3508,7 +3509,7 @@ struct FnWalkTypes {...@@ -3508,7 +3509,7 @@ struct FnWalkTypes {
3508};3509};
35093510
3510struct FnWalkVars {3511struct FnWalkVars {
3511 ImportTableEntry *import;3512 ZigType *import;
3512 LLVMValueRef llvm_fn;3513 LLVMValueRef llvm_fn;
3513 ZigFn *fn;3514 ZigFn *fn;
3514 ZigVar *var;3515 ZigVar *var;
src/analyze.cpp+289-233
...@@ -28,10 +28,14 @@ static Error ATTRIBUTE_MUST_USE resolve_enum_zero_bits(CodeGen *g, ZigType *enum...@@ -28,10 +28,14 @@ static Error ATTRIBUTE_MUST_USE resolve_enum_zero_bits(CodeGen *g, ZigType *enum
28static Error ATTRIBUTE_MUST_USE resolve_union_zero_bits(CodeGen *g, ZigType *union_type);28static Error ATTRIBUTE_MUST_USE resolve_union_zero_bits(CodeGen *g, ZigType *union_type);
29static void analyze_fn_body(CodeGen *g, ZigFn *fn_table_entry);29static 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,31static bool is_top_level_struct(ZigType *import) {
32 Buf *msg)32 return import->id == ZigTypeIdStruct && import->data.structure.root_struct != nullptr;
33{33}
34 if (owner->c_import_node != nullptr) {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) {
35 // if this happens, then translate_c generated code that39 // if this happens, then translate_c generated code that
36 // failed semantic analysis, which isn't supposed to happen40 // 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...@@ -46,18 +50,20 @@ static ErrorMsg *add_error_note_token(CodeGen *g, ErrorMsg *parent_msg, ImportTa
46 return note;50 return note;
47 }51 }
4852
49 ErrorMsg *err = err_msg_create_with_line(owner->path, token->start_line, token->start_column,53 ErrorMsg *err = err_msg_create_with_line(root_struct->path, token->start_line, token->start_column,
50 owner->source_code, owner->line_offsets, msg);54 root_struct->source_code, root_struct->line_offsets, msg);
5155
52 err_msg_add_note(parent_msg, err);56 err_msg_add_note(parent_msg, err);
53 return err;57 return err;
54}58}
5559
56ErrorMsg *add_token_error(CodeGen *g, ImportTableEntry *owner, Token *token, Buf *msg) {60ErrorMsg *add_token_error(CodeGen *g, ZigType *owner, Token *token, Buf *msg) {
57 if (owner->c_import_node != nullptr) {61 assert(is_top_level_struct(owner));
62 RootStruct *root_struct = owner->data.structure.root_struct;
63 if (root_struct->c_import_node != nullptr) {
58 // if this happens, then translate_c generated code that64 // if this happens, then translate_c generated code that
59 // failed semantic analysis, which isn't supposed to happen65 // 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,
61 buf_sprintf("compiler bug: @cImport generated invalid zig code"));67 buf_sprintf("compiler bug: @cImport generated invalid zig code"));
6268
63 add_error_note_token(g, err, owner, token, msg);69 add_error_note_token(g, err, owner, token, msg);
...@@ -65,8 +71,8 @@ ErrorMsg *add_token_error(CodeGen *g, ImportTableEntry *owner, Token *token, Buf...@@ -65,8 +71,8 @@ ErrorMsg *add_token_error(CodeGen *g, ImportTableEntry *owner, Token *token, Buf
65 g->errors.append(err);71 g->errors.append(err);
66 return err;72 return err;
67 }73 }
68 ErrorMsg *err = err_msg_create_with_line(owner->path, token->start_line, token->start_column,74 ErrorMsg *err = err_msg_create_with_line(root_struct->path, token->start_line, token->start_column,
69 owner->source_code, owner->line_offsets, msg);75 root_struct->source_code, root_struct->line_offsets, msg);
7076
71 g->errors.append(err);77 g->errors.append(err);
72 return err;78 return err;
...@@ -114,13 +120,16 @@ void init_scope(CodeGen *g, Scope *dest, ScopeId id, AstNode *source_node, Scope...@@ -114,13 +120,16 @@ void init_scope(CodeGen *g, Scope *dest, ScopeId id, AstNode *source_node, Scope
114 dest->parent = parent;120 dest->parent = parent;
115}121}
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{
118 assert(node == nullptr || node->type == NodeTypeContainerDecl || node->type == NodeTypeFnCallExpr);126 assert(node == nullptr || node->type == NodeTypeContainerDecl || node->type == NodeTypeFnCallExpr);
119 ScopeDecls *scope = allocate<ScopeDecls>(1);127 ScopeDecls *scope = allocate<ScopeDecls>(1);
120 init_scope(g, &scope->base, ScopeIdDecls, node, parent);128 init_scope(g, &scope->base, ScopeIdDecls, node, parent);
121 scope->decl_table.init(4);129 scope->decl_table.init(4);
122 scope->container_type = container_type;130 scope->container_type = container_type;
123 scope->import = import;131 scope->import = import;
132 scope->bare_name = bare_name;
124 return scope;133 return scope;
125}134}
126135
...@@ -207,11 +216,11 @@ Scope *create_coro_prelude_scope(CodeGen *g, AstNode *node, Scope *parent) {...@@ -207,11 +216,11 @@ Scope *create_coro_prelude_scope(CodeGen *g, AstNode *node, Scope *parent) {
207 return &scope->base;216 return &scope->base;
208}217}
209218
210ImportTableEntry *get_scope_import(Scope *scope) {219ZigType *get_scope_import(Scope *scope) {
211 while (scope) {220 while (scope) {
212 if (scope->id == ScopeIdDecls) {221 if (scope->id == ScopeIdDecls) {
213 ScopeDecls *decls_scope = (ScopeDecls *)scope;222 ScopeDecls *decls_scope = (ScopeDecls *)scope;
214 assert(decls_scope->import);223 assert(is_top_level_struct(decls_scope->import));
215 return decls_scope->import;224 return decls_scope->import;
216 }225 }
217 scope = scope->parent;226 scope = scope->parent;
...@@ -219,9 +228,12 @@ ImportTableEntry *get_scope_import(Scope *scope) {...@@ -219,9 +228,12 @@ ImportTableEntry *get_scope_import(Scope *scope) {
219 zig_unreachable();228 zig_unreachable();
220}229}
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{
223 ZigType *entry = new_type_table_entry(id);234 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);
225 return entry;237 return entry;
226}238}
227239
...@@ -261,7 +273,6 @@ AstNode *type_decl_node(ZigType *type_entry) {...@@ -261,7 +273,6 @@ AstNode *type_decl_node(ZigType *type_entry) {
261 case ZigTypeIdErrorUnion:273 case ZigTypeIdErrorUnion:
262 case ZigTypeIdErrorSet:274 case ZigTypeIdErrorSet:
263 case ZigTypeIdFn:275 case ZigTypeIdFn:
264 case ZigTypeIdNamespace:
265 case ZigTypeIdBoundFn:276 case ZigTypeIdBoundFn:
266 case ZigTypeIdArgTuple:277 case ZigTypeIdArgTuple:
267 case ZigTypeIdPromise:278 case ZigTypeIdPromise:
...@@ -323,7 +334,6 @@ bool type_is_resolved(ZigType *type_entry, ResolveStatus status) {...@@ -323,7 +334,6 @@ bool type_is_resolved(ZigType *type_entry, ResolveStatus status) {
323 case ZigTypeIdErrorUnion:334 case ZigTypeIdErrorUnion:
324 case ZigTypeIdErrorSet:335 case ZigTypeIdErrorSet:
325 case ZigTypeIdFn:336 case ZigTypeIdFn:
326 case ZigTypeIdNamespace:
327 case ZigTypeIdBoundFn:337 case ZigTypeIdBoundFn:
328 case ZigTypeIdArgTuple:338 case ZigTypeIdArgTuple:
329 case ZigTypeIdPromise:339 case ZigTypeIdPromise:
...@@ -1005,21 +1015,22 @@ ZigType *get_slice_type(CodeGen *g, ZigType *ptr_type) {...@@ -1005,21 +1015,22 @@ ZigType *get_slice_type(CodeGen *g, ZigType *ptr_type) {
1005 return entry;1015 return entry;
1006}1016}
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) {
1009 ZigType *entry = new_type_table_entry(ZigTypeIdOpaque);1019 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;
1014 unsigned line = source_node ? (unsigned)(source_node->line + 1) : 0;1024 unsigned line = source_node ? (unsigned)(source_node->line + 1) : 0;
10151025
1016 entry->type_ref = LLVMInt8Type();1026 entry->type_ref = LLVMInt8Type();
1017 entry->di_type = ZigLLVMCreateDebugForwardDeclType(g->dbuilder,1027 entry->di_type = ZigLLVMCreateDebugForwardDeclType(g->dbuilder,
1018 ZigLLVMTag_DW_structure_type(), buf_ptr(&entry->name),1028 ZigLLVMTag_DW_structure_type(), full_name,
1019 import ? ZigLLVMFileToScope(import->di_file) : nullptr,1029 import ? ZigLLVMFileToScope(import->data.structure.root_struct->di_file) : nullptr,
1020 import ? import->di_file : nullptr,1030 import ? import->data.structure.root_struct->di_file : nullptr,
1021 line);1031 line);
1022 entry->zero_bits = false;1032 entry->zero_bits = false;
1033 entry->data.opaque.bare_name = bare_name;
10231034
1024 return entry;1035 return entry;
1025}1036}
...@@ -1288,11 +1299,32 @@ static ZigTypeId container_to_type(ContainerKind kind) {...@@ -1288,11 +1299,32 @@ static ZigTypeId container_to_type(ContainerKind kind) {
1288 zig_unreachable();1299 zig_unreachable();
1289}1300}
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
1291ZigType *get_partial_container_type(CodeGen *g, Scope *scope, ContainerKind kind,1323ZigType *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)
1293{1325{
1294 ZigTypeId type_id = container_to_type(kind);1326 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
1297 switch (kind) {1329 switch (kind) {
1298 case ContainerKindStruct:1330 case ContainerKindStruct:
...@@ -1312,13 +1344,14 @@ ZigType *get_partial_container_type(CodeGen *g, Scope *scope, ContainerKind kind...@@ -1312,13 +1344,14 @@ ZigType *get_partial_container_type(CodeGen *g, Scope *scope, ContainerKind kind
1312 size_t line = decl_node ? decl_node->line : 0;1344 size_t line = decl_node ? decl_node->line : 0;
1313 unsigned dwarf_kind = ZigLLVMTag_DW_structure_type();1345 unsigned dwarf_kind = ZigLLVMTag_DW_structure_type();
13141346
1315 ImportTableEntry *import = get_scope_import(scope);1347 ZigType *import = get_scope_import(scope);
1316 entry->type_ref = LLVMStructCreateNamed(LLVMGetGlobalContext(), name);1348 entry->type_ref = LLVMStructCreateNamed(LLVMGetGlobalContext(), full_name);
1317 entry->di_type = ZigLLVMCreateReplaceableCompositeType(g->dbuilder,1349 entry->di_type = ZigLLVMCreateReplaceableCompositeType(g->dbuilder,
1318 dwarf_kind, name,1350 dwarf_kind, full_name,
1319 ZigLLVMFileToScope(import->di_file), import->di_file, (unsigned)(line + 1));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
1323 return entry;1356 return entry;
1324}1357}
...@@ -1459,7 +1492,6 @@ static Error emit_error_unless_type_allowed_in_packed_struct(CodeGen *g, ZigType...@@ -1459,7 +1492,6 @@ static Error emit_error_unless_type_allowed_in_packed_struct(CodeGen *g, ZigType
1459 case ZigTypeIdNull:1492 case ZigTypeIdNull:
1460 case ZigTypeIdErrorUnion:1493 case ZigTypeIdErrorUnion:
1461 case ZigTypeIdErrorSet:1494 case ZigTypeIdErrorSet:
1462 case ZigTypeIdNamespace:
1463 case ZigTypeIdBoundFn:1495 case ZigTypeIdBoundFn:
1464 case ZigTypeIdArgTuple:1496 case ZigTypeIdArgTuple:
1465 case ZigTypeIdOpaque:1497 case ZigTypeIdOpaque:
...@@ -1547,7 +1579,6 @@ bool type_allowed_in_extern(CodeGen *g, ZigType *type_entry) {...@@ -1547,7 +1579,6 @@ bool type_allowed_in_extern(CodeGen *g, ZigType *type_entry) {
1547 case ZigTypeIdNull:1579 case ZigTypeIdNull:
1548 case ZigTypeIdErrorUnion:1580 case ZigTypeIdErrorUnion:
1549 case ZigTypeIdErrorSet:1581 case ZigTypeIdErrorSet:
1550 case ZigTypeIdNamespace:
1551 case ZigTypeIdBoundFn:1582 case ZigTypeIdBoundFn:
1552 case ZigTypeIdArgTuple:1583 case ZigTypeIdArgTuple:
1553 case ZigTypeIdPromise:1584 case ZigTypeIdPromise:
...@@ -1706,7 +1737,6 @@ static ZigType *analyze_fn_type(CodeGen *g, AstNode *proto_node, Scope *child_sc...@@ -1706,7 +1737,6 @@ static ZigType *analyze_fn_type(CodeGen *g, AstNode *proto_node, Scope *child_sc
1706 return g->builtin_types.entry_invalid;1737 return g->builtin_types.entry_invalid;
1707 case ZigTypeIdComptimeFloat:1738 case ZigTypeIdComptimeFloat:
1708 case ZigTypeIdComptimeInt:1739 case ZigTypeIdComptimeInt:
1709 case ZigTypeIdNamespace:
1710 case ZigTypeIdBoundFn:1740 case ZigTypeIdBoundFn:
1711 case ZigTypeIdMetaType:1741 case ZigTypeIdMetaType:
1712 case ZigTypeIdVoid:1742 case ZigTypeIdVoid:
...@@ -1801,7 +1831,6 @@ static ZigType *analyze_fn_type(CodeGen *g, AstNode *proto_node, Scope *child_sc...@@ -1801,7 +1831,6 @@ static ZigType *analyze_fn_type(CodeGen *g, AstNode *proto_node, Scope *child_sc
18011831
1802 case ZigTypeIdComptimeFloat:1832 case ZigTypeIdComptimeFloat:
1803 case ZigTypeIdComptimeInt:1833 case ZigTypeIdComptimeInt:
1804 case ZigTypeIdNamespace:
1805 case ZigTypeIdBoundFn:1834 case ZigTypeIdBoundFn:
1806 case ZigTypeIdMetaType:1835 case ZigTypeIdMetaType:
1807 case ZigTypeIdUnreachable:1836 case ZigTypeIdUnreachable:
...@@ -1880,7 +1909,9 @@ static Error resolve_enum_type(CodeGen *g, ZigType *enum_type) {...@@ -1880,7 +1909,9 @@ static Error resolve_enum_type(CodeGen *g, ZigType *enum_type) {
1880 if (!enum_type->data.enumeration.reported_infinite_err) {1909 if (!enum_type->data.enumeration.reported_infinite_err) {
1881 enum_type->data.enumeration.is_invalid = true;1910 enum_type->data.enumeration.is_invalid = true;
1882 enum_type->data.enumeration.reported_infinite_err = true;1911 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);
1884 }1915 }
1885 return ErrorSemanticAnalyzeFail;1916 return ErrorSemanticAnalyzeFail;
1886 }1917 }
...@@ -1895,7 +1926,7 @@ static Error resolve_enum_type(CodeGen *g, ZigType *enum_type) {...@@ -1895,7 +1926,7 @@ static Error resolve_enum_type(CodeGen *g, ZigType *enum_type) {
1895 ZigLLVMDIEnumerator **di_enumerators = allocate<ZigLLVMDIEnumerator*>(field_count);1926 ZigLLVMDIEnumerator **di_enumerators = allocate<ZigLLVMDIEnumerator*>(field_count);
18961927
1897 Scope *scope = &enum_type->data.enumeration.decls_scope->base;1928 Scope *scope = &enum_type->data.enumeration.decls_scope->base;
1898 ImportTableEntry *import = get_scope_import(scope);1929 ZigType *import = get_scope_import(scope);
18991930
1900 // set temporary flag1931 // set temporary flag
1901 enum_type->data.enumeration.embedded_in_current = true;1932 enum_type->data.enumeration.embedded_in_current = true;
...@@ -1924,9 +1955,9 @@ static Error resolve_enum_type(CodeGen *g, ZigType *enum_type) {...@@ -1924,9 +1955,9 @@ static Error resolve_enum_type(CodeGen *g, ZigType *enum_type) {
1924 ZigLLVMDIType **di_root_members = nullptr;1955 ZigLLVMDIType **di_root_members = nullptr;
1925 size_t debug_member_count = 0;1956 size_t debug_member_count = 0;
1926 ZigLLVMDIType *replacement_di_type = ZigLLVMCreateDebugStructType(g->dbuilder,1957 ZigLLVMDIType *replacement_di_type = ZigLLVMCreateDebugStructType(g->dbuilder,
1927 ZigLLVMFileToScope(import->di_file),1958 ZigLLVMFileToScope(import->data.structure.root_struct->di_file),
1928 buf_ptr(&enum_type->name),1959 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),
1930 debug_size_in_bits,1961 debug_size_in_bits,
1931 debug_align_in_bits,1962 debug_align_in_bits,
1932 0, nullptr, di_root_members, (int)debug_member_count, 0, nullptr, "");1963 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) {...@@ -1942,8 +1973,8 @@ static Error resolve_enum_type(CodeGen *g, ZigType *enum_type) {
1942 uint64_t tag_debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, tag_int_type->type_ref);1973 uint64_t tag_debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, tag_int_type->type_ref);
1943 uint64_t tag_debug_align_in_bits = 8*LLVMABIAlignmentOfType(g->target_data_ref, tag_int_type->type_ref);1974 uint64_t tag_debug_align_in_bits = 8*LLVMABIAlignmentOfType(g->target_data_ref, tag_int_type->type_ref);
1944 ZigLLVMDIType *tag_di_type = ZigLLVMCreateDebugEnumerationType(g->dbuilder,1975 ZigLLVMDIType *tag_di_type = ZigLLVMCreateDebugEnumerationType(g->dbuilder,
1945 ZigLLVMFileToScope(import->di_file), buf_ptr(&enum_type->name),1976 ZigLLVMFileToScope(import->data.structure.root_struct->di_file), buf_ptr(&enum_type->name),
1946 import->di_file, (unsigned)(decl_node->line + 1),1977 import->data.structure.root_struct->di_file, (unsigned)(decl_node->line + 1),
1947 tag_debug_size_in_bits,1978 tag_debug_size_in_bits,
1948 tag_debug_align_in_bits,1979 tag_debug_align_in_bits,
1949 di_enumerators, field_count,1980 di_enumerators, field_count,
...@@ -2051,8 +2082,9 @@ static Error resolve_struct_type(CodeGen *g, ZigType *struct_type) {...@@ -2051,8 +2082,9 @@ static Error resolve_struct_type(CodeGen *g, ZigType *struct_type) {
2051 if (struct_type->data.structure.resolve_loop_flag) {2082 if (struct_type->data.structure.resolve_loop_flag) {
2052 if (struct_type->data.structure.resolve_status != ResolveStatusInvalid) {2083 if (struct_type->data.structure.resolve_status != ResolveStatusInvalid) {
2053 struct_type->data.structure.resolve_status = ResolveStatusInvalid;2084 struct_type->data.structure.resolve_status = ResolveStatusInvalid;
2054 add_node_error(g, decl_node,2085 ErrorMsg *msg = add_node_error(g, decl_node,
2055 buf_sprintf("struct '%s' contains itself", buf_ptr(&struct_type->name)));2086 buf_sprintf("struct '%s' contains itself", buf_ptr(&struct_type->name)));
2087 emit_error_notes_for_ref_stack(g, msg);
2056 }2088 }
2057 return ErrorSemanticAnalyzeFail;2089 return ErrorSemanticAnalyzeFail;
2058 }2090 }
...@@ -2159,15 +2191,15 @@ static Error resolve_struct_type(CodeGen *g, ZigType *struct_type) {...@@ -2159,15 +2191,15 @@ static Error resolve_struct_type(CodeGen *g, ZigType *struct_type) {
2159 if (struct_type->zero_bits) {2191 if (struct_type->zero_bits) {
2160 struct_type->type_ref = LLVMVoidType();2192 struct_type->type_ref = LLVMVoidType();
21612193
2162 ImportTableEntry *import = get_scope_import(scope);2194 ZigType *import = get_scope_import(scope);
2163 uint64_t debug_size_in_bits = 0;2195 uint64_t debug_size_in_bits = 0;
2164 uint64_t debug_align_in_bits = 0;2196 uint64_t debug_align_in_bits = 0;
2165 ZigLLVMDIType **di_element_types = nullptr;2197 ZigLLVMDIType **di_element_types = nullptr;
2166 size_t debug_field_count = 0;2198 size_t debug_field_count = 0;
2167 ZigLLVMDIType *replacement_di_type = ZigLLVMCreateDebugStructType(g->dbuilder,2199 ZigLLVMDIType *replacement_di_type = ZigLLVMCreateDebugStructType(g->dbuilder,
2168 ZigLLVMFileToScope(import->di_file),2200 ZigLLVMFileToScope(import->data.structure.root_struct->di_file),
2169 buf_ptr(&struct_type->name),2201 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),
2171 debug_size_in_bits,2203 debug_size_in_bits,
2172 debug_align_in_bits,2204 debug_align_in_bits,
2173 0, nullptr, di_element_types, (int)debug_field_count, 0, nullptr, "");2205 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) {...@@ -2191,7 +2223,7 @@ static Error resolve_struct_type(CodeGen *g, ZigType *struct_type) {
21912223
2192 ZigLLVMDIType **di_element_types = allocate<ZigLLVMDIType*>(debug_field_count);2224 ZigLLVMDIType **di_element_types = allocate<ZigLLVMDIType*>(debug_field_count);
21932225
2194 ImportTableEntry *import = get_scope_import(scope);2226 ZigType *import = get_scope_import(scope);
2195 size_t debug_field_index = 0;2227 size_t debug_field_index = 0;
2196 for (size_t i = 0; i < field_count; i += 1) {2228 for (size_t i = 0; i < field_count; i += 1) {
2197 AstNode *field_node = decl_node->data.container_decl.fields.at(i);2229 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) {...@@ -2234,7 +2266,7 @@ static Error resolve_struct_type(CodeGen *g, ZigType *struct_type) {
2234 }2266 }
2235 di_element_types[debug_field_index] = ZigLLVMCreateDebugMemberType(g->dbuilder,2267 di_element_types[debug_field_index] = ZigLLVMCreateDebugMemberType(g->dbuilder,
2236 ZigLLVMTypeToScope(struct_type->di_type), buf_ptr(type_struct_field->name),2268 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),
2238 debug_size_in_bits,2270 debug_size_in_bits,
2239 debug_align_in_bits,2271 debug_align_in_bits,
2240 debug_offset_in_bits,2272 debug_offset_in_bits,
...@@ -2247,9 +2279,9 @@ static Error resolve_struct_type(CodeGen *g, ZigType *struct_type) {...@@ -2247,9 +2279,9 @@ static Error resolve_struct_type(CodeGen *g, ZigType *struct_type) {
2247 uint64_t debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, struct_type->type_ref);2279 uint64_t debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, struct_type->type_ref);
2248 uint64_t debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, struct_type->type_ref);2280 uint64_t debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, struct_type->type_ref);
2249 ZigLLVMDIType *replacement_di_type = ZigLLVMCreateDebugStructType(g->dbuilder,2281 ZigLLVMDIType *replacement_di_type = ZigLLVMCreateDebugStructType(g->dbuilder,
2250 ZigLLVMFileToScope(import->di_file),2282 ZigLLVMFileToScope(import->data.structure.root_struct->di_file),
2251 buf_ptr(&struct_type->name),2283 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),
2253 debug_size_in_bits,2285 debug_size_in_bits,
2254 debug_align_in_bits,2286 debug_align_in_bits,
2255 0, nullptr, di_element_types, (int)debug_field_count, 0, nullptr, "");2287 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) {...@@ -2276,7 +2308,9 @@ static Error resolve_union_type(CodeGen *g, ZigType *union_type) {
2276 if (!union_type->data.unionation.reported_infinite_err) {2308 if (!union_type->data.unionation.reported_infinite_err) {
2277 union_type->data.unionation.reported_infinite_err = true;2309 union_type->data.unionation.reported_infinite_err = true;
2278 union_type->data.unionation.is_invalid = true;2310 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);
2280 }2314 }
2281 return ErrorSemanticAnalyzeFail;2315 return ErrorSemanticAnalyzeFail;
2282 }2316 }
...@@ -2298,7 +2332,7 @@ static Error resolve_union_type(CodeGen *g, ZigType *union_type) {...@@ -2298,7 +2332,7 @@ static Error resolve_union_type(CodeGen *g, ZigType *union_type) {
2298 uint64_t biggest_size_in_bits = 0;2332 uint64_t biggest_size_in_bits = 0;
22992333
2300 Scope *scope = &union_type->data.unionation.decls_scope->base;2334 Scope *scope = &union_type->data.unionation.decls_scope->base;
2301 ImportTableEntry *import = get_scope_import(scope);2335 ZigType *import = get_scope_import(scope);
23022336
2303 // set temporary flag2337 // set temporary flag
2304 union_type->data.unionation.embedded_in_current = true;2338 union_type->data.unionation.embedded_in_current = true;
...@@ -2325,7 +2359,7 @@ static Error resolve_union_type(CodeGen *g, ZigType *union_type) {...@@ -2325,7 +2359,7 @@ static Error resolve_union_type(CodeGen *g, ZigType *union_type) {
23252359
2326 union_inner_di_types[union_field->gen_index] = ZigLLVMCreateDebugMemberType(g->dbuilder,2360 union_inner_di_types[union_field->gen_index] = ZigLLVMCreateDebugMemberType(g->dbuilder,
2327 ZigLLVMTypeToScope(union_type->di_type), buf_ptr(union_field->enum_field->name),2361 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),
2329 store_size_in_bits,2363 store_size_in_bits,
2330 abi_align_in_bits,2364 abi_align_in_bits,
2331 0,2365 0,
...@@ -2358,9 +2392,9 @@ static Error resolve_union_type(CodeGen *g, ZigType *union_type) {...@@ -2358,9 +2392,9 @@ static Error resolve_union_type(CodeGen *g, ZigType *union_type) {
2358 ZigLLVMDIType **di_root_members = nullptr;2392 ZigLLVMDIType **di_root_members = nullptr;
2359 size_t debug_member_count = 0;2393 size_t debug_member_count = 0;
2360 ZigLLVMDIType *replacement_di_type = ZigLLVMCreateDebugUnionType(g->dbuilder,2394 ZigLLVMDIType *replacement_di_type = ZigLLVMCreateDebugUnionType(g->dbuilder,
2361 ZigLLVMFileToScope(import->di_file),2395 ZigLLVMFileToScope(import->data.structure.root_struct->di_file),
2362 buf_ptr(&union_type->name),2396 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),
2364 debug_size_in_bits,2398 debug_size_in_bits,
2365 debug_align_in_bits,2399 debug_align_in_bits,
2366 0, di_root_members, (int)debug_member_count, 0, "");2400 0, di_root_members, (int)debug_member_count, 0, "");
...@@ -2396,8 +2430,8 @@ static Error resolve_union_type(CodeGen *g, ZigType *union_type) {...@@ -2396,8 +2430,8 @@ static Error resolve_union_type(CodeGen *g, ZigType *union_type) {
23962430
2397 // create debug type for union2431 // create debug type for union
2398 ZigLLVMDIType *replacement_di_type = ZigLLVMCreateDebugUnionType(g->dbuilder,2432 ZigLLVMDIType *replacement_di_type = ZigLLVMCreateDebugUnionType(g->dbuilder,
2399 ZigLLVMFileToScope(import->di_file), buf_ptr(&union_type->name),2433 ZigLLVMFileToScope(import->data.structure.root_struct->di_file), buf_ptr(&union_type->name),
2400 import->di_file, (unsigned)(decl_node->line + 1),2434 import->data.structure.root_struct->di_file, (unsigned)(decl_node->line + 1),
2401 biggest_size_in_bits, biggest_align_in_bits, 0, union_inner_di_types,2435 biggest_size_in_bits, biggest_align_in_bits, 0, union_inner_di_types,
2402 gen_field_count, 0, "");2436 gen_field_count, 0, "");
24032437
...@@ -2452,7 +2486,7 @@ static Error resolve_union_type(CodeGen *g, ZigType *union_type) {...@@ -2452,7 +2486,7 @@ static Error resolve_union_type(CodeGen *g, ZigType *union_type) {
2452 // create debug type for union2486 // create debug type for union
2453 ZigLLVMDIType *union_di_type = ZigLLVMCreateDebugUnionType(g->dbuilder,2487 ZigLLVMDIType *union_di_type = ZigLLVMCreateDebugUnionType(g->dbuilder,
2454 ZigLLVMTypeToScope(union_type->di_type), "AnonUnion",2488 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),
2456 biggest_size_in_bits, biggest_align_in_bits, 0, union_inner_di_types,2490 biggest_size_in_bits, biggest_align_in_bits, 0, union_inner_di_types,
2457 gen_field_count, 0, "");2491 gen_field_count, 0, "");
24582492
...@@ -2463,7 +2497,7 @@ static Error resolve_union_type(CodeGen *g, ZigType *union_type) {...@@ -2463,7 +2497,7 @@ static Error resolve_union_type(CodeGen *g, ZigType *union_type) {
24632497
2464 ZigLLVMDIType *union_member_di_type = ZigLLVMCreateDebugMemberType(g->dbuilder,2498 ZigLLVMDIType *union_member_di_type = ZigLLVMCreateDebugMemberType(g->dbuilder,
2465 ZigLLVMTypeToScope(union_type->di_type), "payload",2499 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),
2467 biggest_size_in_bits,2501 biggest_size_in_bits,
2468 biggest_align_in_bits,2502 biggest_align_in_bits,
2469 union_offset_in_bits,2503 union_offset_in_bits,
...@@ -2474,7 +2508,7 @@ static Error resolve_union_type(CodeGen *g, ZigType *union_type) {...@@ -2474,7 +2508,7 @@ static Error resolve_union_type(CodeGen *g, ZigType *union_type) {
24742508
2475 ZigLLVMDIType *tag_member_di_type = ZigLLVMCreateDebugMemberType(g->dbuilder,2509 ZigLLVMDIType *tag_member_di_type = ZigLLVMCreateDebugMemberType(g->dbuilder,
2476 ZigLLVMTypeToScope(union_type->di_type), "tag",2510 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),
2478 tag_debug_size_in_bits,2512 tag_debug_size_in_bits,
2479 tag_debug_align_in_bits,2513 tag_debug_align_in_bits,
2480 tag_offset_in_bits,2514 tag_offset_in_bits,
...@@ -2487,9 +2521,9 @@ static Error resolve_union_type(CodeGen *g, ZigType *union_type) {...@@ -2487,9 +2521,9 @@ static Error resolve_union_type(CodeGen *g, ZigType *union_type) {
2487 uint64_t debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, union_type->type_ref);2521 uint64_t debug_size_in_bits = 8*LLVMStoreSizeOfType(g->target_data_ref, union_type->type_ref);
2488 uint64_t debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, union_type->type_ref);2522 uint64_t debug_align_in_bits = 8*LLVMABISizeOfType(g->target_data_ref, union_type->type_ref);
2489 ZigLLVMDIType *replacement_di_type = ZigLLVMCreateDebugStructType(g->dbuilder,2523 ZigLLVMDIType *replacement_di_type = ZigLLVMCreateDebugStructType(g->dbuilder,
2490 ZigLLVMFileToScope(import->di_file),2524 ZigLLVMFileToScope(import->data.structure.root_struct->di_file),
2491 buf_ptr(&union_type->name),2525 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),
2493 debug_size_in_bits,2527 debug_size_in_bits,
2494 debug_align_in_bits,2528 debug_align_in_bits,
2495 0, nullptr, di_root_members, 2, 0, nullptr, "");2529 0, nullptr, di_root_members, 2, 0, nullptr, "");
...@@ -2507,8 +2541,9 @@ static Error resolve_enum_zero_bits(CodeGen *g, ZigType *enum_type) {...@@ -2507,8 +2541,9 @@ static Error resolve_enum_zero_bits(CodeGen *g, ZigType *enum_type) {
2507 return ErrorNone;2541 return ErrorNone;
25082542
2509 if (enum_type->data.enumeration.zero_bits_loop_flag) {2543 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,
2511 buf_sprintf("'%s' depends on itself", buf_ptr(&enum_type->name)));2545 buf_sprintf("'%s' depends on itself", buf_ptr(&enum_type->name)));
2546 emit_error_notes_for_ref_stack(g, msg);
2512 enum_type->data.enumeration.is_invalid = true;2547 enum_type->data.enumeration.is_invalid = true;
2513 return ErrorSemanticAnalyzeFail;2548 return ErrorSemanticAnalyzeFail;
2514 }2549 }
...@@ -2780,8 +2815,9 @@ static Error resolve_struct_alignment(CodeGen *g, ZigType *struct_type) {...@@ -2780,8 +2815,9 @@ static Error resolve_struct_alignment(CodeGen *g, ZigType *struct_type) {
2780 if (struct_type->data.structure.resolve_loop_flag) {2815 if (struct_type->data.structure.resolve_loop_flag) {
2781 if (struct_type->data.structure.resolve_status != ResolveStatusInvalid) {2816 if (struct_type->data.structure.resolve_status != ResolveStatusInvalid) {
2782 struct_type->data.structure.resolve_status = ResolveStatusInvalid;2817 struct_type->data.structure.resolve_status = ResolveStatusInvalid;
2783 add_node_error(g, decl_node,2818 ErrorMsg *msg = add_node_error(g, decl_node,
2784 buf_sprintf("struct '%s' contains itself", buf_ptr(&struct_type->name)));2819 buf_sprintf("struct '%s' contains itself", buf_ptr(&struct_type->name)));
2820 emit_error_notes_for_ref_stack(g, msg);
2785 }2821 }
2786 return ErrorSemanticAnalyzeFail;2822 return ErrorSemanticAnalyzeFail;
2787 }2823 }
...@@ -3185,15 +3221,15 @@ static Error resolve_union_zero_bits(CodeGen *g, ZigType *union_type) {...@@ -3185,15 +3221,15 @@ static Error resolve_union_zero_bits(CodeGen *g, ZigType *union_type) {
3185 }3221 }
31863222
3187 if (create_enum_type) {3223 if (create_enum_type) {
3188 ImportTableEntry *import = get_scope_import(scope);3224 ZigType *import = get_scope_import(scope);
3189 uint64_t tag_debug_size_in_bits = tag_type->zero_bits ? 0 :3225 uint64_t tag_debug_size_in_bits = tag_type->zero_bits ? 0 :
3190 8*LLVMStoreSizeOfType(g->target_data_ref, tag_type->type_ref);3226 8*LLVMStoreSizeOfType(g->target_data_ref, tag_type->type_ref);
3191 uint64_t tag_debug_align_in_bits = tag_type->zero_bits ? 0 :3227 uint64_t tag_debug_align_in_bits = tag_type->zero_bits ? 0 :
3192 8*LLVMABIAlignmentOfType(g->target_data_ref, tag_type->type_ref);3228 8*LLVMABIAlignmentOfType(g->target_data_ref, tag_type->type_ref);
3193 // TODO get a more accurate debug scope3229 // TODO get a more accurate debug scope
3194 ZigLLVMDIType *tag_di_type = ZigLLVMCreateDebugEnumerationType(g->dbuilder,3230 ZigLLVMDIType *tag_di_type = ZigLLVMCreateDebugEnumerationType(g->dbuilder,
3195 ZigLLVMFileToScope(import->di_file), buf_ptr(&tag_type->name),3231 ZigLLVMFileToScope(import->data.structure.root_struct->di_file), buf_ptr(&tag_type->name),
3196 import->di_file, (unsigned)(decl_node->line + 1),3232 import->data.structure.root_struct->di_file, (unsigned)(decl_node->line + 1),
3197 tag_debug_size_in_bits, tag_debug_align_in_bits, di_enumerators, field_count,3233 tag_debug_size_in_bits, tag_debug_align_in_bits, di_enumerators, field_count,
3198 tag_type->di_type, "");3234 tag_type->di_type, "");
3199 tag_type->di_type = tag_di_type;3235 tag_type->di_type = tag_di_type;
...@@ -3210,27 +3246,16 @@ static Error resolve_union_zero_bits(CodeGen *g, ZigType *union_type) {...@@ -3210,27 +3246,16 @@ static Error resolve_union_zero_bits(CodeGen *g, ZigType *union_type) {
3210 return ErrorNone;3246 return ErrorNone;
3211}3247}
32123248
3213static void get_fully_qualified_decl_name_internal(Buf *buf, Scope *scope, uint8_t sep) {3249static void get_fully_qualified_decl_name(Buf *buf, Tld *tld) {
3214 if (!scope)3250 buf_resize(buf, 0);
3215 return;
3216
3217 if (scope->id == ScopeIdDecls) {
3218 get_fully_qualified_decl_name_internal(buf, scope->parent, sep);
32193251
3220 ScopeDecls *scope_decls = (ScopeDecls *)scope;3252 Scope *scope = tld->parent_scope;
3221 if (scope_decls->container_type) {3253 while (scope->id != ScopeIdDecls) {
3222 buf_append_buf(buf, &scope_decls->container_type->name);3254 scope = scope->parent;
3223 buf_append_char(buf, sep);
3224 }
3225 return;
3226 }3255 }
32273256 ScopeDecls *decls_scope = reinterpret_cast<ScopeDecls *>(scope);
3228 get_fully_qualified_decl_name_internal(buf, scope->parent, sep);3257 buf_append_buf(buf, &decls_scope->container_type->name);
3229}3258 if (buf_len(buf) != 0) buf_append_char(buf, NAMESPACE_SEP_CHAR);
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);
3234 buf_append_buf(buf, tld->name);3259 buf_append_buf(buf, tld->name);
3235}3260}
32363261
...@@ -3265,7 +3290,7 @@ static bool scope_is_root_decls(Scope *scope) {...@@ -3265,7 +3290,7 @@ static bool scope_is_root_decls(Scope *scope) {
3265 while (scope) {3290 while (scope) {
3266 if (scope->id == ScopeIdDecls) {3291 if (scope->id == ScopeIdDecls) {
3267 ScopeDecls *scope_decls = (ScopeDecls *)scope;3292 ScopeDecls *scope_decls = (ScopeDecls *)scope;
3268 return (scope_decls->container_type == nullptr);3293 return is_top_level_struct(scope_decls->container_type);
3269 }3294 }
3270 scope = scope->parent;3295 scope = scope->parent;
3271 }3296 }
...@@ -3281,7 +3306,7 @@ void typecheck_panic_fn(CodeGen *g, TldFn *tld_fn, ZigFn *panic_fn) {...@@ -3281,7 +3306,7 @@ void typecheck_panic_fn(CodeGen *g, TldFn *tld_fn, ZigFn *panic_fn) {
3281 AstNode *fake_decl = allocate<AstNode>(1);3306 AstNode *fake_decl = allocate<AstNode>(1);
3282 *fake_decl = *panic_fn->proto_node;3307 *fake_decl = *panic_fn->proto_node;
3283 fake_decl->type = NodeTypeSymbol;3308 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
3286 // call this for the side effects of casting to panic_fn_type3311 // call this for the side effects of casting to panic_fn_type
3287 analyze_const_value(g, tld_fn->base.parent_scope, fake_decl, panic_fn_type, nullptr);3312 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...@@ -3326,7 +3351,7 @@ void add_fn_export(CodeGen *g, ZigFn *fn_table_entry, Buf *symbol_name, GlobalLi
3326}3351}
33273352
3328static void resolve_decl_fn(CodeGen *g, TldFn *tld_fn) {3353static void resolve_decl_fn(CodeGen *g, TldFn *tld_fn) {
3329 ImportTableEntry *import = tld_fn->base.import;3354 ZigType *import = tld_fn->base.import;
3330 AstNode *source_node = tld_fn->base.source_node;3355 AstNode *source_node = tld_fn->base.source_node;
3331 if (source_node->type == NodeTypeFnProto) {3356 if (source_node->type == NodeTypeFnProto) {
3332 AstNodeFnProto *fn_proto = &source_node->data.fn_proto;3357 AstNodeFnProto *fn_proto = &source_node->data.fn_proto;
...@@ -3334,16 +3359,21 @@ static void resolve_decl_fn(CodeGen *g, TldFn *tld_fn) {...@@ -3334,16 +3359,21 @@ static void resolve_decl_fn(CodeGen *g, TldFn *tld_fn) {
3334 AstNode *fn_def_node = fn_proto->fn_def_node;3359 AstNode *fn_def_node = fn_proto->fn_def_node;
33353360
3336 ZigFn *fn_table_entry = create_fn(g, source_node);3361 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
3339 if (fn_proto->is_export) {3371 if (fn_proto->is_export) {
3340 bool ccc = (fn_proto->cc == CallingConventionUnspecified || fn_proto->cc == CallingConventionC);3372 bool ccc = (fn_proto->cc == CallingConventionUnspecified || fn_proto->cc == CallingConventionC);
3341 add_fn_export(g, fn_table_entry, &fn_table_entry->symbol_name, GlobalLinkageIdStrong, ccc);3373 add_fn_export(g, fn_table_entry, &fn_table_entry->symbol_name, GlobalLinkageIdStrong, ccc);
3342 }3374 }
33433375
3344 tld_fn->fn_entry = fn_table_entry;3376 if (!is_extern) {
3345
3346 if (fn_table_entry->body_node) {
3347 fn_table_entry->fndef_scope = create_fndef_scope(g,3377 fn_table_entry->fndef_scope = create_fndef_scope(g,
3348 fn_table_entry->body_node, tld_fn->base.parent_scope, fn_table_entry);3378 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) {...@@ -3382,12 +3412,12 @@ static void resolve_decl_fn(CodeGen *g, TldFn *tld_fn) {
3382 }3412 }
33833413
3384 if (scope_is_root_decls(tld_fn->base.parent_scope) &&3414 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))
3386 {3416 {
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")) {
3388 g->main_fn = fn_table_entry;3418 g->main_fn = fn_table_entry;
3389 } else if ((import->package == g->panic_package || g->have_pub_panic) &&3419 } else if ((import->data.structure.root_struct->package == g->panic_package || g->have_pub_panic) &&
3390 buf_eql_str(&fn_table_entry->symbol_name, "panic"))3420 buf_eql_str(tld_fn->base.name, "panic"))
3391 {3421 {
3392 g->panic_fn = fn_table_entry;3422 g->panic_fn = fn_table_entry;
3393 g->panic_tld_fn = tld_fn;3423 g->panic_tld_fn = tld_fn;
...@@ -3396,7 +3426,7 @@ static void resolve_decl_fn(CodeGen *g, TldFn *tld_fn) {...@@ -3396,7 +3426,7 @@ static void resolve_decl_fn(CodeGen *g, TldFn *tld_fn) {
3396 } else if (source_node->type == NodeTypeTestDecl) {3426 } else if (source_node->type == NodeTypeTestDecl) {
3397 ZigFn *fn_table_entry = create_fn_raw(g, FnInlineAuto);3427 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
3401 tld_fn->fn_entry = fn_table_entry;3431 tld_fn->fn_entry = fn_table_entry;
34023432
...@@ -3473,8 +3503,8 @@ static void preview_test_decl(CodeGen *g, AstNode *node, ScopeDecls *decls_scope...@@ -3473,8 +3503,8 @@ static void preview_test_decl(CodeGen *g, AstNode *node, ScopeDecls *decls_scope
3473 if (!g->is_test_build)3503 if (!g->is_test_build)
3474 return;3504 return;
34753505
3476 ImportTableEntry *import = get_scope_import(&decls_scope->base);3506 ZigType *import = get_scope_import(&decls_scope->base);
3477 if (import->package != g->root_package)3507 if (import->data.structure.root_struct->package != g->root_package)
3478 return;3508 return;
34793509
3480 Buf *decl_name_buf = node->data.test_decl.name;3510 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...@@ -3511,8 +3541,8 @@ void init_tld(Tld *tld, TldId id, Buf *name, VisibMod visib_mod, AstNode *source
3511}3541}
35123542
3513void update_compile_var(CodeGen *g, Buf *name, ConstExprValue *value) {3543void update_compile_var(CodeGen *g, Buf *name, ConstExprValue *value) {
3514 Tld *tld = g->compile_var_import->decls_scope->decl_table.get(name);3544 Tld *tld = get_container_scope(g->compile_var_import)->decl_table.get(name);
3515 resolve_top_level_decl(g, tld, false, tld->source_node);3545 resolve_top_level_decl(g, tld, tld->source_node);
3516 assert(tld->id == TldIdVar);3546 assert(tld->id == TldIdVar);
3517 TldVar *tld_var = (TldVar *)tld;3547 TldVar *tld_var = (TldVar *)tld;
3518 tld_var->var->const_value = value;3548 tld_var->var->const_value = value;
...@@ -3561,8 +3591,7 @@ void scan_decls(CodeGen *g, ScopeDecls *decls_scope, AstNode *node) {...@@ -3561,8 +3591,7 @@ void scan_decls(CodeGen *g, ScopeDecls *decls_scope, AstNode *node) {
3561 case NodeTypeUse:3591 case NodeTypeUse:
3562 {3592 {
3563 g->use_queue.append(node);3593 g->use_queue.append(node);
3564 ImportTableEntry *import = get_scope_import(&decls_scope->base);3594 decls_scope->use_decls.append(node);
3565 import->use_decls.append(node);
3566 break;3595 break;
3567 }3596 }
3568 case NodeTypeTestDecl:3597 case NodeTypeTestDecl:
...@@ -3654,7 +3683,6 @@ ZigType *validate_var_type(CodeGen *g, AstNode *source_node, ZigType *type_entry...@@ -3654,7 +3683,6 @@ ZigType *validate_var_type(CodeGen *g, AstNode *source_node, ZigType *type_entry
3654 return g->builtin_types.entry_invalid;3683 return g->builtin_types.entry_invalid;
3655 case ZigTypeIdComptimeFloat:3684 case ZigTypeIdComptimeFloat:
3656 case ZigTypeIdComptimeInt:3685 case ZigTypeIdComptimeInt:
3657 case ZigTypeIdNamespace:
3658 case ZigTypeIdMetaType:3686 case ZigTypeIdMetaType:
3659 case ZigTypeIdVoid:3687 case ZigTypeIdVoid:
3660 case ZigTypeIdBool:3688 case ZigTypeIdBool:
...@@ -3763,8 +3791,16 @@ static void resolve_decl_var(CodeGen *g, TldVar *tld_var) {...@@ -3763,8 +3791,16 @@ static void resolve_decl_var(CodeGen *g, TldVar *tld_var) {
37633791
3764 ZigType *explicit_type = nullptr;3792 ZigType *explicit_type = nullptr;
3765 if (var_decl->type) {3793 if (var_decl->type) {
3766 ZigType *proposed_type = analyze_type_expr(g, tld_var->base.parent_scope, var_decl->type);3794 if (tld_var->analyzing_type) {
3767 explicit_type = validate_var_type(g, var_decl->type, proposed_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 }
3768 }3804 }
37693805
3770 assert(!is_export || !is_extern);3806 assert(!is_export || !is_extern);
...@@ -3847,17 +3883,12 @@ static void resolve_decl_var(CodeGen *g, TldVar *tld_var) {...@@ -3847,17 +3883,12 @@ static void resolve_decl_var(CodeGen *g, TldVar *tld_var) {
3847 g->global_vars.append(tld_var);3883 g->global_vars.append(tld_var);
3848}3884}
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) {
3851 if (tld->resolution != TldResolutionUnresolved)3887 if (tld->resolution != TldResolutionUnresolved)
3852 return;3888 return;
38533889
3854 if (tld->dep_loop_flag) {3890 assert(tld->resolution != TldResolutionResolving);
3855 add_node_error(g, tld->source_node, buf_sprintf("'%s' depends on itself", buf_ptr(tld->name)));3891 tld->resolution = TldResolutionResolving;
3856 tld->resolution = TldResolutionInvalid;
3857 return;
3858 }
3859
3860 tld->dep_loop_flag = true;
3861 g->tld_ref_source_node_stack.append(source_node);3892 g->tld_ref_source_node_stack.append(source_node);
38623893
3863 switch (tld->id) {3894 switch (tld->id) {
...@@ -3888,27 +3919,31 @@ void resolve_top_level_decl(CodeGen *g, Tld *tld, bool pointer_only, AstNode *so...@@ -3888,27 +3919,31 @@ void resolve_top_level_decl(CodeGen *g, Tld *tld, bool pointer_only, AstNode *so
3888 }3919 }
38893920
3890 tld->resolution = TldResolutionOk;3921 tld->resolution = TldResolutionOk;
3891 tld->dep_loop_flag = false;
3892 g->tld_ref_source_node_stack.pop();3922 g->tld_ref_source_node_stack.pop();
3893}3923}
38943924
3895Tld *find_decl(CodeGen *g, Scope *scope, Buf *name) {3925Tld *find_container_decl(CodeGen *g, ScopeDecls *decls_scope, Buf *name) {
3896 // we must resolve all the use decls3926 // resolve all the use decls
3897 ImportTableEntry *import = get_scope_import(scope);3927 for (size_t i = 0; i < decls_scope->use_decls.length; i += 1) {
3898 for (size_t i = 0; i < import->use_decls.length; i += 1) {3928 AstNode *use_decl_node = decls_scope->use_decls.at(i);
3899 AstNode *use_decl_node = import->use_decls.at(i);
3900 if (use_decl_node->data.use.resolution == TldResolutionUnresolved) {3929 if (use_decl_node->data.use.resolution == TldResolutionUnresolved) {
3901 preview_use_decl(g, use_decl_node);3930 preview_use_decl(g, use_decl_node);
3902 resolve_use_decl(g, use_decl_node);3931 resolve_use_decl(g, use_decl_node);
3903 }3932 }
3904 }3933 }
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) {
3906 while (scope) {3940 while (scope) {
3907 if (scope->id == ScopeIdDecls) {3941 if (scope->id == ScopeIdDecls) {
3908 ScopeDecls *decls_scope = (ScopeDecls *)scope;3942 ScopeDecls *decls_scope = (ScopeDecls *)scope;
3909 auto entry = decls_scope->decl_table.maybe_get(name);3943
3910 if (entry)3944 Tld *result = find_container_decl(g, decls_scope, name);
3911 return entry->value;3945 if (result != nullptr)
3946 return result;
3912 }3947 }
3913 scope = scope->parent;3948 scope = scope->parent;
3914 }3949 }
...@@ -3959,6 +3994,12 @@ ZigFn *scope_fn_entry(Scope *scope) {...@@ -3959,6 +3994,12 @@ ZigFn *scope_fn_entry(Scope *scope) {
3959 return nullptr;3994 return nullptr;
3960}3995}
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
3962TypeEnumField *find_enum_type_field(ZigType *enum_type, Buf *name) {4003TypeEnumField *find_enum_type_field(ZigType *enum_type, Buf *name) {
3963 assert(enum_type->id == ZigTypeIdEnum);4004 assert(enum_type->id == ZigTypeIdEnum);
3964 if (enum_type->data.enumeration.src_field_count == 0)4005 if (enum_type->data.enumeration.src_field_count == 0)
...@@ -4039,7 +4080,6 @@ static bool is_container(ZigType *type_entry) {...@@ -4039,7 +4080,6 @@ static bool is_container(ZigType *type_entry) {
4039 case ZigTypeIdErrorUnion:4080 case ZigTypeIdErrorUnion:
4040 case ZigTypeIdErrorSet:4081 case ZigTypeIdErrorSet:
4041 case ZigTypeIdFn:4082 case ZigTypeIdFn:
4042 case ZigTypeIdNamespace:
4043 case ZigTypeIdBoundFn:4083 case ZigTypeIdBoundFn:
4044 case ZigTypeIdArgTuple:4084 case ZigTypeIdArgTuple:
4045 case ZigTypeIdOpaque:4085 case ZigTypeIdOpaque:
...@@ -4098,7 +4138,6 @@ void resolve_container_type(CodeGen *g, ZigType *type_entry) {...@@ -4098,7 +4138,6 @@ void resolve_container_type(CodeGen *g, ZigType *type_entry) {
4098 case ZigTypeIdErrorUnion:4138 case ZigTypeIdErrorUnion:
4099 case ZigTypeIdErrorSet:4139 case ZigTypeIdErrorSet:
4100 case ZigTypeIdFn:4140 case ZigTypeIdFn:
4101 case ZigTypeIdNamespace:
4102 case ZigTypeIdBoundFn:4141 case ZigTypeIdBoundFn:
4103 case ZigTypeIdInvalid:4142 case ZigTypeIdInvalid:
4104 case ZigTypeIdArgTuple:4143 case ZigTypeIdArgTuple:
...@@ -4342,9 +4381,9 @@ static void add_symbols_from_import(CodeGen *g, AstNode *src_use_node, AstNode *...@@ -4342,9 +4381,9 @@ static void add_symbols_from_import(CodeGen *g, AstNode *src_use_node, AstNode *
4342 preview_use_decl(g, src_use_node);4381 preview_use_decl(g, src_use_node);
4343 }4382 }
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;
4346 if (type_is_invalid(use_target_value->type)) {4385 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;
4348 return;4387 return;
4349 }4388 }
43504389
...@@ -4352,14 +4391,14 @@ static void add_symbols_from_import(CodeGen *g, AstNode *src_use_node, AstNode *...@@ -4352,14 +4391,14 @@ static void add_symbols_from_import(CodeGen *g, AstNode *src_use_node, AstNode *
43524391
4353 assert(use_target_value->special != ConstValSpecialRuntime);4392 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;
4356 assert(target_import);4395 assert(target_import);
43574396
4358 if (target_import->any_imports_failed) {4397 if (get_container_scope(target_import)->any_imports_failed) {
4359 dst_use_node->owner->any_imports_failed = true;4398 get_container_scope(dst_use_node->owner)->any_imports_failed = true;
4360 }4399 }
43614400
4362 auto it = target_import->decls_scope->decl_table.entry_iterator();4401 auto it = get_container_scope(target_import)->decl_table.entry_iterator();
4363 for (;;) {4402 for (;;) {
4364 auto *entry = it.next();4403 auto *entry = it.next();
4365 if (!entry)4404 if (!entry)
...@@ -4374,7 +4413,7 @@ static void add_symbols_from_import(CodeGen *g, AstNode *src_use_node, AstNode *...@@ -4374,7 +4413,7 @@ static void add_symbols_from_import(CodeGen *g, AstNode *src_use_node, AstNode *
43744413
4375 Buf *target_tld_name = entry->key;4414 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);
4378 if (existing_entry) {4417 if (existing_entry) {
4379 Tld *existing_decl = existing_entry->value;4418 Tld *existing_decl = existing_entry->value;
4380 if (existing_decl != target_tld) {4419 if (existing_decl != target_tld) {
...@@ -4387,8 +4426,8 @@ static void add_symbols_from_import(CodeGen *g, AstNode *src_use_node, AstNode *...@@ -4387,8 +4426,8 @@ static void add_symbols_from_import(CodeGen *g, AstNode *src_use_node, AstNode *
4387 }4426 }
4388 }4427 }
43894428
4390 for (size_t i = 0; i < target_import->use_decls.length; i += 1) {4429 for (size_t i = 0; i < get_container_scope(target_import)->use_decls.length; i += 1) {
4391 AstNode *use_decl_node = target_import->use_decls.at(i);4430 AstNode *use_decl_node = get_container_scope(target_import)->use_decls.at(i);
4392 if (use_decl_node->data.use.visib_mod != VisibModPrivate)4431 if (use_decl_node->data.use.visib_mod != VisibModPrivate)
4393 add_symbols_from_import(g, use_decl_node, dst_use_node);4432 add_symbols_from_import(g, use_decl_node, dst_use_node);
4394 }4433 }
...@@ -4415,16 +4454,18 @@ void preview_use_decl(CodeGen *g, AstNode *node) {...@@ -4415,16 +4454,18 @@ void preview_use_decl(CodeGen *g, AstNode *node) {
4415 }4454 }
44164455
4417 node->data.use.resolution = TldResolutionResolving;4456 node->data.use.resolution = TldResolutionResolving;
4418 ConstExprValue *result = analyze_const_value(g, &node->owner->decls_scope->base,4457 ConstExprValue *result = analyze_const_value(g, &get_container_scope(node->owner)->base,
4419 node->data.use.expr, g->builtin_types.entry_namespace, nullptr);4458 node->data.use.expr, g->builtin_types.entry_type, nullptr);
44204459
4421 if (type_is_invalid(result->type))4460 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;
4425}4464}
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{
4428 if (g->verbose_tokenize) {4469 if (g->verbose_tokenize) {
4429 fprintf(stderr, "\nOriginal Source (%s):\n", buf_ptr(resolved_path));4470 fprintf(stderr, "\nOriginal Source (%s):\n", buf_ptr(resolved_path));
4430 fprintf(stderr, "----------------\n");4471 fprintf(stderr, "----------------\n");
...@@ -4452,87 +4493,99 @@ ImportTableEntry *add_source_file(CodeGen *g, PackageTableEntry *package, Buf *r...@@ -4452,87 +4493,99 @@ ImportTableEntry *add_source_file(CodeGen *g, PackageTableEntry *package, Buf *r
4452 fprintf(stderr, "------\n");4493 fprintf(stderr, "------\n");
4453 }4494 }
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
4467 Buf *src_dirname = buf_alloc();4496 Buf *src_dirname = buf_alloc();
4468 Buf *src_basename = buf_alloc();4497 Buf *src_basename = buf_alloc();
4469 os_path_split(resolved_path, src_dirname, src_basename);4498 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 }
4472 g->import_table.put(resolved_path, import_entry);4527 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) {4529 AstNode *root_node = ast_parse(source_code, tokenization.tokens, import_entry, g->err_color);
4483 AstNode *proto_node = top_level_decl->data.fn_def.fn_proto;4530 assert(root_node != nullptr);
4484 assert(proto_node->type == NodeTypeFnProto);4531 assert(root_node->type == NodeTypeContainerDecl);
4485 Buf *proto_name = proto_node->data.fn_proto.name;4532 import_entry->data.structure.decl_node = root_node;
44864533 import_entry->data.structure.decls_scope->base.source_node = root_node;
4487 bool is_pub = (proto_node->data.fn_proto.visib_mod == VisibModPub);4534 if (g->verbose_ast) {
4488 bool ok_cc = (proto_node->data.fn_proto.cc == CallingConventionUnspecified ||4535 ast_print(stderr, root_node, 0);
4489 proto_node->data.fn_proto.cc == CallingConventionCold);4536 }
44904537
4491 if (is_pub && ok_cc) {4538 if (source_kind == SourceKindRoot || package == g->panic_package) {
4492 if (buf_eql_str(proto_name, "main")) {4539 // Look for panic and main
4493 g->have_pub_main = true;4540 for (size_t decl_i = 0; decl_i < root_node->data.container_decl.decls.length; decl_i += 1) {
4494 g->subsystem = TargetSubsystemConsole;4541 AstNode *top_level_decl = root_node->data.container_decl.decls.at(decl_i);
4495 } else if (buf_eql_str(proto_name, "panic")) {4542
4496 g->have_pub_panic = true;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 }
4497 }4556 }
4498 }4557 }
4499 }4558 }
4500 }4559 }
45014560
4502 return import_entry;4561 for (size_t decl_i = 0; decl_i < root_node->data.container_decl.decls.length; decl_i += 1) {
4503}4562 AstNode *top_level_decl = root_node->data.container_decl.decls.at(decl_i);
45044563 scan_decls(g, import_entry->data.structure.decls_scope, top_level_decl);
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);
4516 }4564 }
45174565
4518 for (; g->use_queue_index < g->use_queue.length; g->use_queue_index += 1) {4566 TldContainer *tld_container = allocate<TldContainer>(1);
4519 AstNode *use_decl_node = g->use_queue.at(g->use_queue_index);4567 init_tld(&tld_container->base, TldIdContainer, &namespace_name, VisibModPub, root_node, nullptr);
4520 preview_use_decl(g, use_decl_node);4568 tld_container->type_entry = import_entry;
4521 }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) {4572 return import_entry;
4524 AstNode *use_decl_node = g->use_queue.at(i);4573}
4525 resolve_use_decl(g, use_decl_node);
4526 }
45274574
4575void semantic_analyze(CodeGen *g) {
4528 while (g->resolve_queue_index < g->resolve_queue.length ||4576 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)
4530 {4579 {
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 }
4531 for (; g->resolve_queue_index < g->resolve_queue.length; g->resolve_queue_index += 1) {4585 for (; g->resolve_queue_index < g->resolve_queue.length; g->resolve_queue_index += 1) {
4532 Tld *tld = g->resolve_queue.at(g->resolve_queue_index);4586 Tld *tld = g->resolve_queue.at(g->resolve_queue_index);
4533 bool pointer_only = false;
4534 AstNode *source_node = nullptr;4587 AstNode *source_node = nullptr;
4535 resolve_top_level_decl(g, tld, pointer_only, source_node);4588 resolve_top_level_decl(g, tld, source_node);
4536 }4589 }
45374590
4538 for (; g->fn_defs_index < g->fn_defs.length; g->fn_defs_index += 1) {4591 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) {...@@ -4613,7 +4666,6 @@ bool handle_is_ptr(ZigType *type_entry) {
4613 case ZigTypeIdComptimeInt:4666 case ZigTypeIdComptimeInt:
4614 case ZigTypeIdUndefined:4667 case ZigTypeIdUndefined:
4615 case ZigTypeIdNull:4668 case ZigTypeIdNull:
4616 case ZigTypeIdNamespace:
4617 case ZigTypeIdBoundFn:4669 case ZigTypeIdBoundFn:
4618 case ZigTypeIdArgTuple:4670 case ZigTypeIdArgTuple:
4619 case ZigTypeIdOpaque:4671 case ZigTypeIdOpaque:
...@@ -4880,8 +4932,6 @@ static uint32_t hash_const_val(ConstExprValue *const_val) {...@@ -4880,8 +4932,6 @@ static uint32_t hash_const_val(ConstExprValue *const_val) {
4880 return 3415065496;4932 return 3415065496;
4881 case ZigTypeIdErrorSet:4933 case ZigTypeIdErrorSet:
4882 return hash_const_val_error_set(const_val);4934 return hash_const_val_error_set(const_val);
4883 case ZigTypeIdNamespace:
4884 return hash_ptr(const_val->data.x_import);
4885 case ZigTypeIdVector:4935 case ZigTypeIdVector:
4886 // TODO better hashing algorithm4936 // TODO better hashing algorithm
4887 return 3647867726;4937 return 3647867726;
...@@ -4943,7 +4993,6 @@ static bool can_mutate_comptime_var_state(ConstExprValue *value) {...@@ -4943,7 +4993,6 @@ static bool can_mutate_comptime_var_state(ConstExprValue *value) {
4943 case ZigTypeIdComptimeInt:4993 case ZigTypeIdComptimeInt:
4944 case ZigTypeIdUndefined:4994 case ZigTypeIdUndefined:
4945 case ZigTypeIdNull:4995 case ZigTypeIdNull:
4946 case ZigTypeIdNamespace:
4947 case ZigTypeIdBoundFn:4996 case ZigTypeIdBoundFn:
4948 case ZigTypeIdFn:4997 case ZigTypeIdFn:
4949 case ZigTypeIdOpaque:4998 case ZigTypeIdOpaque:
...@@ -5013,7 +5062,6 @@ static bool return_type_is_cacheable(ZigType *return_type) {...@@ -5013,7 +5062,6 @@ static bool return_type_is_cacheable(ZigType *return_type) {
5013 case ZigTypeIdComptimeInt:5062 case ZigTypeIdComptimeInt:
5014 case ZigTypeIdUndefined:5063 case ZigTypeIdUndefined:
5015 case ZigTypeIdNull:5064 case ZigTypeIdNull:
5016 case ZigTypeIdNamespace:
5017 case ZigTypeIdBoundFn:5065 case ZigTypeIdBoundFn:
5018 case ZigTypeIdFn:5066 case ZigTypeIdFn:
5019 case ZigTypeIdOpaque:5067 case ZigTypeIdOpaque:
...@@ -5143,7 +5191,6 @@ OnePossibleValue type_has_one_possible_value(CodeGen *g, ZigType *type_entry) {...@@ -5143,7 +5191,6 @@ OnePossibleValue type_has_one_possible_value(CodeGen *g, ZigType *type_entry) {
5143 case ZigTypeIdComptimeFloat:5191 case ZigTypeIdComptimeFloat:
5144 case ZigTypeIdComptimeInt:5192 case ZigTypeIdComptimeInt:
5145 case ZigTypeIdMetaType:5193 case ZigTypeIdMetaType:
5146 case ZigTypeIdNamespace:
5147 case ZigTypeIdBoundFn:5194 case ZigTypeIdBoundFn:
5148 case ZigTypeIdArgTuple:5195 case ZigTypeIdArgTuple:
5149 case ZigTypeIdOptional:5196 case ZigTypeIdOptional:
...@@ -5209,7 +5256,6 @@ ReqCompTime type_requires_comptime(CodeGen *g, ZigType *type_entry) {...@@ -5209,7 +5256,6 @@ ReqCompTime type_requires_comptime(CodeGen *g, ZigType *type_entry) {
5209 case ZigTypeIdUndefined:5256 case ZigTypeIdUndefined:
5210 case ZigTypeIdNull:5257 case ZigTypeIdNull:
5211 case ZigTypeIdMetaType:5258 case ZigTypeIdMetaType:
5212 case ZigTypeIdNamespace:
5213 case ZigTypeIdBoundFn:5259 case ZigTypeIdBoundFn:
5214 case ZigTypeIdArgTuple:5260 case ZigTypeIdArgTuple:
5215 return ReqCompTimeYes;5261 return ReqCompTimeYes;
...@@ -5797,8 +5843,6 @@ bool const_values_equal(CodeGen *g, ConstExprValue *a, ConstExprValue *b) {...@@ -5797,8 +5843,6 @@ bool const_values_equal(CodeGen *g, ConstExprValue *a, ConstExprValue *b) {
5797 }5843 }
5798 case ZigTypeIdErrorUnion:5844 case ZigTypeIdErrorUnion:
5799 zig_panic("TODO");5845 zig_panic("TODO");
5800 case ZigTypeIdNamespace:
5801 return a->data.x_import == b->data.x_import;
5802 case ZigTypeIdArgTuple:5846 case ZigTypeIdArgTuple:
5803 return a->data.x_arg_tuple.start_index == b->data.x_arg_tuple.start_index &&5847 return a->data.x_arg_tuple.start_index == b->data.x_arg_tuple.start_index &&
5804 a->data.x_arg_tuple.end_index == b->data.x_arg_tuple.end_index;5848 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) {...@@ -6072,16 +6116,6 @@ void render_const_value(CodeGen *g, Buf *buf, ConstExprValue *const_val) {
6072 }6116 }
6073 return;6117 return;
6074 }6118 }
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 }
6085 case ZigTypeIdBoundFn:6119 case ZigTypeIdBoundFn:
6086 {6120 {
6087 ZigFn *fn_entry = const_val->data.x_bound_fn.fn;6121 ZigFn *fn_entry = const_val->data.x_bound_fn.fn;
...@@ -6203,7 +6237,6 @@ uint32_t type_id_hash(TypeId x) {...@@ -6203,7 +6237,6 @@ uint32_t type_id_hash(TypeId x) {
6203 case ZigTypeIdEnum:6237 case ZigTypeIdEnum:
6204 case ZigTypeIdUnion:6238 case ZigTypeIdUnion:
6205 case ZigTypeIdFn:6239 case ZigTypeIdFn:
6206 case ZigTypeIdNamespace:
6207 case ZigTypeIdBoundFn:6240 case ZigTypeIdBoundFn:
6208 case ZigTypeIdArgTuple:6241 case ZigTypeIdArgTuple:
6209 case ZigTypeIdPromise:6242 case ZigTypeIdPromise:
...@@ -6252,7 +6285,6 @@ bool type_id_eql(TypeId a, TypeId b) {...@@ -6252,7 +6285,6 @@ bool type_id_eql(TypeId a, TypeId b) {
6252 case ZigTypeIdEnum:6285 case ZigTypeIdEnum:
6253 case ZigTypeIdUnion:6286 case ZigTypeIdUnion:
6254 case ZigTypeIdFn:6287 case ZigTypeIdFn:
6255 case ZigTypeIdNamespace:
6256 case ZigTypeIdBoundFn:6288 case ZigTypeIdBoundFn:
6257 case ZigTypeIdArgTuple:6289 case ZigTypeIdArgTuple:
6258 case ZigTypeIdOpaque:6290 case ZigTypeIdOpaque:
...@@ -6419,7 +6451,6 @@ static const ZigTypeId all_type_ids[] = {...@@ -6419,7 +6451,6 @@ static const ZigTypeId all_type_ids[] = {
6419 ZigTypeIdEnum,6451 ZigTypeIdEnum,
6420 ZigTypeIdUnion,6452 ZigTypeIdUnion,
6421 ZigTypeIdFn,6453 ZigTypeIdFn,
6422 ZigTypeIdNamespace,
6423 ZigTypeIdBoundFn,6454 ZigTypeIdBoundFn,
6424 ZigTypeIdArgTuple,6455 ZigTypeIdArgTuple,
6425 ZigTypeIdOpaque,6456 ZigTypeIdOpaque,
...@@ -6480,18 +6511,16 @@ size_t type_id_index(ZigType *entry) {...@@ -6480,18 +6511,16 @@ size_t type_id_index(ZigType *entry) {
6480 return 17;6511 return 17;
6481 case ZigTypeIdFn:6512 case ZigTypeIdFn:
6482 return 18;6513 return 18;
6483 case ZigTypeIdNamespace:
6484 return 19;
6485 case ZigTypeIdBoundFn:6514 case ZigTypeIdBoundFn:
6486 return 20;6515 return 19;
6487 case ZigTypeIdArgTuple:6516 case ZigTypeIdArgTuple:
6488 return 21;6517 return 20;
6489 case ZigTypeIdOpaque:6518 case ZigTypeIdOpaque:
6490 return 22;6519 return 21;
6491 case ZigTypeIdPromise:6520 case ZigTypeIdPromise:
6492 return 23;6521 return 22;
6493 case ZigTypeIdVector:6522 case ZigTypeIdVector:
6494 return 24;6523 return 23;
6495 }6524 }
6496 zig_unreachable();6525 zig_unreachable();
6497}6526}
...@@ -6538,8 +6567,6 @@ const char *type_id_name(ZigTypeId id) {...@@ -6538,8 +6567,6 @@ const char *type_id_name(ZigTypeId id) {
6538 return "Union";6567 return "Union";
6539 case ZigTypeIdFn:6568 case ZigTypeIdFn:
6540 return "Fn";6569 return "Fn";
6541 case ZigTypeIdNamespace:
6542 return "Namespace";
6543 case ZigTypeIdBoundFn:6570 case ZigTypeIdBoundFn:
6544 return "BoundFn";6571 return "BoundFn";
6545 case ZigTypeIdArgTuple:6572 case ZigTypeIdArgTuple:
...@@ -6619,8 +6646,8 @@ bool type_ptr_eql(const ZigType *a, const ZigType *b) {...@@ -6619,8 +6646,8 @@ bool type_ptr_eql(const ZigType *a, const ZigType *b) {
6619}6646}
66206647
6621ConstExprValue *get_builtin_value(CodeGen *codegen, const char *name) {6648ConstExprValue *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));6649 Tld *tld = get_container_scope(codegen->compile_var_import)->decl_table.get(buf_create_from_str(name));
6623 resolve_top_level_decl(codegen, tld, false, nullptr);6650 resolve_top_level_decl(codegen, tld, nullptr);
6624 assert(tld->id == TldIdVar);6651 assert(tld->id == TldIdVar);
6625 TldVar *tld_var = (TldVar *)tld;6652 TldVar *tld_var = (TldVar *)tld;
6626 ConstExprValue *var_value = tld_var->var->const_value;6653 ConstExprValue *var_value = tld_var->var->const_value;
...@@ -6812,3 +6839,32 @@ bool ptr_allows_addr_zero(ZigType *ptr_type) {...@@ -6812,3 +6839,32 @@ bool ptr_allows_addr_zero(ZigType *ptr_type) {
6812 }6839 }
6813 return false;6840 return false;
6814}6841}
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 @@...@@ -12,8 +12,9 @@
1212
13void semantic_analyze(CodeGen *g);13void semantic_analyze(CodeGen *g);
14ErrorMsg *add_node_error(CodeGen *g, AstNode *node, Buf *msg);14ErrorMsg *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);
16ErrorMsg *add_error_note(CodeGen *g, ErrorMsg *parent_msg, AstNode *node, Buf *msg);16ErrorMsg *add_error_note(CodeGen *g, ErrorMsg *parent_msg, AstNode *node, Buf *msg);
17void emit_error_notes_for_ref_stack(CodeGen *g, ErrorMsg *msg);
17ZigType *new_type_table_entry(ZigTypeId id);18ZigType *new_type_table_entry(ZigTypeId id);
18ZigType *get_pointer_to_type(CodeGen *g, ZigType *child_type, bool is_const);19ZigType *get_pointer_to_type(CodeGen *g, ZigType *child_type, bool is_const);
19ZigType *get_pointer_to_type_extra(CodeGen *g, ZigType *child_type, bool is_const,20ZigType *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);...@@ -29,11 +30,13 @@ ZigType *get_optional_type(CodeGen *g, ZigType *child_type);
29ZigType *get_array_type(CodeGen *g, ZigType *child_type, uint64_t array_size);30ZigType *get_array_type(CodeGen *g, ZigType *child_type, uint64_t array_size);
30ZigType *get_slice_type(CodeGen *g, ZigType *ptr_type);31ZigType *get_slice_type(CodeGen *g, ZigType *ptr_type);
31ZigType *get_partial_container_type(CodeGen *g, Scope *scope, ContainerKind kind,32ZigType *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);
33ZigType *get_smallest_unsigned_int_type(CodeGen *g, uint64_t x);36ZigType *get_smallest_unsigned_int_type(CodeGen *g, uint64_t x);
34ZigType *get_error_union_type(CodeGen *g, ZigType *err_set_type, ZigType *payload_type);37ZigType *get_error_union_type(CodeGen *g, ZigType *err_set_type, ZigType *payload_type);
35ZigType *get_bound_fn_type(CodeGen *g, ZigFn *fn_entry);38ZigType *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);
37ZigType *get_struct_type(CodeGen *g, const char *type_name, const char *field_names[],40ZigType *get_struct_type(CodeGen *g, const char *type_name, const char *field_names[],
38 ZigType *field_types[], size_t field_count);41 ZigType *field_types[], size_t field_count);
39ZigType *get_promise_type(CodeGen *g, ZigType *result_type);42ZigType *get_promise_type(CodeGen *g, ZigType *result_type);
...@@ -46,12 +49,18 @@ bool type_allowed_in_extern(CodeGen *g, ZigType *type_entry);...@@ -46,12 +49,18 @@ bool type_allowed_in_extern(CodeGen *g, ZigType *type_entry);
46bool ptr_allows_addr_zero(ZigType *ptr_type);49bool ptr_allows_addr_zero(ZigType *ptr_type);
47bool type_is_nonnull_ptr(ZigType *type);50bool type_is_nonnull_ptr(ZigType *type);
4851
49ImportTableEntry *add_source_file(CodeGen *g, PackageTableEntry *package, Buf *abs_full_path, Buf *source_code);52enum SourceKind {
5053 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
52ZigVar *find_variable(CodeGen *g, Scope *orig_context, Buf *name, ScopeFnDef **crossed_fndef_scope);60ZigVar *find_variable(CodeGen *g, Scope *orig_context, Buf *name, ScopeFnDef **crossed_fndef_scope);
53Tld *find_decl(CodeGen *g, Scope *scope, Buf *name);61Tld *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);
55bool type_is_codegen_pointer(ZigType *type);64bool type_is_codegen_pointer(ZigType *type);
5665
57ZigType *get_src_ptr_type(ZigType *type);66ZigType *get_src_ptr_type(ZigType *type);
...@@ -77,11 +86,11 @@ bool is_array_ref(ZigType *type_entry);...@@ -77,11 +86,11 @@ bool is_array_ref(ZigType *type_entry);
77bool is_container_ref(ZigType *type_entry);86bool is_container_ref(ZigType *type_entry);
78bool is_valid_vector_elem_type(ZigType *elem_type);87bool is_valid_vector_elem_type(ZigType *elem_type);
79void scan_decls(CodeGen *g, ScopeDecls *decls_scope, AstNode *node);88void scan_decls(CodeGen *g, ScopeDecls *decls_scope, AstNode *node);
80void scan_import(CodeGen *g, ImportTableEntry *import);
81void preview_use_decl(CodeGen *g, AstNode *node);89void preview_use_decl(CodeGen *g, AstNode *node);
82void resolve_use_decl(CodeGen *g, AstNode *node);90void resolve_use_decl(CodeGen *g, AstNode *node);
83ZigFn *scope_fn_entry(Scope *scope);91ZigFn *scope_fn_entry(Scope *scope);
84ImportTableEntry *get_scope_import(Scope *scope);92ZigPackage *scope_package(Scope *scope);
93ZigType *get_scope_import(Scope *scope);
85void init_tld(Tld *tld, TldId id, Buf *name, VisibMod visib_mod, AstNode *source_node, Scope *parent_scope);94void init_tld(Tld *tld, TldId id, Buf *name, VisibMod visib_mod, AstNode *source_node, Scope *parent_scope);
86ZigVar *add_variable(CodeGen *g, AstNode *source_node, Scope *parent_scope, Buf *name,95ZigVar *add_variable(CodeGen *g, AstNode *source_node, Scope *parent_scope, Buf *name,
87 bool is_const, ConstExprValue *init_value, Tld *src_tld, ZigType *var_type);96 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);...@@ -109,7 +118,6 @@ ScopeCImport *create_cimport_scope(CodeGen *g, AstNode *node, Scope *parent);
109ScopeLoop *create_loop_scope(CodeGen *g, AstNode *node, Scope *parent);118ScopeLoop *create_loop_scope(CodeGen *g, AstNode *node, Scope *parent);
110ScopeSuspend *create_suspend_scope(CodeGen *g, AstNode *node, Scope *parent);119ScopeSuspend *create_suspend_scope(CodeGen *g, AstNode *node, Scope *parent);
111ScopeFnDef *create_fndef_scope(CodeGen *g, AstNode *node, Scope *parent, ZigFn *fn_entry);120ScopeFnDef *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);
113Scope *create_comptime_scope(CodeGen *g, AstNode *node, Scope *parent);121Scope *create_comptime_scope(CodeGen *g, AstNode *node, Scope *parent);
114Scope *create_coro_prelude_scope(CodeGen *g, AstNode *node, Scope *parent);122Scope *create_coro_prelude_scope(CodeGen *g, AstNode *node, Scope *parent);
115Scope *create_runtime_scope(CodeGen *g, AstNode *node, Scope *parent, IrInstruction *is_comptime);123Scope *create_runtime_scope(CodeGen *g, AstNode *node, Scope *parent, IrInstruction *is_comptime);
...@@ -186,7 +194,7 @@ LinkLib *add_link_lib(CodeGen *codegen, Buf *lib);...@@ -186,7 +194,7 @@ LinkLib *add_link_lib(CodeGen *codegen, Buf *lib);
186194
187uint32_t get_abi_alignment(CodeGen *g, ZigType *type_entry);195uint32_t get_abi_alignment(CodeGen *g, ZigType *type_entry);
188ZigType *get_align_amt_type(CodeGen *g);196ZigType *get_align_amt_type(CodeGen *g);
189PackageTableEntry *new_anonymous_package(void);197ZigPackage *new_anonymous_package(void);
190198
191Buf *const_value_to_buffer(ConstExprValue *const_val);199Buf *const_value_to_buffer(ConstExprValue *const_val);
192void add_fn_export(CodeGen *g, ZigFn *fn_table_entry, Buf *symbol_name, GlobalLinkageId linkage, bool ccc);200void 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...@@ -232,4 +240,6 @@ Error ensure_const_val_repr(IrAnalyze *ira, CodeGen *codegen, AstNode *source_no
232 ConstExprValue *const_val, ZigType *wanted_type);240 ConstExprValue *const_val, ZigType *wanted_type);
233241
234void typecheck_panic_fn(CodeGen *g, TldFn *tld_fn, ZigFn *panic_fn);242void typecheck_panic_fn(CodeGen *g, TldFn *tld_fn, ZigFn *panic_fn);
243Buf *type_bare_name(ZigType *t);
244Buf *type_h_name(ZigType *t);
235#endif245#endif
src/buffer.hpp+3-3
...@@ -59,7 +59,7 @@ static inline void buf_deinit(Buf *buf) {...@@ -59,7 +59,7 @@ static inline void buf_deinit(Buf *buf) {
59static inline void buf_init_from_mem(Buf *buf, const char *ptr, size_t len) {59static inline void buf_init_from_mem(Buf *buf, const char *ptr, size_t len) {
60 assert(len != SIZE_MAX);60 assert(len != SIZE_MAX);
61 buf->list.resize(len + 1);61 buf->list.resize(len + 1);
62 safe_memcpy(buf_ptr(buf), ptr, len);62 memcpy(buf_ptr(buf), ptr, len);
63 buf->list.at(buf_len(buf)) = 0;63 buf->list.at(buf_len(buf)) = 0;
64}64}
6565
...@@ -98,7 +98,7 @@ static inline Buf *buf_slice(Buf *in_buf, size_t start, size_t end) {...@@ -98,7 +98,7 @@ static inline Buf *buf_slice(Buf *in_buf, size_t start, size_t end) {
98 assert(end <= buf_len(in_buf));98 assert(end <= buf_len(in_buf));
99 Buf *out_buf = allocate<Buf>(1);99 Buf *out_buf = allocate<Buf>(1);
100 out_buf->list.resize(end - start + 1);100 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);
102 out_buf->list.at(buf_len(out_buf)) = 0;102 out_buf->list.at(buf_len(out_buf)) = 0;
103 return out_buf;103 return out_buf;
104}104}
...@@ -108,7 +108,7 @@ static inline void buf_append_mem(Buf *buf, const char *mem, size_t mem_len) {...@@ -108,7 +108,7 @@ static inline void buf_append_mem(Buf *buf, const char *mem, size_t mem_len) {
108 assert(mem_len != SIZE_MAX);108 assert(mem_len != SIZE_MAX);
109 size_t old_len = buf_len(buf);109 size_t old_len = buf_len(buf);
110 buf_resize(buf, old_len + mem_len);110 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);
112 buf->list.at(buf_len(buf)) = 0;112 buf->list.at(buf_len(buf)) = 0;
113}113}
114114
src/codegen.cpp+68-66
...@@ -48,16 +48,17 @@ static void init_darwin_native(CodeGen *g) {...@@ -48,16 +48,17 @@ static void init_darwin_native(CodeGen *g) {
48 }48 }
49}49}
5050
51static PackageTableEntry *new_package(const char *root_src_dir, const char *root_src_path) {51static ZigPackage *new_package(const char *root_src_dir, const char *root_src_path, const char *pkg_path) {
52 PackageTableEntry *entry = allocate<PackageTableEntry>(1);52 ZigPackage *entry = allocate<ZigPackage>(1);
53 entry->package_table.init(4);53 entry->package_table.init(4);
54 buf_init_from_str(&entry->root_src_dir, root_src_dir);54 buf_init_from_str(&entry->root_src_dir, root_src_dir);
55 buf_init_from_str(&entry->root_src_path, root_src_path);55 buf_init_from_str(&entry->root_src_path, root_src_path);
56 buf_init_from_str(&entry->pkg_path, pkg_path);
56 return entry;57 return entry;
57}58}
5859
59PackageTableEntry *new_anonymous_package(void) {60ZigPackage *new_anonymous_package() {
60 return new_package("", "");61 return new_package("", "", "");
61}62}
6263
63static const char *symbols_that_llvm_depends_on[] = {64static const char *symbols_that_llvm_depends_on[] = {
...@@ -141,11 +142,11 @@ CodeGen *codegen_create(Buf *root_src_path, const ZigTarget *target, OutType out...@@ -141,11 +142,11 @@ CodeGen *codegen_create(Buf *root_src_path, const ZigTarget *target, OutType out
141 exit(1);142 exit(1);
142 }143 }
143144
144 g->root_package = new_package(buf_ptr(src_dir), buf_ptr(src_basename));145 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");146 g->std_package = new_package(buf_ptr(g->zig_std_dir), "index.zig", "std");
146 g->root_package->package_table.put(buf_create_from_str("std"), g->std_package);147 g->root_package->package_table.put(buf_create_from_str("std"), g->std_package);
147 } else {148 } else {
148 g->root_package = new_package(".", "");149 g->root_package = new_package(".", "", "");
149 }150 }
150151
151 g->zig_std_special_dir = buf_alloc();152 g->zig_std_special_dir = buf_alloc();
...@@ -621,7 +622,7 @@ static ZigLLVMDIScope *get_di_scope(CodeGen *g, Scope *scope) {...@@ -621,7 +622,7 @@ static ZigLLVMDIScope *get_di_scope(CodeGen *g, Scope *scope) {
621 if (scope->di_scope)622 if (scope->di_scope)
622 return scope->di_scope;623 return scope->di_scope;
623624
624 ImportTableEntry *import = get_scope_import(scope);625 ZigType *import = get_scope_import(scope);
625 switch (scope->id) {626 switch (scope->id) {
626 case ScopeIdCImport:627 case ScopeIdCImport:
627 zig_unreachable();628 zig_unreachable();
...@@ -644,7 +645,7 @@ static ZigLLVMDIScope *get_di_scope(CodeGen *g, Scope *scope) {...@@ -644,7 +645,7 @@ static ZigLLVMDIScope *get_di_scope(CodeGen *g, Scope *scope) {
644 assert(fn_di_scope != nullptr);645 assert(fn_di_scope != nullptr);
645 ZigLLVMDISubprogram *subprogram = ZigLLVMCreateFunction(g->dbuilder,646 ZigLLVMDISubprogram *subprogram = ZigLLVMCreateFunction(g->dbuilder,
646 fn_di_scope, buf_ptr(&fn_table_entry->symbol_name), "",647 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,
648 fn_table_entry->type_entry->data.fn.raw_di_type, is_internal_linkage,649 fn_table_entry->type_entry->data.fn.raw_di_type, is_internal_linkage,
649 is_definition, scope_line, flags, is_optimized, nullptr);650 is_definition, scope_line, flags, is_optimized, nullptr);
650651
...@@ -658,7 +659,7 @@ static ZigLLVMDIScope *get_di_scope(CodeGen *g, Scope *scope) {...@@ -658,7 +659,7 @@ static ZigLLVMDIScope *get_di_scope(CodeGen *g, Scope *scope) {
658 assert(decls_scope->container_type);659 assert(decls_scope->container_type);
659 scope->di_scope = ZigLLVMTypeToScope(decls_scope->container_type->di_type);660 scope->di_scope = ZigLLVMTypeToScope(decls_scope->container_type->di_type);
660 } else {661 } else {
661 scope->di_scope = ZigLLVMFileToScope(import->di_file);662 scope->di_scope = ZigLLVMFileToScope(import->data.structure.root_struct->di_file);
662 }663 }
663 return scope->di_scope;664 return scope->di_scope;
664 case ScopeIdBlock:665 case ScopeIdBlock:
...@@ -668,7 +669,7 @@ static ZigLLVMDIScope *get_di_scope(CodeGen *g, Scope *scope) {...@@ -668,7 +669,7 @@ static ZigLLVMDIScope *get_di_scope(CodeGen *g, Scope *scope) {
668 assert(scope->parent);669 assert(scope->parent);
669 ZigLLVMDILexicalBlock *di_block = ZigLLVMCreateLexicalBlock(g->dbuilder,670 ZigLLVMDILexicalBlock *di_block = ZigLLVMCreateLexicalBlock(g->dbuilder,
670 get_di_scope(g, scope->parent),671 get_di_scope(g, scope->parent),
671 import->di_file,672 import->data.structure.root_struct->di_file,
672 (unsigned)scope->source_node->line + 1,673 (unsigned)scope->source_node->line + 1,
673 (unsigned)scope->source_node->column + 1);674 (unsigned)scope->source_node->column + 1);
674 scope->di_scope = ZigLLVMLexicalBlockToScope(di_block);675 scope->di_scope = ZigLLVMLexicalBlockToScope(di_block);
...@@ -2197,7 +2198,7 @@ var_ok:...@@ -2197,7 +2198,7 @@ var_ok:
2197 if (dest_ty != nullptr && var->decl_node) {2198 if (dest_ty != nullptr && var->decl_node) {
2198 // arg index + 1 because the 0 index is return value2199 // arg index + 1 because the 0 index is return value
2199 var->di_loc_var = ZigLLVMCreateParameterVariable(g->dbuilder, get_di_scope(g, var->parent_scope),2200 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,
2201 (unsigned)(var->decl_node->line + 1),2202 (unsigned)(var->decl_node->line + 1),
2202 dest_ty->di_type, !g->strip_debug_symbols, 0, di_arg_index + 1);2203 dest_ty->di_type, !g->strip_debug_symbols, 0, di_arg_index + 1);
2203 }2204 }
...@@ -5801,7 +5802,6 @@ static LLVMValueRef pack_const_int(CodeGen *g, LLVMTypeRef big_int_type_ref, Con...@@ -5801,7 +5802,6 @@ static LLVMValueRef pack_const_int(CodeGen *g, LLVMTypeRef big_int_type_ref, Con
5801 case ZigTypeIdNull:5802 case ZigTypeIdNull:
5802 case ZigTypeIdErrorUnion:5803 case ZigTypeIdErrorUnion:
5803 case ZigTypeIdErrorSet:5804 case ZigTypeIdErrorSet:
5804 case ZigTypeIdNamespace:
5805 case ZigTypeIdBoundFn:5805 case ZigTypeIdBoundFn:
5806 case ZigTypeIdArgTuple:5806 case ZigTypeIdArgTuple:
5807 case ZigTypeIdVoid:5807 case ZigTypeIdVoid:
...@@ -6401,7 +6401,6 @@ static LLVMValueRef gen_const_val(CodeGen *g, ConstExprValue *const_val, const c...@@ -6401,7 +6401,6 @@ static LLVMValueRef gen_const_val(CodeGen *g, ConstExprValue *const_val, const c
6401 case ZigTypeIdComptimeInt:6401 case ZigTypeIdComptimeInt:
6402 case ZigTypeIdUndefined:6402 case ZigTypeIdUndefined:
6403 case ZigTypeIdNull:6403 case ZigTypeIdNull:
6404 case ZigTypeIdNamespace:
6405 case ZigTypeIdBoundFn:6404 case ZigTypeIdBoundFn:
6406 case ZigTypeIdArgTuple:6405 case ZigTypeIdArgTuple:
6407 case ZigTypeIdOpaque:6406 case ZigTypeIdOpaque:
...@@ -6507,12 +6506,12 @@ static void gen_global_var(CodeGen *g, ZigVar *var, LLVMValueRef init_val,...@@ -6507,12 +6506,12 @@ static void gen_global_var(CodeGen *g, ZigVar *var, LLVMValueRef init_val,
6507 assert(var->gen_is_const);6506 assert(var->gen_is_const);
6508 assert(type_entry);6507 assert(type_entry);
65096508
6510 ImportTableEntry *import = get_scope_import(var->parent_scope);6509 ZigType *import = get_scope_import(var->parent_scope);
6511 assert(import);6510 assert(import);
65126511
6513 bool is_local_to_unit = true;6512 bool is_local_to_unit = true;
6514 ZigLLVMCreateGlobalVariable(g->dbuilder, get_di_scope(g, var->parent_scope), buf_ptr(&var->name),6513 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,
6516 (unsigned)(var->decl_node->line + 1),6515 (unsigned)(var->decl_node->line + 1),
6517 type_entry->di_type, is_local_to_unit);6516 type_entry->di_type, is_local_to_unit);
65186517
...@@ -6768,7 +6767,7 @@ static void do_code_gen(CodeGen *g) {...@@ -6768,7 +6767,7 @@ static void do_code_gen(CodeGen *g) {
6768 *slot = build_alloca(g, slot_type, "", alignment_bytes);6767 *slot = build_alloca(g, slot_type, "", alignment_bytes);
6769 }6768 }
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
6773 unsigned gen_i_init = want_first_arg_sret(g, fn_type_id) ? 1 : 0;6772 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) {...@@ -6800,7 +6799,7 @@ static void do_code_gen(CodeGen *g) {
6800 var->value_ref = build_alloca(g, var->var_type, buf_ptr(&var->name), var->align_bytes);6799 var->value_ref = build_alloca(g, var->var_type, buf_ptr(&var->name), var->align_bytes);
68016800
6802 var->di_loc_var = ZigLLVMCreateAutoVariable(g->dbuilder, get_di_scope(g, var->parent_scope),6801 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),
6804 var->var_type->di_type, !g->strip_debug_symbols, 0);6803 var->var_type->di_type, !g->strip_debug_symbols, 0);
68056804
6806 } else if (is_c_abi) {6805 } else if (is_c_abi) {
...@@ -6824,7 +6823,7 @@ static void do_code_gen(CodeGen *g) {...@@ -6824,7 +6823,7 @@ static void do_code_gen(CodeGen *g) {
6824 }6823 }
6825 if (var->decl_node) {6824 if (var->decl_node) {
6826 var->di_loc_var = ZigLLVMCreateParameterVariable(g->dbuilder, get_di_scope(g, var->parent_scope),6825 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,
6828 (unsigned)(var->decl_node->line + 1),6827 (unsigned)(var->decl_node->line + 1),
6829 gen_type->di_type, !g->strip_debug_symbols, 0, (unsigned)(var->gen_arg_index + 1));6828 gen_type->di_type, !g->strip_debug_symbols, 0, (unsigned)(var->gen_arg_index + 1));
6830 }6829 }
...@@ -6972,12 +6971,6 @@ static void define_builtin_types(CodeGen *g) {...@@ -6972,12 +6971,6 @@ static void define_builtin_types(CodeGen *g) {
6972 entry->zero_bits = true;6971 entry->zero_bits = true;
6973 g->builtin_types.entry_invalid = entry;6972 g->builtin_types.entry_invalid = entry;
6974 }6973 }
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 }
6981 {6974 {
6982 ZigType *entry = new_type_table_entry(ZigTypeIdComptimeFloat);6975 ZigType *entry = new_type_table_entry(ZigTypeIdComptimeFloat);
6983 buf_init_from_str(&entry->name, "comptime_float");6976 buf_init_from_str(&entry->name, "comptime_float");
...@@ -7131,7 +7124,8 @@ static void define_builtin_types(CodeGen *g) {...@@ -7131,7 +7124,8 @@ static void define_builtin_types(CodeGen *g) {
7131 g->builtin_types.entry_i64 = get_int_type(g, true, 64);7124 g->builtin_types.entry_i64 = get_int_type(g, true, 64);
71327125
7133 {7126 {
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"));
7135 g->primitive_type_table.put(&g->builtin_types.entry_c_void->name, g->builtin_types.entry_c_void);7129 g->primitive_type_table.put(&g->builtin_types.entry_c_void->name, g->builtin_types.entry_c_void);
7136 }7130 }
71377131
...@@ -7471,7 +7465,6 @@ Buf *codegen_generate_builtin_source(CodeGen *g) {...@@ -7471,7 +7465,6 @@ Buf *codegen_generate_builtin_source(CodeGen *g) {
7471 " Enum: Enum,\n"7465 " Enum: Enum,\n"
7472 " Union: Union,\n"7466 " Union: Union,\n"
7473 " Fn: Fn,\n"7467 " Fn: Fn,\n"
7474 " Namespace: void,\n"
7475 " BoundFn: Fn,\n"7468 " BoundFn: Fn,\n"
7476 " ArgTuple: void,\n"7469 " ArgTuple: void,\n"
7477 " Opaque: void,\n"7470 " Opaque: void,\n"
...@@ -7752,12 +7745,12 @@ static Error define_builtin_compile_vars(CodeGen *g) {...@@ -7752,12 +7745,12 @@ static Error define_builtin_compile_vars(CodeGen *g) {
77527745
7753 assert(g->root_package);7746 assert(g->root_package);
7754 assert(g->std_package);7747 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");
7756 g->root_package->package_table.put(buf_create_from_str("builtin"), g->compile_var_package);7749 g->root_package->package_table.put(buf_create_from_str("builtin"), g->compile_var_package);
7757 g->std_package->package_table.put(buf_create_from_str("builtin"), g->compile_var_package);7750 g->std_package->package_table.put(buf_create_from_str("builtin"), g->compile_var_package);
7758 g->std_package->package_table.put(buf_create_from_str("std"), g->std_package);7751 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);7752 g->compile_var_import = add_source_file(g, g->compile_var_package, builtin_zig_path, contents,
7760 scan_import(g, g->compile_var_import);7753 SourceKindPkgMain);
77617754
7762 return ErrorNone;7755 return ErrorNone;
7763}7756}
...@@ -7949,17 +7942,20 @@ void codegen_translate_c(CodeGen *g, Buf *full_path) {...@@ -7949,17 +7942,20 @@ void codegen_translate_c(CodeGen *g, Buf *full_path) {
7949 Buf *src_dirname = buf_alloc();7942 Buf *src_dirname = buf_alloc();
7950 os_path_split(full_path, src_dirname, src_basename);7943 os_path_split(full_path, src_dirname, src_basename);
79517944
7952 ImportTableEntry *import = allocate<ImportTableEntry>(1);7945 Buf noextname = BUF_INIT;
7953 import->source_code = nullptr;7946 os_path_extname(src_basename, &noextname, nullptr);
7954 import->path = full_path;
7955 g->root_import = import;
7956 import->decls_scope = create_decls_scope(g, nullptr, nullptr, nullptr, import);
79577947
7958 detect_libc(g);7948 detect_libc(g);
79597949
7960 init(g);7950 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
7964 ZigList<ErrorMsg *> errors = {0};7960 ZigList<ErrorMsg *> errors = {0};
7965 Error err = parse_h_file(import, &errors, buf_ptr(full_path), g, nullptr);7961 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) {...@@ -7978,7 +7974,7 @@ void codegen_translate_c(CodeGen *g, Buf *full_path) {
7978 }7974 }
7979}7975}
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) {
7982 Buf *code_basename = buf_create_from_str(basename);7978 Buf *code_basename = buf_create_from_str(basename);
7983 Buf path_to_code_src = BUF_INIT;7979 Buf path_to_code_src = BUF_INIT;
7984 os_path_join(g->zig_std_special_dir, code_basename, &path_to_code_src);7980 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...@@ -7992,21 +7988,21 @@ static ImportTableEntry *add_special_code(CodeGen *g, PackageTableEntry *package
7992 zig_panic("unable to open '%s': %s\n", buf_ptr(&path_to_code_src), err_str(err));7988 zig_panic("unable to open '%s': %s\n", buf_ptr(&path_to_code_src), err_str(err));
7993 }7989 }
79947990
7995 return add_source_file(g, package, resolved_path, import_code);7991 return add_source_file(g, package, resolved_path, import_code, SourceKindPkgMain);
7996}7992}
79977993
7998static PackageTableEntry *create_bootstrap_pkg(CodeGen *g, PackageTableEntry *pkg_with_main) {7994static ZigPackage *create_bootstrap_pkg(CodeGen *g, ZigPackage *pkg_with_main) {
7999 PackageTableEntry *package = codegen_create_package(g, buf_ptr(g->zig_std_special_dir), "bootstrap.zig");7995 ZigPackage *package = codegen_create_package(g, buf_ptr(g->zig_std_special_dir), "bootstrap.zig", "std.special");
8000 package->package_table.put(buf_create_from_str("@root"), pkg_with_main);7996 package->package_table.put(buf_create_from_str("@root"), pkg_with_main);
8001 return package;7997 return package;
8002}7998}
80037999
8004static PackageTableEntry *create_test_runner_pkg(CodeGen *g) {8000static ZigPackage *create_test_runner_pkg(CodeGen *g) {
8005 return codegen_create_package(g, buf_ptr(g->zig_std_special_dir), "test_runner.zig");8001 return codegen_create_package(g, buf_ptr(g->zig_std_special_dir), "test_runner.zig", "std.special");
8006}8002}
80078003
8008static PackageTableEntry *create_panic_pkg(CodeGen *g) {8004static ZigPackage *create_panic_pkg(CodeGen *g) {
8009 return codegen_create_package(g, buf_ptr(g->zig_std_special_dir), "panic.zig");8005 return codegen_create_package(g, buf_ptr(g->zig_std_special_dir), "panic.zig", "std.special");
8010}8006}
80118007
8012static void create_test_compile_var_and_add_test_runner(CodeGen *g) {8008static void create_test_compile_var_and_add_test_runner(CodeGen *g) {
...@@ -8090,24 +8086,24 @@ static void gen_root_source(CodeGen *g) {...@@ -8090,24 +8086,24 @@ static void gen_root_source(CodeGen *g) {
8090 exit(1);8086 exit(1);
8091 }8087 }
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
8095 assert(g->root_out_name);8092 assert(g->root_out_name);
8096 assert(g->out_type != OutTypeUnknown);8093 assert(g->out_type != OutTypeUnknown);
80978094
8098 {8095 {
8099 // Zig has lazy top level definitions. Here we semantically analyze the panic function.8096 // Zig has lazy top level definitions. Here we semantically analyze the panic function.
8100 ImportTableEntry *import_with_panic;8097 ZigType *import_with_panic;
8101 if (g->have_pub_panic) {8098 if (g->have_pub_panic) {
8102 import_with_panic = g->root_import;8099 import_with_panic = g->root_import;
8103 } else {8100 } else {
8104 g->panic_package = create_panic_pkg(g);8101 g->panic_package = create_panic_pkg(g);
8105 import_with_panic = add_special_code(g, g->panic_package, "panic.zig");8102 import_with_panic = add_special_code(g, g->panic_package, "panic.zig");
8106 }8103 }
8107 scan_import(g, import_with_panic);8104 Tld *panic_tld = find_decl(g, &get_container_scope(import_with_panic)->base, buf_create_from_str("panic"));
8108 Tld *panic_tld = find_decl(g, &import_with_panic->decls_scope->base, buf_create_from_str("panic"));
8109 assert(panic_tld != nullptr);8105 assert(panic_tld != nullptr);
8110 resolve_top_level_decl(g, panic_tld, false, nullptr);8106 resolve_top_level_decl(g, panic_tld, nullptr);
8111 }8107 }
81128108
81138109
...@@ -8359,7 +8355,6 @@ static void prepend_c_type_to_decl_list(CodeGen *g, GenH *gen_h, ZigType *type_e...@@ -8359,7 +8355,6 @@ static void prepend_c_type_to_decl_list(CodeGen *g, GenH *gen_h, ZigType *type_e
8359 case ZigTypeIdComptimeInt:8355 case ZigTypeIdComptimeInt:
8360 case ZigTypeIdUndefined:8356 case ZigTypeIdUndefined:
8361 case ZigTypeIdNull:8357 case ZigTypeIdNull:
8362 case ZigTypeIdNamespace:
8363 case ZigTypeIdBoundFn:8358 case ZigTypeIdBoundFn:
8364 case ZigTypeIdArgTuple:8359 case ZigTypeIdArgTuple:
8365 case ZigTypeIdErrorUnion:8360 case ZigTypeIdErrorUnion:
...@@ -8507,19 +8502,19 @@ static void get_c_type(CodeGen *g, GenH *gen_h, ZigType *type_entry, Buf *out_bu...@@ -8507,19 +8502,19 @@ static void get_c_type(CodeGen *g, GenH *gen_h, ZigType *type_entry, Buf *out_bu
8507 case ZigTypeIdOpaque:8502 case ZigTypeIdOpaque:
8508 {8503 {
8509 buf_init_from_str(out_buf, "struct ");8504 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));
8511 return;8506 return;
8512 }8507 }
8513 case ZigTypeIdUnion:8508 case ZigTypeIdUnion:
8514 {8509 {
8515 buf_init_from_str(out_buf, "union ");8510 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));
8517 return;8512 return;
8518 }8513 }
8519 case ZigTypeIdEnum:8514 case ZigTypeIdEnum:
8520 {8515 {
8521 buf_init_from_str(out_buf, "enum ");8516 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));
8523 return;8518 return;
8524 }8519 }
8525 case ZigTypeIdArray:8520 case ZigTypeIdArray:
...@@ -8542,7 +8537,6 @@ static void get_c_type(CodeGen *g, GenH *gen_h, ZigType *type_entry, Buf *out_bu...@@ -8542,7 +8537,6 @@ static void get_c_type(CodeGen *g, GenH *gen_h, ZigType *type_entry, Buf *out_bu
8542 case ZigTypeIdInvalid:8537 case ZigTypeIdInvalid:
8543 case ZigTypeIdMetaType:8538 case ZigTypeIdMetaType:
8544 case ZigTypeIdBoundFn:8539 case ZigTypeIdBoundFn:
8545 case ZigTypeIdNamespace:
8546 case ZigTypeIdComptimeFloat:8540 case ZigTypeIdComptimeFloat:
8547 case ZigTypeIdComptimeInt:8541 case ZigTypeIdComptimeInt:
8548 case ZigTypeIdUndefined:8542 case ZigTypeIdUndefined:
...@@ -8615,10 +8609,17 @@ static void gen_h_file(CodeGen *g) {...@@ -8615,10 +8609,17 @@ static void gen_h_file(CodeGen *g) {
8615 Buf return_type_c = BUF_INIT;8609 Buf return_type_c = BUF_INIT;
8616 get_c_type(g, gen_h, fn_type_id->return_type, &return_type_c);8610 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 }
8618 buf_appendf(&h_buf, "%s %s %s(",8619 buf_appendf(&h_buf, "%s %s %s(",
8619 buf_ptr(export_macro),8620 buf_ptr(export_macro),
8620 buf_ptr(&return_type_c),8621 buf_ptr(&return_type_c),
8621 buf_ptr(&fn_table_entry->symbol_name));8622 buf_ptr(symbol_name));
86228623
8623 Buf param_type_c = BUF_INIT;8624 Buf param_type_c = BUF_INIT;
8624 if (fn_type_id->param_count > 0) {8625 if (fn_type_id->param_count > 0) {
...@@ -8694,7 +8695,6 @@ static void gen_h_file(CodeGen *g) {...@@ -8694,7 +8695,6 @@ static void gen_h_file(CodeGen *g) {
8694 case ZigTypeIdNull:8695 case ZigTypeIdNull:
8695 case ZigTypeIdErrorUnion:8696 case ZigTypeIdErrorUnion:
8696 case ZigTypeIdErrorSet:8697 case ZigTypeIdErrorSet:
8697 case ZigTypeIdNamespace:
8698 case ZigTypeIdBoundFn:8698 case ZigTypeIdBoundFn:
8699 case ZigTypeIdArgTuple:8699 case ZigTypeIdArgTuple:
8700 case ZigTypeIdOptional:8700 case ZigTypeIdOptional:
...@@ -8704,7 +8704,7 @@ static void gen_h_file(CodeGen *g) {...@@ -8704,7 +8704,7 @@ static void gen_h_file(CodeGen *g) {
8704 zig_unreachable();8704 zig_unreachable();
8705 case ZigTypeIdEnum:8705 case ZigTypeIdEnum:
8706 if (type_entry->data.enumeration.layout == ContainerLayoutExtern) {8706 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)));
8708 for (uint32_t field_i = 0; field_i < type_entry->data.enumeration.src_field_count; field_i += 1) {8708 for (uint32_t field_i = 0; field_i < type_entry->data.enumeration.src_field_count; field_i += 1) {
8709 TypeEnumField *enum_field = &type_entry->data.enumeration.fields[field_i];8709 TypeEnumField *enum_field = &type_entry->data.enumeration.fields[field_i];
8710 Buf *value_buf = buf_alloc();8710 Buf *value_buf = buf_alloc();
...@@ -8717,12 +8717,12 @@ static void gen_h_file(CodeGen *g) {...@@ -8717,12 +8717,12 @@ static void gen_h_file(CodeGen *g) {
8717 }8717 }
8718 fprintf(out_h, "};\n\n");8718 fprintf(out_h, "};\n\n");
8719 } else {8719 } 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)));
8721 }8721 }
8722 break;8722 break;
8723 case ZigTypeIdStruct:8723 case ZigTypeIdStruct:
8724 if (type_entry->data.structure.layout == ContainerLayoutExtern) {8724 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)));
8726 for (uint32_t field_i = 0; field_i < type_entry->data.structure.src_field_count; field_i += 1) {8726 for (uint32_t field_i = 0; field_i < type_entry->data.structure.src_field_count; field_i += 1) {
8727 TypeStructField *struct_field = &type_entry->data.structure.fields[field_i];8727 TypeStructField *struct_field = &type_entry->data.structure.fields[field_i];
87288728
...@@ -8740,12 +8740,12 @@ static void gen_h_file(CodeGen *g) {...@@ -8740,12 +8740,12 @@ static void gen_h_file(CodeGen *g) {
8740 }8740 }
8741 fprintf(out_h, "};\n\n");8741 fprintf(out_h, "};\n\n");
8742 } else {8742 } 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)));
8744 }8744 }
8745 break;8745 break;
8746 case ZigTypeIdUnion:8746 case ZigTypeIdUnion:
8747 if (type_entry->data.unionation.layout == ContainerLayoutExtern) {8747 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)));
8749 for (uint32_t field_i = 0; field_i < type_entry->data.unionation.src_field_count; field_i += 1) {8749 for (uint32_t field_i = 0; field_i < type_entry->data.unionation.src_field_count; field_i += 1) {
8750 TypeUnionField *union_field = &type_entry->data.unionation.fields[field_i];8750 TypeUnionField *union_field = &type_entry->data.unionation.fields[field_i];
87518751
...@@ -8755,11 +8755,11 @@ static void gen_h_file(CodeGen *g) {...@@ -8755,11 +8755,11 @@ static void gen_h_file(CodeGen *g) {
8755 }8755 }
8756 fprintf(out_h, "};\n\n");8756 fprintf(out_h, "};\n\n");
8757 } else {8757 } 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)));
8759 }8759 }
8760 break;8760 break;
8761 case ZigTypeIdOpaque:8761 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)));
8763 break;8763 break;
8764 }8764 }
8765 }8765 }
...@@ -8793,7 +8793,7 @@ void codegen_add_time_event(CodeGen *g, const char *name) {...@@ -8793,7 +8793,7 @@ void codegen_add_time_event(CodeGen *g, const char *name) {
8793 g->timing_events.append({os_get_time(), name});8793 g->timing_events.append({os_get_time(), name});
8794}8794}
87958795
8796static void add_cache_pkg(CodeGen *g, CacheHash *ch, PackageTableEntry *pkg) {8796static void add_cache_pkg(CodeGen *g, CacheHash *ch, ZigPackage *pkg) {
8797 if (buf_len(&pkg->root_src_path) == 0)8797 if (buf_len(&pkg->root_src_path) == 0)
8798 return;8798 return;
87998799
...@@ -9047,9 +9047,11 @@ void codegen_build_and_link(CodeGen *g) {...@@ -9047,9 +9047,11 @@ void codegen_build_and_link(CodeGen *g) {
9047 codegen_add_time_event(g, "Done");9047 codegen_add_time_event(g, "Done");
9048}9048}
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{
9051 init(g);9053 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);
9053 if (g->std_package != nullptr) {9055 if (g->std_package != nullptr) {
9054 assert(g->compile_var_package != nullptr);9056 assert(g->compile_var_package != nullptr);
9055 pkg->package_table.put(buf_create_from_str("std"), g->std_package);9057 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);...@@ -48,7 +48,8 @@ void codegen_print_timing_report(CodeGen *g, FILE *f);
48void codegen_link(CodeGen *g);48void codegen_link(CodeGen *g);
49void codegen_build_and_link(CodeGen *g);49void 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);
52void codegen_add_assembly(CodeGen *g, Buf *path);53void codegen_add_assembly(CodeGen *g, Buf *path);
53void codegen_add_object(CodeGen *g, Buf *object_path);54void 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) {...@@ -258,7 +258,6 @@ static bool types_have_same_zig_comptime_repr(ZigType *a, ZigType *b) {
258 case ZigTypeIdPointer:258 case ZigTypeIdPointer:
259 case ZigTypeIdUndefined:259 case ZigTypeIdUndefined:
260 case ZigTypeIdNull:260 case ZigTypeIdNull:
261 case ZigTypeIdNamespace:
262 case ZigTypeIdBoundFn:261 case ZigTypeIdBoundFn:
263 case ZigTypeIdErrorSet:262 case ZigTypeIdErrorSet:
264 case ZigTypeIdOpaque:263 case ZigTypeIdOpaque:
...@@ -1123,11 +1122,11 @@ static IrInstruction *ir_create_const_fn(IrBuilder *irb, Scope *scope, AstNode *...@@ -1123,11 +1122,11 @@ static IrInstruction *ir_create_const_fn(IrBuilder *irb, Scope *scope, AstNode *
1123 return &const_instruction->base;1122 return &const_instruction->base;
1124}1123}
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) {
1127 IrInstructionConst *const_instruction = ir_build_instruction<IrInstructionConst>(irb, scope, source_node);1126 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;
1129 const_instruction->base.value.special = ConstValSpecialStatic;1128 const_instruction->base.value.special = ConstValSpecialStatic;
1130 const_instruction->base.value.data.x_import = import;1129 const_instruction->base.value.data.x_type = import;
1131 return &const_instruction->base;1130 return &const_instruction->base;
1132}1131}
11331132
...@@ -3824,7 +3823,7 @@ static IrInstruction *ir_gen_symbol(IrBuilder *irb, Scope *scope, AstNode *node,...@@ -3824,7 +3823,7 @@ static IrInstruction *ir_gen_symbol(IrBuilder *irb, Scope *scope, AstNode *node,
3824 if (tld)3823 if (tld)
3825 return ir_build_decl_ref(irb, scope, node, tld, lval);3824 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) {
3828 // skip the error message since we had a failing import in this file3827 // skip the error message since we had a failing import in this file
3829 // if an import breaks we don't need redundant undeclared identifier errors3828 // if an import breaks we don't need redundant undeclared identifier errors
3830 return irb->codegen->invalid_instruction;3829 return irb->codegen->invalid_instruction;
...@@ -6609,20 +6608,32 @@ static bool render_instance_name_recursive(CodeGen *codegen, Buf *name, Scope *o...@@ -6609,20 +6608,32 @@ static bool render_instance_name_recursive(CodeGen *codegen, Buf *name, Scope *o
6609 return true;6608 return true;
6610}6609}
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{
6613 if (exec->name) {6614 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;
6615 } else if (exec->name_fn != nullptr) {6621 } else if (exec->name_fn != nullptr) {
6616 Buf *name = buf_alloc();6622 Buf *name = buf_alloc();
6617 buf_append_buf(name, &exec->name_fn->symbol_name);6623 buf_append_buf(name, &exec->name_fn->symbol_name);
6618 buf_appendf(name, "(");6624 buf_appendf(name, "(");
6619 render_instance_name_recursive(codegen, name, &exec->name_fn->fndef_scope->base, exec->begin_scope);6625 render_instance_name_recursive(codegen, name, &exec->name_fn->fndef_scope->base, exec->begin_scope);
6620 buf_appendf(name, ")");6626 buf_appendf(name, ")");
6627 buf_init_from_buf(out_bare_name, name);
6621 return name;6628 return name;
6622 } else {6629 } else {
6623 //Note: C-imports do not have valid location information6630 ZigType *import = get_scope_import(scope);
6624 return buf_sprintf("(anonymous %s at %s:%" ZIG_PRI_usize ":%" ZIG_PRI_usize ")", kind_name,6631 Buf *namespace_name = buf_create_from_buf(&import->name);
6625 (source_node->owner->path != nullptr) ? buf_ptr(source_node->owner->path) : "(null)", source_node->line + 1, source_node->column + 1);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;
6626 }6637 }
6627}6638}
66286639
...@@ -6630,24 +6641,23 @@ static IrInstruction *ir_gen_container_decl(IrBuilder *irb, Scope *parent_scope,...@@ -6630,24 +6641,23 @@ static IrInstruction *ir_gen_container_decl(IrBuilder *irb, Scope *parent_scope,
6630 assert(node->type == NodeTypeContainerDecl);6641 assert(node->type == NodeTypeContainerDecl);
66316642
6632 ContainerKind kind = node->data.container_decl.kind;6643 ContainerKind kind = node->data.container_decl.kind;
6633 Buf *name = get_anon_type_name(irb->codegen, irb->exec, container_string(kind), node);6644 Buf *bare_name = buf_alloc();
66346645 Buf *name = get_anon_type_name(irb->codegen, irb->exec, container_string(kind), parent_scope, node, bare_name);
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);
66386646
6639 ContainerLayout layout = node->data.container_decl.layout;6647 ContainerLayout layout = node->data.container_decl.layout;
6640 ZigType *container_type = get_partial_container_type(irb->codegen, parent_scope,6648 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);
6642 ScopeDecls *child_scope = get_container_scope(container_type);6650 ScopeDecls *child_scope = get_container_scope(container_type);
66436651
6644 tld_container->type_entry = container_type;
6645 tld_container->decls_scope = child_scope;
6646
6647 for (size_t i = 0; i < node->data.container_decl.decls.length; i += 1) {6652 for (size_t i = 0; i < node->data.container_decl.decls.length; i += 1) {
6648 AstNode *child_node = node->data.container_decl.decls.at(i);6653 AstNode *child_node = node->data.container_decl.decls.at(i);
6649 scan_decls(irb->codegen, child_scope, child_node);6654 scan_decls(irb->codegen, child_scope, child_node);
6650 }6655 }
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;
6651 irb->codegen->resolve_queue.append(&tld_container->base);6661 irb->codegen->resolve_queue.append(&tld_container->base);
66526662
6653 // Add this to the list to mark as invalid if analyzing this exec fails.6663 // 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...@@ -6732,7 +6742,8 @@ static IrInstruction *ir_gen_err_set_decl(IrBuilder *irb, Scope *parent_scope, A
67326742
6733 uint32_t err_count = node->data.err_set_decl.decls.length;6743 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);
6736 ZigType *err_set_type = new_type_table_entry(ZigTypeIdErrorSet);6747 ZigType *err_set_type = new_type_table_entry(ZigTypeIdErrorSet);
6737 buf_init_from_buf(&err_set_type->name, type_name);6748 buf_init_from_buf(&err_set_type->name, type_name);
6738 err_set_type->data.error_set.err_count = err_count;6749 err_set_type->data.error_set.err_count = err_count;
...@@ -12065,7 +12076,6 @@ static IrInstruction *ir_analyze_bin_op_cmp(IrAnalyze *ira, IrInstructionBinOp *...@@ -12065,7 +12076,6 @@ static IrInstruction *ir_analyze_bin_op_cmp(IrAnalyze *ira, IrInstructionBinOp *
12065 case ZigTypeIdErrorSet:12076 case ZigTypeIdErrorSet:
12066 case ZigTypeIdFn:12077 case ZigTypeIdFn:
12067 case ZigTypeIdOpaque:12078 case ZigTypeIdOpaque:
12068 case ZigTypeIdNamespace:
12069 case ZigTypeIdBoundFn:12079 case ZigTypeIdBoundFn:
12070 case ZigTypeIdArgTuple:12080 case ZigTypeIdArgTuple:
12071 case ZigTypeIdPromise:12081 case ZigTypeIdPromise:
...@@ -13407,7 +13417,6 @@ static IrInstruction *ir_analyze_instruction_export(IrAnalyze *ira, IrInstructio...@@ -13407,7 +13417,6 @@ static IrInstruction *ir_analyze_instruction_export(IrAnalyze *ira, IrInstructio
13407 case ZigTypeIdOptional:13417 case ZigTypeIdOptional:
13408 case ZigTypeIdErrorUnion:13418 case ZigTypeIdErrorUnion:
13409 case ZigTypeIdErrorSet:13419 case ZigTypeIdErrorSet:
13410 case ZigTypeIdNamespace:
13411 case ZigTypeIdBoundFn:13420 case ZigTypeIdBoundFn:
13412 case ZigTypeIdArgTuple:13421 case ZigTypeIdArgTuple:
13413 case ZigTypeIdOpaque:13422 case ZigTypeIdOpaque:
...@@ -13432,7 +13441,6 @@ static IrInstruction *ir_analyze_instruction_export(IrAnalyze *ira, IrInstructio...@@ -13432,7 +13441,6 @@ static IrInstruction *ir_analyze_instruction_export(IrAnalyze *ira, IrInstructio
13432 case ZigTypeIdErrorSet:13441 case ZigTypeIdErrorSet:
13433 case ZigTypeIdVector:13442 case ZigTypeIdVector:
13434 zig_panic("TODO export const value of type %s", buf_ptr(&target->value.type->name));13443 zig_panic("TODO export const value of type %s", buf_ptr(&target->value.type->name));
13435 case ZigTypeIdNamespace:
13436 case ZigTypeIdBoundFn:13444 case ZigTypeIdBoundFn:
13437 case ZigTypeIdArgTuple:13445 case ZigTypeIdArgTuple:
13438 case ZigTypeIdOpaque:13446 case ZigTypeIdOpaque:
...@@ -14616,7 +14624,6 @@ static IrInstruction *ir_analyze_maybe(IrAnalyze *ira, IrInstructionUnOp *un_op_...@@ -14616,7 +14624,6 @@ static IrInstruction *ir_analyze_maybe(IrAnalyze *ira, IrInstructionUnOp *un_op_
14616 case ZigTypeIdEnum:14624 case ZigTypeIdEnum:
14617 case ZigTypeIdUnion:14625 case ZigTypeIdUnion:
14618 case ZigTypeIdFn:14626 case ZigTypeIdFn:
14619 case ZigTypeIdNamespace:
14620 case ZigTypeIdBoundFn:14627 case ZigTypeIdBoundFn:
14621 case ZigTypeIdArgTuple:14628 case ZigTypeIdArgTuple:
14622 case ZigTypeIdPromise:14629 case ZigTypeIdPromise:
...@@ -15368,7 +15375,7 @@ static IrInstruction *ir_analyze_container_member_access_inner(IrAnalyze *ira,...@@ -15368,7 +15375,7 @@ static IrInstruction *ir_analyze_container_member_access_inner(IrAnalyze *ira,
15368 auto entry = container_scope->decl_table.maybe_get(field_name);15375 auto entry = container_scope->decl_table.maybe_get(field_name);
15369 Tld *tld = entry ? entry->value : nullptr;15376 Tld *tld = entry ? entry->value : nullptr;
15370 if (tld && tld->id == TldIdFn) {15377 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);
15372 if (tld->resolution == TldResolutionInvalid)15379 if (tld->resolution == TldResolutionInvalid)
15373 return ira->codegen->invalid_instruction;15380 return ira->codegen->invalid_instruction;
15374 TldFn *tld_fn = (TldFn *)tld;15381 TldFn *tld_fn = (TldFn *)tld;
...@@ -15557,8 +15564,7 @@ static void add_link_lib_symbol(IrAnalyze *ira, Buf *lib_name, Buf *symbol_name,...@@ -15557,8 +15564,7 @@ static void add_link_lib_symbol(IrAnalyze *ira, Buf *lib_name, Buf *symbol_name,
1555715564
1555815565
15559static IrInstruction *ir_analyze_decl_ref(IrAnalyze *ira, IrInstruction *source_instruction, Tld *tld) {15566static IrInstruction *ir_analyze_decl_ref(IrAnalyze *ira, IrInstruction *source_instruction, Tld *tld) {
15560 bool pointer_only = false;15567 resolve_top_level_decl(ira->codegen, tld, source_instruction->source_node);
15561 resolve_top_level_decl(ira->codegen, tld, pointer_only, source_instruction->source_node);
15562 if (tld->resolution == TldResolutionInvalid)15568 if (tld->resolution == TldResolutionInvalid)
15563 return ira->codegen->invalid_instruction;15569 return ira->codegen->invalid_instruction;
1556415570
...@@ -15735,12 +15741,17 @@ static IrInstruction *ir_analyze_instruction_field_ptr(IrAnalyze *ira, IrInstruc...@@ -15735,12 +15741,17 @@ static IrInstruction *ir_analyze_instruction_field_ptr(IrAnalyze *ira, IrInstruc
15735 }15741 }
15736 }15742 }
15737 ScopeDecls *container_scope = get_container_scope(child_type);15743 ScopeDecls *container_scope = get_container_scope(child_type);
15738 if (container_scope != nullptr) {15744 Tld *tld = find_container_decl(ira->codegen, container_scope, field_name);
15739 auto entry = container_scope->decl_table.maybe_get(field_name);15745 if (tld) {
15740 Tld *tld = entry ? entry->value : nullptr;15746 if (tld->visib_mod == VisibModPrivate &&
15741 if (tld) {15747 tld->import != get_scope_import(field_ptr_instruction->base.scope))
15742 return ir_analyze_decl_ref(ira, &field_ptr_instruction->base, tld);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;
15743 }15753 }
15754 return ir_analyze_decl_ref(ira, &field_ptr_instruction->base, tld);
15744 }15755 }
15745 if (child_type->id == ZigTypeIdUnion &&15756 if (child_type->id == ZigTypeIdUnion &&
15746 (child_type->data.unionation.decl_node->data.container_decl.init_arg_expr != nullptr ||15757 (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...@@ -15758,9 +15769,11 @@ static IrInstruction *ir_analyze_instruction_field_ptr(IrAnalyze *ira, IrInstruc
15758 ConstPtrMutComptimeConst, ptr_is_const, ptr_is_volatile, 0);15769 ConstPtrMutComptimeConst, ptr_is_const, ptr_is_volatile, 0);
15759 }15770 }
15760 }15771 }
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)));
15761 ir_add_error(ira, &field_ptr_instruction->base,15774 ir_add_error(ira, &field_ptr_instruction->base,
15762 buf_sprintf("container '%s' has no member called '%s'",15775 buf_sprintf("%s has no member called '%s'",
15763 buf_ptr(&child_type->name), buf_ptr(field_name)));15776 container_name, buf_ptr(field_name)));
15764 return ira->codegen->invalid_instruction;15777 return ira->codegen->invalid_instruction;
15765 } else if (child_type->id == ZigTypeIdErrorSet) {15778 } else if (child_type->id == ZigTypeIdErrorSet) {
15766 ErrorTableEntry *err_entry;15779 ErrorTableEntry *err_entry;
...@@ -15971,37 +15984,6 @@ static IrInstruction *ir_analyze_instruction_field_ptr(IrAnalyze *ira, IrInstruc...@@ -15971,37 +15984,6 @@ static IrInstruction *ir_analyze_instruction_field_ptr(IrAnalyze *ira, IrInstruc
15971 buf_sprintf("type '%s' does not support field access", buf_ptr(&child_type->name)));15984 buf_sprintf("type '%s' does not support field access", buf_ptr(&child_type->name)));
15972 return ira->codegen->invalid_instruction;15985 return ira->codegen->invalid_instruction;
15973 }15986 }
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 }
16005 } else {15987 } else {
16006 ir_add_error_node(ira, field_ptr_instruction->base.source_node,15988 ir_add_error_node(ira, field_ptr_instruction->base.source_node,
16007 buf_sprintf("type '%s' does not support field access", buf_ptr(&container_type->name)));15989 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,...@@ -16281,7 +16263,6 @@ static IrInstruction *ir_analyze_instruction_slice_type(IrAnalyze *ira,
16281 case ZigTypeIdEnum:16263 case ZigTypeIdEnum:
16282 case ZigTypeIdUnion:16264 case ZigTypeIdUnion:
16283 case ZigTypeIdFn:16265 case ZigTypeIdFn:
16284 case ZigTypeIdNamespace:
16285 case ZigTypeIdBoundFn:16266 case ZigTypeIdBoundFn:
16286 case ZigTypeIdPromise:16267 case ZigTypeIdPromise:
16287 case ZigTypeIdVector:16268 case ZigTypeIdVector:
...@@ -16402,7 +16383,6 @@ static IrInstruction *ir_analyze_instruction_array_type(IrAnalyze *ira,...@@ -16402,7 +16383,6 @@ static IrInstruction *ir_analyze_instruction_array_type(IrAnalyze *ira,
16402 case ZigTypeIdEnum:16383 case ZigTypeIdEnum:
16403 case ZigTypeIdUnion:16384 case ZigTypeIdUnion:
16404 case ZigTypeIdFn:16385 case ZigTypeIdFn:
16405 case ZigTypeIdNamespace:
16406 case ZigTypeIdBoundFn:16386 case ZigTypeIdBoundFn:
16407 case ZigTypeIdPromise:16387 case ZigTypeIdPromise:
16408 case ZigTypeIdVector:16388 case ZigTypeIdVector:
...@@ -16452,7 +16432,6 @@ static IrInstruction *ir_analyze_instruction_size_of(IrAnalyze *ira,...@@ -16452,7 +16432,6 @@ static IrInstruction *ir_analyze_instruction_size_of(IrAnalyze *ira,
16452 case ZigTypeIdComptimeInt:16432 case ZigTypeIdComptimeInt:
16453 case ZigTypeIdBoundFn:16433 case ZigTypeIdBoundFn:
16454 case ZigTypeIdMetaType:16434 case ZigTypeIdMetaType:
16455 case ZigTypeIdNamespace:
16456 case ZigTypeIdArgTuple:16435 case ZigTypeIdArgTuple:
16457 case ZigTypeIdOpaque:16436 case ZigTypeIdOpaque:
16458 ir_add_error_node(ira, size_of_instruction->base.source_node,16437 ir_add_error_node(ira, size_of_instruction->base.source_node,
...@@ -16860,7 +16839,6 @@ static IrInstruction *ir_analyze_instruction_switch_target(IrAnalyze *ira,...@@ -16860,7 +16839,6 @@ static IrInstruction *ir_analyze_instruction_switch_target(IrAnalyze *ira,
16860 case ZigTypeIdPointer:16839 case ZigTypeIdPointer:
16861 case ZigTypeIdPromise:16840 case ZigTypeIdPromise:
16862 case ZigTypeIdFn:16841 case ZigTypeIdFn:
16863 case ZigTypeIdNamespace:
16864 case ZigTypeIdErrorSet: {16842 case ZigTypeIdErrorSet: {
16865 if (pointee_val) {16843 if (pointee_val) {
16866 IrInstruction *result = ir_const(ira, &switch_target_instruction->base, nullptr);16844 IrInstruction *result = ir_const(ira, &switch_target_instruction->base, nullptr);
...@@ -17009,25 +16987,29 @@ static IrInstruction *ir_analyze_instruction_import(IrAnalyze *ira, IrInstructio...@@ -17009,25 +16987,29 @@ static IrInstruction *ir_analyze_instruction_import(IrAnalyze *ira, IrInstructio
17009 return ira->codegen->invalid_instruction;16987 return ira->codegen->invalid_instruction;
1701016988
17011 AstNode *source_node = import_instruction->base.source_node;16989 AstNode *source_node = import_instruction->base.source_node;
17012 ImportTableEntry *import = source_node->owner;16990 ZigType *import = source_node->owner;
1701316991
17014 Buf *import_target_path;16992 Buf *import_target_path;
17015 Buf *search_dir;16993 Buf *search_dir;
17016 assert(import->package);16994 assert(import->data.structure.root_struct->package);
17017 PackageTableEntry *target_package;16995 ZigPackage *target_package;
17018 auto package_entry = import->package->package_table.maybe_get(import_target_str);16996 auto package_entry = import->data.structure.root_struct->package->package_table.maybe_get(import_target_str);
16997 SourceKind source_kind;
17019 if (package_entry) {16998 if (package_entry) {
17020 target_package = package_entry->value;16999 target_package = package_entry->value;
17021 import_target_path = &target_package->root_src_path;17000 import_target_path = &target_package->root_src_path;
17022 search_dir = &target_package->root_src_dir;17001 search_dir = &target_package->root_src_dir;
17002 source_kind = SourceKindPkgMain;
17023 } else {17003 } else {
17024 // try it as a filename17004 // try it as a filename
17025 target_package = import->package;17005 target_package = import->data.structure.root_struct->package;
17026 import_target_path = import_target_str;17006 import_target_path = import_target_str;
1702717007
17028 // search relative to importing file17008 // search relative to importing file
17029 search_dir = buf_alloc();17009 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;
17031 }17013 }
1703217014
17033 Buf full_path = BUF_INIT;17015 Buf full_path = BUF_INIT;
...@@ -17041,10 +17023,7 @@ static IrInstruction *ir_analyze_instruction_import(IrAnalyze *ira, IrInstructio...@@ -17041,10 +17023,7 @@ static IrInstruction *ir_analyze_instruction_import(IrAnalyze *ira, IrInstructio
1704117023
17042 auto import_entry = ira->codegen->import_table.maybe_get(resolved_path);17024 auto import_entry = ira->codegen->import_table.maybe_get(resolved_path);
17043 if (import_entry) {17025 if (import_entry) {
17044 IrInstruction *result = ir_const(ira, &import_instruction->base,17026 return ir_const_type(ira, &import_instruction->base, import_entry->value);
17045 ira->codegen->builtin_types.entry_namespace);
17046 result->value.data.x_import = import_entry->value;
17047 return result;
17048 }17027 }
1704917028
17050 if ((err = file_fetch(ira->codegen, resolved_path, import_code))) {17029 if ((err = file_fetch(ira->codegen, resolved_path, import_code))) {
...@@ -17059,13 +17038,9 @@ static IrInstruction *ir_analyze_instruction_import(IrAnalyze *ira, IrInstructio...@@ -17059,13 +17038,9 @@ static IrInstruction *ir_analyze_instruction_import(IrAnalyze *ira, IrInstructio
17059 }17038 }
17060 }17039 }
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);17043 return ir_const_type(ira, &import_instruction->base, 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;
17069}17044}
1707017045
17071static IrInstruction *ir_analyze_instruction_ref(IrAnalyze *ira, IrInstructionRef *ref_instruction) {17046static IrInstruction *ir_analyze_instruction_ref(IrAnalyze *ira, IrInstructionRef *ref_instruction) {
...@@ -17398,17 +17373,7 @@ static IrInstruction *ir_analyze_instruction_compile_err(IrAnalyze *ira,...@@ -17398,17 +17373,7 @@ static IrInstruction *ir_analyze_instruction_compile_err(IrAnalyze *ira,
17398 return ira->codegen->invalid_instruction;17373 return ira->codegen->invalid_instruction;
1739917374
17400 ErrorMsg *msg = ir_add_error(ira, &instruction->base, msg_buf);17375 ErrorMsg *msg = ir_add_error(ira, &instruction->base, msg_buf);
17401 size_t i = ira->codegen->tld_ref_source_node_stack.length;17376 emit_error_notes_for_ref_stack(ira->codegen, msg);
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 }
1741217377
17413 return ira->codegen->invalid_instruction;17378 return ira->codegen->invalid_instruction;
17414}17379}
...@@ -17665,6 +17630,12 @@ static IrInstruction *ir_analyze_instruction_bit_offset_of(IrAnalyze *ira,...@@ -17665,6 +17630,12 @@ static IrInstruction *ir_analyze_instruction_bit_offset_of(IrAnalyze *ira,
17665 return ir_const_unsigned(ira, &instruction->base, bit_offset);17630 return ir_const_unsigned(ira, &instruction->base, bit_offset);
17666}17631}
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
17668static void ensure_field_index(ZigType *type, const char *field_name, size_t index) {17639static void ensure_field_index(ZigType *type, const char *field_name, size_t index) {
17669 Buf *field_name_buf;17640 Buf *field_name_buf;
1767017641
...@@ -17711,7 +17682,9 @@ static ZigType *ir_type_info_get_type(IrAnalyze *ira, const char *type_name, Zig...@@ -17711,7 +17682,9 @@ static ZigType *ir_type_info_get_type(IrAnalyze *ira, const char *type_name, Zig
17711 return var->const_value->data.x_type;17682 return var->const_value->data.x_type;
17712}17683}
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{
17715 Error err;17688 Error err;
17716 ZigType *type_info_definition_type = ir_type_info_get_type(ira, "Definition", nullptr);17689 ZigType *type_info_definition_type = ir_type_info_get_type(ira, "Definition", nullptr);
17717 if ((err = ensure_complete_type(ira->codegen, type_info_definition_type)))17690 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...@@ -17741,7 +17714,7 @@ static Error ir_make_type_info_defs(IrAnalyze *ira, ConstExprValue *out_val, Sco
17741 while ((curr_entry = decl_it.next()) != nullptr) {17714 while ((curr_entry = decl_it.next()) != nullptr) {
17742 // If the definition is unresolved, force it to be resolved again.17715 // If the definition is unresolved, force it to be resolved again.
17743 if (curr_entry->value->resolution == TldResolutionUnresolved) {17716 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);
17745 if (curr_entry->value->resolution != TldResolutionOk) {17718 if (curr_entry->value->resolution != TldResolutionOk) {
17746 return ErrorSemanticAnalyzeFail;17719 return ErrorSemanticAnalyzeFail;
17747 }17720 }
...@@ -17831,6 +17804,11 @@ static Error ir_make_type_info_defs(IrAnalyze *ira, ConstExprValue *out_val, Sco...@@ -17831,6 +17804,11 @@ static Error ir_make_type_info_defs(IrAnalyze *ira, ConstExprValue *out_val, Sco
17831 ZigFn *fn_entry = ((TldFn *)curr_entry->value)->fn_entry;17804 ZigFn *fn_entry = ((TldFn *)curr_entry->value)->fn_entry;
17832 assert(!fn_entry->is_test);17805 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
17834 AstNodeFnProto *fn_node = (AstNodeFnProto *)(fn_entry->proto_node);17812 AstNodeFnProto *fn_node = (AstNodeFnProto *)(fn_entry->proto_node);
1783517813
17836 ConstExprValue *fn_def_val = create_const_vals(1);17814 ConstExprValue *fn_def_val = create_const_vals(1);
...@@ -18036,7 +18014,9 @@ static void make_enum_field_val(IrAnalyze *ira, ConstExprValue *enum_field_val,...@@ -18036,7 +18014,9 @@ static void make_enum_field_val(IrAnalyze *ira, ConstExprValue *enum_field_val,
18036 enum_field_val->data.x_struct.fields = inner_fields;18014 enum_field_val->data.x_struct.fields = inner_fields;
18037}18015}
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{
18040 Error err;18020 Error err;
18041 assert(type_entry != nullptr);18021 assert(type_entry != nullptr);
18042 assert(!type_is_invalid(type_entry));18022 assert(!type_is_invalid(type_entry));
...@@ -18056,7 +18036,6 @@ static Error ir_make_type_info_value(IrAnalyze *ira, AstNode *source_node, ZigTy...@@ -18056,7 +18036,6 @@ static Error ir_make_type_info_value(IrAnalyze *ira, AstNode *source_node, ZigTy
18056 case ZigTypeIdComptimeInt:18036 case ZigTypeIdComptimeInt:
18057 case ZigTypeIdUndefined:18037 case ZigTypeIdUndefined:
18058 case ZigTypeIdNull:18038 case ZigTypeIdNull:
18059 case ZigTypeIdNamespace:
18060 case ZigTypeIdArgTuple:18039 case ZigTypeIdArgTuple:
18061 case ZigTypeIdOpaque:18040 case ZigTypeIdOpaque:
18062 *out = nullptr;18041 *out = nullptr;
...@@ -18248,8 +18227,11 @@ static Error ir_make_type_info_value(IrAnalyze *ira, AstNode *source_node, ZigTy...@@ -18248,8 +18227,11 @@ static Error ir_make_type_info_value(IrAnalyze *ira, AstNode *source_node, ZigTy
18248 }18227 }
18249 // defs: []TypeInfo.Definition18228 // defs: []TypeInfo.Definition
18250 ensure_field_index(result->type, "defs", 3);18229 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 {
18252 return err;18233 return err;
18234 }
1825318235
18254 break;18236 break;
18255 }18237 }
...@@ -18266,11 +18248,11 @@ static Error ir_make_type_info_value(IrAnalyze *ira, AstNode *source_node, ZigTy...@@ -18266,11 +18248,11 @@ static Error ir_make_type_info_value(IrAnalyze *ira, AstNode *source_node, ZigTy
18266 ensure_field_index(result->type, "errors", 0);18248 ensure_field_index(result->type, "errors", 0);
1826718249
18268 ZigType *type_info_error_type = ir_type_info_get_type(ira, "Error", nullptr);18250 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)) {
18270 return ErrorSemanticAnalyzeFail;18252 return ErrorSemanticAnalyzeFail;
18271 }18253 }
18272 if (type_is_global_error_set(type_entry)) {18254 if (type_is_global_error_set(type_entry)) {
18273 ir_add_error_node(ira, source_node,18255 ir_add_error(ira, source_instr,
18274 buf_sprintf("TODO: compiler bug: implement @typeInfo support for anyerror. https://github.com/ziglang/zig/issues/1936"));18256 buf_sprintf("TODO: compiler bug: implement @typeInfo support for anyerror. https://github.com/ziglang/zig/issues/1936"));
18275 return ErrorSemanticAnalyzeFail;18257 return ErrorSemanticAnalyzeFail;
18276 }18258 }
...@@ -18412,8 +18394,11 @@ static Error ir_make_type_info_value(IrAnalyze *ira, AstNode *source_node, ZigTy...@@ -18412,8 +18394,11 @@ static Error ir_make_type_info_value(IrAnalyze *ira, AstNode *source_node, ZigTy
18412 }18394 }
18413 // defs: []TypeInfo.Definition18395 // defs: []TypeInfo.Definition
18414 ensure_field_index(result->type, "defs", 3);18396 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 {
18416 return err;18400 return err;
18401 }
1841718402
18418 break;18403 break;
18419 }18404 }
...@@ -18487,8 +18472,11 @@ static Error ir_make_type_info_value(IrAnalyze *ira, AstNode *source_node, ZigTy...@@ -18487,8 +18472,11 @@ static Error ir_make_type_info_value(IrAnalyze *ira, AstNode *source_node, ZigTy
18487 }18472 }
18488 // defs: []TypeInfo.Definition18473 // defs: []TypeInfo.Definition
18489 ensure_field_index(result->type, "defs", 2);18474 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 {
18491 return err;18478 return err;
18479 }
1849218480
18493 break;18481 break;
18494 }18482 }
...@@ -18600,7 +18588,7 @@ static Error ir_make_type_info_value(IrAnalyze *ira, AstNode *source_node, ZigTy...@@ -18600,7 +18588,7 @@ static Error ir_make_type_info_value(IrAnalyze *ira, AstNode *source_node, ZigTy
18600 {18588 {
18601 ZigType *fn_type = type_entry->data.bound_fn.fn_type;18589 ZigType *fn_type = type_entry->data.bound_fn.fn_type;
18602 assert(fn_type->id == ZigTypeIdFn);18590 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)))
18604 return err;18592 return err;
1860518593
18606 break;18594 break;
...@@ -18625,7 +18613,7 @@ static IrInstruction *ir_analyze_instruction_type_info(IrAnalyze *ira,...@@ -18625,7 +18613,7 @@ static IrInstruction *ir_analyze_instruction_type_info(IrAnalyze *ira,
18625 ZigType *result_type = ir_type_info_get_type(ira, nullptr, nullptr);18613 ZigType *result_type = ir_type_info_get_type(ira, nullptr, nullptr);
1862618614
18627 ConstExprValue *payload;18615 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)))
18629 return ira->codegen->invalid_instruction;18617 return ira->codegen->invalid_instruction;
1863018618
18631 IrInstruction *result = ir_const(ira, &instruction->base, result_type);18619 IrInstruction *result = ir_const(ira, &instruction->base, result_type);
...@@ -18680,7 +18668,7 @@ static IrInstruction *ir_analyze_instruction_type_name(IrAnalyze *ira, IrInstruc...@@ -18680,7 +18668,7 @@ static IrInstruction *ir_analyze_instruction_type_name(IrAnalyze *ira, IrInstruc
18680 return ira->codegen->invalid_instruction;18668 return ira->codegen->invalid_instruction;
1868118669
18682 if (!type_entry->cached_const_name_val) {18670 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));
18684 }18672 }
18685 IrInstruction *result = ir_const(ira, &instruction->base, nullptr);18673 IrInstruction *result = ir_const(ira, &instruction->base, nullptr);
18686 copy_const_val(&result->value, type_entry->cached_const_name_val, true);18674 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...@@ -18702,14 +18690,21 @@ static IrInstruction *ir_analyze_instruction_c_import(IrAnalyze *ira, IrInstruct
18702 if (type_is_invalid(cimport_result->type))18690 if (type_is_invalid(cimport_result->type))
18703 return ira->codegen->invalid_instruction;18691 return ira->codegen->invalid_instruction;
1870418692
18705 ImportTableEntry *child_import = allocate<ImportTableEntry>(1);18693 ZigPackage *cur_scope_pkg = scope_package(instruction->base.scope);
18706 child_import->decls_scope = create_decls_scope(ira->codegen, node, nullptr, nullptr, child_import);18694 Buf *namespace_name = buf_sprintf("%s.cimport:%" ZIG_PRI_usize ":%" ZIG_PRI_usize,
18707 child_import->c_import_node = node;18695 buf_ptr(&cur_scope_pkg->pkg_path), node->line + 1, node->column + 1);
18708 child_import->package = new_anonymous_package();18696
18709 child_import->package->package_table.put(buf_create_from_str("builtin"), ira->codegen->compile_var_package);18697 RootStruct *root_struct = allocate<RootStruct>(1);
18710 child_import->package->package_table.put(buf_create_from_str("std"), ira->codegen->std_package);18698 root_struct->package = new_anonymous_package();
18711 child_import->di_file = ZigLLVMCreateFile(ira->codegen->dbuilder,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,
18712 buf_ptr(buf_create_from_str("cimport.h")), buf_ptr(buf_create_from_str(".")));18705 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
18714 ZigList<ErrorMsg *> errors = {0};18709 ZigList<ErrorMsg *> errors = {0};
1871518710
...@@ -18738,14 +18733,12 @@ static IrInstruction *ir_analyze_instruction_c_import(IrAnalyze *ira, IrInstruct...@@ -18738,14 +18733,12 @@ static IrInstruction *ir_analyze_instruction_c_import(IrAnalyze *ira, IrInstruct
18738 if (ira->codegen->verbose_cimport) {18733 if (ira->codegen->verbose_cimport) {
18739 fprintf(stderr, "\nC imports:\n");18734 fprintf(stderr, "\nC imports:\n");
18740 fprintf(stderr, "-----------\n");18735 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);
18742 }18737 }
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);18741 return ir_const_type(ira, &instruction->base, child_import);
18747 result->value.data.x_import = child_import;
18748 return result;
18749}18742}
1875018743
18751static IrInstruction *ir_analyze_instruction_c_include(IrAnalyze *ira, IrInstructionCInclude *instruction) {18744static IrInstruction *ir_analyze_instruction_c_include(IrAnalyze *ira, IrInstructionCInclude *instruction) {
...@@ -18819,10 +18812,10 @@ static IrInstruction *ir_analyze_instruction_embed_file(IrAnalyze *ira, IrInstru...@@ -18819,10 +18812,10 @@ static IrInstruction *ir_analyze_instruction_embed_file(IrAnalyze *ira, IrInstru
18819 if (!rel_file_path)18812 if (!rel_file_path)
18820 return ira->codegen->invalid_instruction;18813 return ira->codegen->invalid_instruction;
1882118814
18822 ImportTableEntry *import = get_scope_import(instruction->base.scope);18815 ZigType *import = get_scope_import(instruction->base.scope);
18823 // figure out absolute path to resource18816 // figure out absolute path to resource
18824 Buf source_dir_path = BUF_INIT;18817 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
18827 Buf *resolve_paths[] = {18820 Buf *resolve_paths[] = {
18828 &source_dir_path,18821 &source_dir_path,
...@@ -20179,7 +20172,6 @@ static IrInstruction *ir_analyze_instruction_align_of(IrAnalyze *ira, IrInstruct...@@ -20179,7 +20172,6 @@ static IrInstruction *ir_analyze_instruction_align_of(IrAnalyze *ira, IrInstruct
20179 case ZigTypeIdComptimeInt:20172 case ZigTypeIdComptimeInt:
20180 case ZigTypeIdUndefined:20173 case ZigTypeIdUndefined:
20181 case ZigTypeIdNull:20174 case ZigTypeIdNull:
20182 case ZigTypeIdNamespace:
20183 case ZigTypeIdBoundFn:20175 case ZigTypeIdBoundFn:
20184 case ZigTypeIdArgTuple:20176 case ZigTypeIdArgTuple:
20185 case ZigTypeIdVoid:20177 case ZigTypeIdVoid:
...@@ -21025,7 +21017,6 @@ static void buf_write_value_bytes(CodeGen *codegen, uint8_t *buf, ConstExprValue...@@ -21025,7 +21017,6 @@ static void buf_write_value_bytes(CodeGen *codegen, uint8_t *buf, ConstExprValue
21025 case ZigTypeIdOpaque:21017 case ZigTypeIdOpaque:
21026 case ZigTypeIdBoundFn:21018 case ZigTypeIdBoundFn:
21027 case ZigTypeIdArgTuple:21019 case ZigTypeIdArgTuple:
21028 case ZigTypeIdNamespace:
21029 case ZigTypeIdUnreachable:21020 case ZigTypeIdUnreachable:
21030 case ZigTypeIdComptimeFloat:21021 case ZigTypeIdComptimeFloat:
21031 case ZigTypeIdComptimeInt:21022 case ZigTypeIdComptimeInt:
...@@ -21185,7 +21176,6 @@ static Error buf_read_value_bytes(IrAnalyze *ira, CodeGen *codegen, AstNode *sou...@@ -21185,7 +21176,6 @@ static Error buf_read_value_bytes(IrAnalyze *ira, CodeGen *codegen, AstNode *sou
21185 case ZigTypeIdOpaque:21176 case ZigTypeIdOpaque:
21186 case ZigTypeIdBoundFn:21177 case ZigTypeIdBoundFn:
21187 case ZigTypeIdArgTuple:21178 case ZigTypeIdArgTuple:
21188 case ZigTypeIdNamespace:
21189 case ZigTypeIdUnreachable:21179 case ZigTypeIdUnreachable:
21190 case ZigTypeIdComptimeFloat:21180 case ZigTypeIdComptimeFloat:
21191 case ZigTypeIdComptimeInt:21181 case ZigTypeIdComptimeInt:
...@@ -21343,7 +21333,6 @@ static bool type_can_bit_cast(ZigType *t) {...@@ -21343,7 +21333,6 @@ static bool type_can_bit_cast(ZigType *t) {
21343 case ZigTypeIdOpaque:21333 case ZigTypeIdOpaque:
21344 case ZigTypeIdBoundFn:21334 case ZigTypeIdBoundFn:
21345 case ZigTypeIdArgTuple:21335 case ZigTypeIdArgTuple:
21346 case ZigTypeIdNamespace:
21347 case ZigTypeIdUnreachable:21336 case ZigTypeIdUnreachable:
21348 case ZigTypeIdComptimeFloat:21337 case ZigTypeIdComptimeFloat:
21349 case ZigTypeIdComptimeInt:21338 case ZigTypeIdComptimeInt:
...@@ -21516,7 +21505,7 @@ static IrInstruction *ir_analyze_instruction_decl_ref(IrAnalyze *ira,...@@ -21516,7 +21505,7 @@ static IrInstruction *ir_analyze_instruction_decl_ref(IrAnalyze *ira,
21516 Tld *tld = instruction->tld;21505 Tld *tld = instruction->tld;
21517 LVal lval = instruction->lval;21506 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);
21520 if (tld->resolution == TldResolutionInvalid)21509 if (tld->resolution == TldResolutionInvalid)
21521 return ira->codegen->invalid_instruction;21510 return ira->codegen->invalid_instruction;
2152221511
...@@ -21528,6 +21517,10 @@ static IrInstruction *ir_analyze_instruction_decl_ref(IrAnalyze *ira,...@@ -21528,6 +21517,10 @@ static IrInstruction *ir_analyze_instruction_decl_ref(IrAnalyze *ira,
21528 TldVar *tld_var = (TldVar *)tld;21517 TldVar *tld_var = (TldVar *)tld;
21529 ZigVar *var = tld_var->var;21518 ZigVar *var = tld_var->var;
2153021519
21520 if (var == nullptr) {
21521 return ir_error_dependency_loop(ira, &instruction->base);
21522 }
21523
21531 IrInstruction *var_ptr = ir_get_var_ptr(ira, &instruction->base, var);21524 IrInstruction *var_ptr = ir_get_var_ptr(ira, &instruction->base, var);
21532 if (type_is_invalid(var_ptr->value.type))21525 if (type_is_invalid(var_ptr->value.type))
21533 return ira->codegen->invalid_instruction;21526 return ira->codegen->invalid_instruction;
...@@ -21664,9 +21657,11 @@ static IrInstruction *ir_analyze_instruction_align_cast(IrAnalyze *ira, IrInstru...@@ -21664,9 +21657,11 @@ static IrInstruction *ir_analyze_instruction_align_cast(IrAnalyze *ira, IrInstru
21664}21657}
2166521658
21666static IrInstruction *ir_analyze_instruction_opaque_type(IrAnalyze *ira, IrInstructionOpaqueType *instruction) {21659static 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);
21668 ZigType *result_type = get_opaque_type(ira->codegen, instruction->base.scope, instruction->base.source_node,21663 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);
21670 return ir_const_type(ira, &instruction->base, result_type);21665 return ir_const_type(ira, &instruction->base, result_type);
21671}21666}
2167221667
src/main.cpp+7-6
...@@ -215,7 +215,7 @@ struct CliPkg {...@@ -215,7 +215,7 @@ struct CliPkg {
215 CliPkg *parent;215 CliPkg *parent;
216};216};
217217
218static void add_package(CodeGen *g, CliPkg *cli_pkg, PackageTableEntry *pkg) {218static void add_package(CodeGen *g, CliPkg *cli_pkg, ZigPackage *pkg) {
219 for (size_t i = 0; i < cli_pkg->children.length; i += 1) {219 for (size_t i = 0; i < cli_pkg->children.length; i += 1) {
220 CliPkg *child_cli_pkg = cli_pkg->children.at(i);220 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) {...@@ -223,10 +223,11 @@ static void add_package(CodeGen *g, CliPkg *cli_pkg, PackageTableEntry *pkg) {
223 Buf *basename = buf_alloc();223 Buf *basename = buf_alloc();
224 os_path_split(buf_create_from_str(child_cli_pkg->path), dirname, basename);224 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)));
227 auto entry = pkg->package_table.put_unique(buf_create_from_str(child_cli_pkg->name), child_pkg);228 auto entry = pkg->package_table.put_unique(buf_create_from_str(child_cli_pkg->name), child_pkg);
228 if (entry) {229 if (entry) {
229 PackageTableEntry *existing_pkg = entry->value;230 ZigPackage *existing_pkg = entry->value;
230 Buf *full_path = buf_alloc();231 Buf *full_path = buf_alloc();
231 os_path_join(&existing_pkg->root_src_dir, &existing_pkg->root_src_path, full_path);232 os_path_join(&existing_pkg->root_src_dir, &existing_pkg->root_src_path, full_path);
232 fprintf(stderr, "Unable to add package '%s'->'%s': already exists as '%s'\n",233 fprintf(stderr, "Unable to add package '%s'->'%s': already exists as '%s'\n",
...@@ -543,8 +544,8 @@ int main(int argc, char **argv) {...@@ -543,8 +544,8 @@ int main(int argc, char **argv) {
543 return EXIT_FAILURE;544 return EXIT_FAILURE;
544 }545 }
545546
546 PackageTableEntry *build_pkg = codegen_create_package(g, buf_ptr(&build_file_dirname),547 ZigPackage *build_pkg = codegen_create_package(g, buf_ptr(&build_file_dirname),
547 buf_ptr(&build_file_basename));548 buf_ptr(&build_file_basename), "std.special");
548 g->root_package->package_table.put(buf_create_from_str("@build"), build_pkg);549 g->root_package->package_table.put(buf_create_from_str("@build"), build_pkg);
549 g->enable_cache = get_cache_opt(enable_cache, true);550 g->enable_cache = get_cache_opt(enable_cache, true);
550 codegen_build_and_link(g);551 codegen_build_and_link(g);
...@@ -1145,7 +1146,7 @@ int main(int argc, char **argv) {...@@ -1145,7 +1146,7 @@ int main(int argc, char **argv) {
1145 }1146 }
1146 } else if (cmd == CmdTranslateC) {1147 } else if (cmd == CmdTranslateC) {
1147 codegen_translate_c(g, in_file_buf);1148 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);
1149 if (timing_info)1150 if (timing_info)
1150 codegen_print_timing_report(g, stdout);1151 codegen_print_timing_report(g, stdout);
1151 return EXIT_SUCCESS;1152 return EXIT_SUCCESS;
src/os.cpp+1-1
...@@ -264,7 +264,7 @@ void os_path_join(Buf *dirname, Buf *basename, Buf *out_full_path) {...@@ -264,7 +264,7 @@ void os_path_join(Buf *dirname, Buf *basename, Buf *out_full_path) {
264 buf_append_buf(out_full_path, basename);264 buf_append_buf(out_full_path, basename);
265}265}
266266
267int os_path_real(Buf *rel_path, Buf *out_abs_path) {267Error os_path_real(Buf *rel_path, Buf *out_abs_path) {
268#if defined(ZIG_OS_WINDOWS)268#if defined(ZIG_OS_WINDOWS)
269 buf_resize(out_abs_path, 4096);269 buf_resize(out_abs_path, 4096);
270 if (_fullpath(buf_ptr(out_abs_path), buf_ptr(rel_path), buf_len(out_abs_path)) == nullptr) {270 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);...@@ -96,7 +96,7 @@ void os_path_dirname(Buf *full_path, Buf *out_dirname);
96void os_path_split(Buf *full_path, Buf *out_dirname, Buf *out_basename);96void os_path_split(Buf *full_path, Buf *out_dirname, Buf *out_basename);
97void os_path_extname(Buf *full_path, Buf *out_basename, Buf *out_extname);97void os_path_extname(Buf *full_path, Buf *out_basename, Buf *out_extname);
98void os_path_join(Buf *dirname, Buf *basename, Buf *out_full_path);98void 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);
100Buf os_path_resolve(Buf **paths_ptr, size_t paths_len);100Buf os_path_resolve(Buf **paths_ptr, size_t paths_len);
101bool os_path_is_absolute(Buf *path);101bool os_path_is_absolute(Buf *path);
102102
src/parser.cpp+10-8
...@@ -18,7 +18,7 @@ struct ParseContext {...@@ -18,7 +18,7 @@ struct ParseContext {
18 Buf *buf;18 Buf *buf;
19 size_t current_token;19 size_t current_token;
20 ZigList<Token> *tokens;20 ZigList<Token> *tokens;
21 ImportTableEntry *owner;21 ZigType *owner;
22 ErrColor err_color;22 ErrColor err_color;
23};23};
2424
...@@ -130,8 +130,10 @@ static void ast_error(ParseContext *pc, Token *token, const char *format, ...) {...@@ -130,8 +130,10 @@ static void ast_error(ParseContext *pc, Token *token, const char *format, ...) {
130 va_end(ap);130 va_end(ap);
131131
132132
133 ErrorMsg *err = err_msg_create_with_line(pc->owner->path, token->start_line, token->start_column,133 ErrorMsg *err = err_msg_create_with_line(pc->owner->data.structure.root_struct->path,
134 pc->owner->source_code, pc->owner->line_offsets, msg);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);
135 err->line_start = token->start_line;137 err->line_start = token->start_line;
136 err->column_start = token->start_column;138 err->column_start = token->start_column;
137139
...@@ -148,8 +150,10 @@ static void ast_asm_error(ParseContext *pc, AstNode *node, size_t offset, const...@@ -148,8 +150,10 @@ static void ast_asm_error(ParseContext *pc, AstNode *node, size_t offset, const
148 Buf *msg = buf_vprintf(format, ap);150 Buf *msg = buf_vprintf(format, ap);
149 va_end(ap);151 va_end(ap);
150152
151 ErrorMsg *err = err_msg_create_with_line(pc->owner->path, node->line, node->column,153 ErrorMsg *err = err_msg_create_with_line(pc->owner->data.structure.root_struct->path,
152 pc->owner->source_code, pc->owner->line_offsets, msg);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
154 print_err_msg(err, pc->err_color);158 print_err_msg(err, pc->err_color);
155 exit(EXIT_FAILURE);159 exit(EXIT_FAILURE);
...@@ -570,9 +574,7 @@ static void ast_parse_asm_template(ParseContext *pc, AstNode *node) {...@@ -570,9 +574,7 @@ static void ast_parse_asm_template(ParseContext *pc, AstNode *node) {
570 }574 }
571}575}
572576
573AstNode *ast_parse(Buf *buf, ZigList<Token> *tokens, ImportTableEntry *owner,577AstNode *ast_parse(Buf *buf, ZigList<Token> *tokens, ZigType *owner, ErrColor err_color) {
574 ErrColor err_color)
575{
576 ParseContext pc = {};578 ParseContext pc = {};
577 pc.err_color = err_color;579 pc.err_color = err_color;
578 pc.owner = owner;580 pc.owner = owner;
src/parser.hpp+1-1
...@@ -16,7 +16,7 @@ ATTRIBUTE_PRINTF(2, 3)...@@ -16,7 +16,7 @@ ATTRIBUTE_PRINTF(2, 3)
16void ast_token_error(Token *token, const char *format, ...);16void 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
21void ast_print(AstNode *node, int indent);21void ast_print(AstNode *node, int indent);
2222
src/translate_c.cpp+5-4
...@@ -76,7 +76,7 @@ struct TransScopeWhile {...@@ -76,7 +76,7 @@ struct TransScopeWhile {
76};76};
7777
78struct Context {78struct Context {
79 ImportTableEntry *import;79 ZigType *import;
80 ZigList<ErrorMsg *> *errors;80 ZigList<ErrorMsg *> *errors;
81 VisibMod visib_mod;81 VisibMod visib_mod;
82 bool want_export;82 bool want_export;
...@@ -4732,7 +4732,7 @@ static void process_preprocessor_entities(Context *c, ZigClangASTUnit *zunit) {...@@ -4732,7 +4732,7 @@ static void process_preprocessor_entities(Context *c, ZigClangASTUnit *zunit) {
4732 }4732 }
4733}4733}
47344734
4735Error parse_h_buf(ImportTableEntry *import, ZigList<ErrorMsg *> *errors, Buf *source,4735Error parse_h_buf(ZigType *import, ZigList<ErrorMsg *> *errors, Buf *source,
4736 CodeGen *codegen, AstNode *source_node)4736 CodeGen *codegen, AstNode *source_node)
4737{4737{
4738 Error err;4738 Error err;
...@@ -4748,7 +4748,7 @@ Error parse_h_buf(ImportTableEntry *import, ZigList<ErrorMsg *> *errors, Buf *so...@@ -4748,7 +4748,7 @@ Error parse_h_buf(ImportTableEntry *import, ZigList<ErrorMsg *> *errors, Buf *so
4748 return err;4748 return err;
4749}4749}
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,
4752 CodeGen *codegen, AstNode *source_node)4752 CodeGen *codegen, AstNode *source_node)
4753{4753{
4754 Context context = {0};4754 Context context = {0};
...@@ -4958,7 +4958,8 @@ Error parse_h_file(ImportTableEntry *import, ZigList<ErrorMsg *> *errors, const...@@ -4958,7 +4958,8 @@ Error parse_h_file(ImportTableEntry *import, ZigList<ErrorMsg *> *errors, const
4958 render_macros(c);4958 render_macros(c);
4959 render_aliases(c);4959 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
4963 return ErrorNone;4964 return ErrorNone;
4964}4965}
src/translate_c.hpp+2-2
...@@ -11,10 +11,10 @@...@@ -11,10 +11,10 @@
1111
12#include "all_types.hpp"12#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,
15 CodeGen *codegen, AstNode *source_node);15 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,
18 CodeGen *codegen, AstNode *source_node);18 CodeGen *codegen, AstNode *source_node);
1919
20#endif20#endif
src/util.hpp-12
...@@ -93,18 +93,6 @@ ATTRIBUTE_RETURNS_NOALIAS static inline T *allocate(size_t count) {...@@ -93,18 +93,6 @@ ATTRIBUTE_RETURNS_NOALIAS static inline T *allocate(size_t count) {
93 return ptr;93 return ptr;
94}94}
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
108template<typename T>96template<typename T>
109static inline T *reallocate(T *old, size_t old_count, size_t new_count) {97static inline T *reallocate(T *old, size_t old_count, size_t new_count) {
110 T *ptr = reallocate_nonzero(old, old_count, new_count);98 T *ptr = reallocate_nonzero(old, old_count, new_count);
std/crypto/blake2.zig+2-2
...@@ -34,8 +34,8 @@ pub const Blake2s256 = Blake2s(256);...@@ -34,8 +34,8 @@ pub const Blake2s256 = Blake2s(256);
34fn Blake2s(comptime out_len: usize) type {34fn Blake2s(comptime out_len: usize) type {
35 return struct {35 return struct {
36 const Self = @This();36 const Self = @This();
37 const block_length = 64;37 pub const block_length = 64;
38 const digest_length = out_len / 8;38 pub const digest_length = out_len / 8;
3939
40 const iv = [8]u32{40 const iv = [8]u32{
41 0x6A09E667,41 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...@@ -29,8 +29,8 @@ fn Rp(a: usize, b: usize, c: usize, d: usize, k: usize, s: u32, t: u32) RoundPar
2929
30pub const Md5 = struct {30pub const Md5 = struct {
31 const Self = @This();31 const Self = @This();
32 const block_length = 64;32 pub const block_length = 64;
33 const digest_length = 16;33 pub const digest_length = 16;
3434
35 s: [4]u32,35 s: [4]u32,
36 // Streaming Cache36 // 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 {...@@ -26,8 +26,8 @@ fn Rp(a: usize, b: usize, c: usize, d: usize, e: usize, i: u32) RoundParam {
2626
27pub const Sha1 = struct {27pub const Sha1 = struct {
28 const Self = @This();28 const Self = @This();
29 const block_length = 64;29 pub const block_length = 64;
30 const digest_length = 20;30 pub const digest_length = 20;
3131
32 s: [5]u32,32 s: [5]u32,
33 // Streaming Cache33 // Streaming Cache
std/crypto/sha2.zig+2-2
...@@ -78,8 +78,8 @@ pub const Sha256 = Sha2_32(Sha256Params);...@@ -78,8 +78,8 @@ pub const Sha256 = Sha2_32(Sha256Params);
78fn Sha2_32(comptime params: Sha2Params32) type {78fn Sha2_32(comptime params: Sha2Params32) type {
79 return struct {79 return struct {
80 const Self = @This();80 const Self = @This();
81 const block_length = 64;81 pub const block_length = 64;
82 const digest_length = params.out_len / 8;82 pub const digest_length = params.out_len / 8;
8383
84 s: [8]u32,84 s: [8]u32,
85 // Streaming Cache85 // Streaming Cache
std/crypto/sha3.zig+2-2
...@@ -13,8 +13,8 @@ pub const Sha3_512 = Keccak(512, 0x06);...@@ -13,8 +13,8 @@ pub const Sha3_512 = Keccak(512, 0x06);
13fn Keccak(comptime bits: usize, comptime delim: u8) type {13fn Keccak(comptime bits: usize, comptime delim: u8) type {
14 return struct {14 return struct {
15 const Self = @This();15 const Self = @This();
16 const block_length = 200;16 pub const block_length = 200;
17 const digest_length = bits / 8;17 pub const digest_length = bits / 8;
1818
19 s: [200]u8,19 s: [200]u8,
20 offset: usize,20 offset: usize,
std/hash_map.zig-2
...@@ -486,7 +486,6 @@ pub fn autoHash(key: var, comptime rng: *std.rand.Random, comptime HashInt: type...@@ -486,7 +486,6 @@ pub fn autoHash(key: var, comptime rng: *std.rand.Random, comptime HashInt: type
486 builtin.TypeId.ErrorSet => return autoHash(@errorToInt(key), rng),486 builtin.TypeId.ErrorSet => return autoHash(@errorToInt(key), rng),
487 builtin.TypeId.Promise, builtin.TypeId.Fn => return autoHash(@ptrToInt(key), rng),487 builtin.TypeId.Promise, builtin.TypeId.Fn => return autoHash(@ptrToInt(key), rng),
488488
489 builtin.TypeId.Namespace,
490 builtin.TypeId.BoundFn,489 builtin.TypeId.BoundFn,
491 builtin.TypeId.ComptimeFloat,490 builtin.TypeId.ComptimeFloat,
492 builtin.TypeId.ComptimeInt,491 builtin.TypeId.ComptimeInt,
...@@ -532,7 +531,6 @@ pub fn autoEql(a: var, b: @typeOf(a)) bool {...@@ -532,7 +531,6 @@ pub fn autoEql(a: var, b: @typeOf(a)) bool {
532 builtin.TypeId.Float,531 builtin.TypeId.Float,
533 builtin.TypeId.ComptimeFloat,532 builtin.TypeId.ComptimeFloat,
534 builtin.TypeId.ComptimeInt,533 builtin.TypeId.ComptimeInt,
535 builtin.TypeId.Namespace,
536 builtin.TypeId.Promise,534 builtin.TypeId.Promise,
537 builtin.TypeId.Enum,535 builtin.TypeId.Enum,
538 builtin.TypeId.BoundFn,536 builtin.TypeId.BoundFn,
std/pdb.zig+1-3
...@@ -12,7 +12,6 @@ const ArrayList = std.ArrayList;...@@ -12,7 +12,6 @@ const ArrayList = std.ArrayList;
12// Note: most of this is based on information gathered from LLVM source code,12// Note: most of this is based on information gathered from LLVM source code,
13// documentation and/or contributors.13// documentation and/or contributors.
1414
15
16// https://llvm.org/docs/PDB/DbiStream.html#stream-header15// https://llvm.org/docs/PDB/DbiStream.html#stream-header
17pub const DbiStreamHeader = packed struct {16pub const DbiStreamHeader = packed struct {
18 VersionSignature: i32,17 VersionSignature: i32,
...@@ -393,10 +392,9 @@ pub const LineNumberEntry = packed struct {...@@ -393,10 +392,9 @@ pub const LineNumberEntry = packed struct {
393 Flags: u32,392 Flags: u32,
394393
395 /// TODO runtime crash when I make the actual type of Flags this394 /// TODO runtime crash when I make the actual type of Flags this
396 const Flags = packed struct {395 pub const Flags = packed struct {
397 /// Start line number396 /// Start line number
398 Start: u24,397 Start: u24,
399
400 /// Delta of lines to the end of the expression. Still unclear.398 /// Delta of lines to the end of the expression. Still unclear.
401 // TODO figure out the point of this field.399 // TODO figure out the point of this field.
402 End: u7,400 End: u7,
std/testing.zig-1
...@@ -44,7 +44,6 @@ pub fn expectEqual(expected: var, actual: @typeOf(expected)) void {...@@ -44,7 +44,6 @@ pub fn expectEqual(expected: var, actual: @typeOf(expected)) void {
44 TypeId.ComptimeFloat,44 TypeId.ComptimeFloat,
45 TypeId.ComptimeInt,45 TypeId.ComptimeInt,
46 TypeId.Enum,46 TypeId.Enum,
47 TypeId.Namespace,
48 TypeId.Fn,47 TypeId.Fn,
49 TypeId.Promise,48 TypeId.Promise,
50 TypeId.Vector,49 TypeId.Vector,
std/zig/ast.zig+6-6
...@@ -617,7 +617,7 @@ pub const Node = struct {...@@ -617,7 +617,7 @@ pub const Node = struct {
617617
618 pub const DeclList = Root.DeclList;618 pub const DeclList = Root.DeclList;
619619
620 const InitArg = union(enum) {620 pub const InitArg = union(enum) {
621 None,621 None,
622 Enum: ?*Node,622 Enum: ?*Node,
623 Type: *Node,623 Type: *Node,
...@@ -1744,7 +1744,7 @@ pub const Node = struct {...@@ -1744,7 +1744,7 @@ pub const Node = struct {
1744 kind: Kind,1744 kind: Kind,
1745 rhs: ?*Node,1745 rhs: ?*Node,
17461746
1747 const Kind = union(enum) {1747 pub const Kind = union(enum) {
1748 Break: ?*Node,1748 Break: ?*Node,
1749 Continue: ?*Node,1749 Continue: ?*Node,
1750 Return,1750 Return,
...@@ -2022,7 +2022,7 @@ pub const Node = struct {...@@ -2022,7 +2022,7 @@ pub const Node = struct {
2022 kind: Kind,2022 kind: Kind,
2023 rparen: TokenIndex,2023 rparen: TokenIndex,
20242024
2025 const Kind = union(enum) {2025 pub const Kind = union(enum) {
2026 Variable: *Identifier,2026 Variable: *Identifier,
2027 Return: *Node,2027 Return: *Node,
2028 };2028 };
...@@ -2101,9 +2101,9 @@ pub const Node = struct {...@@ -2101,9 +2101,9 @@ pub const Node = struct {
2101 clobbers: ClobberList,2101 clobbers: ClobberList,
2102 rparen: TokenIndex,2102 rparen: TokenIndex,
21032103
2104 const OutputList = SegmentedList(*AsmOutput, 2);2104 pub const OutputList = SegmentedList(*AsmOutput, 2);
2105 const InputList = SegmentedList(*AsmInput, 2);2105 pub const InputList = SegmentedList(*AsmInput, 2);
2106 const ClobberList = SegmentedList(TokenIndex, 2);2106 pub const ClobberList = SegmentedList(TokenIndex, 2);
21072107
2108 pub fn iterate(self: *Asm, index: usize) ?*Node {2108 pub fn iterate(self: *Asm, index: usize) ?*Node {
2109 var i = index;2109 var i = index;
test/compile_errors.zig+692-690
...@@ -2,6 +2,113 @@ const tests = @import("tests.zig");...@@ -2,6 +2,113 @@ const tests = @import("tests.zig");
2const builtin = @import("builtin");2const builtin = @import("builtin");
33
4pub fn addCases(cases: *tests.CompileErrorContext) void {4pub 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
5 cases.addTest(112 cases.addTest(
6 "not an enum type",113 "not an enum type",
7 \\export fn entry() void {114 \\export fn entry() void {
...@@ -18,7 +125,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -18,7 +125,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
18 \\const InvalidToken = struct {};125 \\const InvalidToken = struct {};
19 \\const ExpectedVarDeclOrFn = struct {};126 \\const ExpectedVarDeclOrFn = struct {};
20 ,127 ,
21 ".tmp_source.zig:4:9: error: not an enum type",128 "tmp.zig:4:9: error: not an enum type",
22 );129 );
23130
24 cases.addTest(131 cases.addTest(
...@@ -29,7 +136,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -29,7 +136,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
29 \\ var x: AB = undefined;136 \\ var x: AB = undefined;
30 \\}137 \\}
31 ,138 ,
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}'",
33 );140 );
34141
35 if (builtin.os == builtin.Os.linux) {142 if (builtin.os == builtin.Os.linux) {
...@@ -40,7 +147,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -40,7 +147,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
40 \\ exit(0);147 \\ exit(0);
41 \\}148 \\}
42 ,149 ,
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",
44 );151 );
45152
46 cases.addTest(153 cases.addTest(
...@@ -50,8 +157,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -50,8 +157,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
50 \\ _ = c.printf(c"hello, world!\n");157 \\ _ = c.printf(c"hello, world!\n");
51 \\}158 \\}
52 ,159 ,
53 ".tmp_source.zig:1:11: error: C import failed",160 "tmp.zig:1:11: error: C import failed",
54 ".tmp_source.zig:1:11: note: libc headers not available; compilation does not link against libc",161 "tmp.zig:1:11: note: libc headers not available; compilation does not link against libc",
55 );162 );
56 }163 }
57164
...@@ -63,8 +170,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -63,8 +170,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
63 \\ var x = a + b;170 \\ var x = a + b;
64 \\}171 \\}
65 ,172 ,
66 ".tmp_source.zig:4:15: error: operation caused overflow",173 "tmp.zig:4:15: error: operation caused overflow",
67 ".tmp_source.zig:4:15: note: when computing vector element at index 2",174 "tmp.zig:4:15: note: when computing vector element at index 2",
68 );175 );
69176
70 cases.addTest(177 cases.addTest(
...@@ -111,14 +218,14 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -111,14 +218,14 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
111 \\ B,218 \\ B,
112 \\};219 \\};
113 ,220 ,
114 ".tmp_source.zig:2:5: error: type 'anyerror' not allowed in packed struct; no guaranteed in-memory representation",221 "tmp.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",222 "tmp.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",223 "tmp.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",224 "tmp.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",225 "tmp.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",226 "tmp.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",227 "tmp.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",228 "tmp.zig:38:14: note: enum declaration does not specify an integer tag type",
122 );229 );
123230
124 cases.addCase(x: {231 cases.addCase(x: {
...@@ -131,7 +238,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -131,7 +238,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
131 \\ x += 1;238 \\ x += 1;
132 \\}239 \\}
133 ,240 ,
134 ".tmp_source.zig:2:5: error: use of undeclared identifier 'x'",241 "tmp.zig:2:5: error: use of undeclared identifier 'x'",
135 );242 );
136 tc.expect_exact = true;243 tc.expect_exact = true;
137 break :x tc;244 break :x tc;
...@@ -143,7 +250,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -143,7 +250,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
143 \\ return 0;250 \\ return 0;
144 \\}251 \\}
145 ,252 ,
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'",
147 );254 );
148255
149 cases.addTest(256 cases.addTest(
...@@ -153,7 +260,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -153,7 +260,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
153 \\ var y: [*c]c_void = x;260 \\ var y: [*c]c_void = x;
154 \\}261 \\}
155 ,262 ,
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",
157 );264 );
158265
159 cases.addTest(266 cases.addTest(
...@@ -173,8 +280,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -173,8 +280,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
173 \\ var bar: Bar = undefined;280 \\ var bar: Bar = undefined;
174 \\}281 \\}
175 ,282 ,
176 ".tmp_source.zig:3:8: error: opaque types have unknown size and therefore cannot be directly embedded in structs",283 "tmp.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",284 "tmp.zig:7:10: error: opaque types have unknown size and therefore cannot be directly embedded in unions",
178 );285 );
179286
180 cases.addTest(287 cases.addTest(
...@@ -204,13 +311,13 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -204,13 +311,13 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
204 \\ var x: [*c]u32 = y;311 \\ var x: [*c]u32 = y;
205 \\}312 \\}
206 ,313 ,
207 ".tmp_source.zig:3:27: error: cast increases pointer alignment",314 "tmp.zig:3:27: error: cast increases pointer alignment",
208 ".tmp_source.zig:7:18: error: cast discards const qualifier",315 "tmp.zig:7:18: error: cast discards const qualifier",
209 ".tmp_source.zig:11:19: error: expected type '*u32', found '[*c]u8'",316 "tmp.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'",317 "tmp.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",318 "tmp.zig:15:22: error: cast increases pointer alignment",
212 ".tmp_source.zig:19:21: error: cast discards const qualifier",319 "tmp.zig:19:21: error: cast discards const qualifier",
213 ".tmp_source.zig:23:22: error: expected type '[*c]u32', found '*u8'",320 "tmp.zig:23:22: error: expected type '[*c]u32', found '*u8'",
214 );321 );
215322
216 cases.addTest(323 cases.addTest(
...@@ -220,7 +327,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -220,7 +327,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
220 \\ var zig_ptr: *u8 = c_ptr;327 \\ var zig_ptr: *u8 = c_ptr;
221 \\}328 \\}
222 ,329 ,
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'",
224 );331 );
225332
226 cases.addTest(333 cases.addTest(
...@@ -230,7 +337,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -230,7 +337,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
230 \\ var zig_ptr: *u8 = c_ptr;337 \\ var zig_ptr: *u8 = c_ptr;
231 \\}338 \\}
232 ,339 ,
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",
234 );341 );
235342
236 cases.addTest(343 cases.addTest(
...@@ -250,12 +357,12 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -250,12 +357,12 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
250 \\ var c_ptr: [*c][*c]const u8 = ptr_opt_many_ptr;357 \\ var c_ptr: [*c][*c]const u8 = ptr_opt_many_ptr;
251 \\}358 \\}
252 ,359 ,
253 ".tmp_source.zig:6:24: error: expected type '*const [*]const u8', found '[*c]const [*c]const u8'",360 "tmp.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'",361 "tmp.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'",362 "tmp.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'",363 "tmp.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'",364 "tmp.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'",365 "tmp.zig:13:35: note: mutable '[*c]const u8' allows illegal null values stored to type '[*]u8'",
259 );366 );
260367
261 cases.addTest(368 cases.addTest(
...@@ -268,8 +375,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -268,8 +375,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
268 \\ var ptr: [*c]u8 = x;375 \\ var ptr: [*c]u8 = x;
269 \\}376 \\}
270 ,377 ,
271 ".tmp_source.zig:2:33: error: integer value 71615590737044764481 cannot be implicitly casted to type 'usize'",378 "tmp.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'",379 "tmp.zig:6:23: error: integer type 'u65' too big for implicit @intToPtr to type '[*c]u8'",
273 );380 );
274381
275 cases.addTest(382 cases.addTest(
...@@ -279,7 +386,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -279,7 +386,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
279 \\ const T = [*c]Foo;386 \\ const T = [*c]Foo;
280 \\}387 \\}
281 ,388 ,
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'",
283 );390 );
284391
285 cases.addCase(x: {392 cases.addCase(x: {
...@@ -294,7 +401,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -294,7 +401,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
294 \\ inline while (i < n) : (i += 1) { @compileLog("!@#$"); }401 \\ inline while (i < n) : (i += 1) { @compileLog("!@#$"); }
295 \\}402 \\}
296 ,403 ,
297 ".tmp_source.zig:7:39: error: found compile log statement",404 "tmp.zig:7:39: error: found compile log statement",
298 );405 );
299 tc.expect_exact = true;406 tc.expect_exact = true;
300 break :x tc;407 break :x tc;
...@@ -306,7 +413,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -306,7 +413,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
306 \\ 'a'.* = 1;413 \\ 'a'.* = 1;
307 \\}414 \\}
308 ,415 ,
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'",
310 );417 );
311418
312 cases.addTest(419 cases.addTest(
...@@ -315,7 +422,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -315,7 +422,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
315 \\ const x = 'a'.*[0..];422 \\ const x = 'a'.*[0..];
316 \\}423 \\}
317 ,424 ,
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'",
319 );426 );
320427
321 cases.addTest(428 cases.addTest(
...@@ -324,14 +431,14 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -324,14 +431,14 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
324 \\ var z = @truncate(u8, u16(undefined));431 \\ var z = @truncate(u8, u16(undefined));
325 \\}432 \\}
326 ,433 ,
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",
328 );435 );
329436
330 cases.addTest(437 cases.addTest(
331 "return invalid type from test",438 "return invalid type from test",
332 \\test "example" { return 1; }439 \\test "example" { return 1; }
333 ,440 ,
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'",
335 );442 );
336443
337 cases.add(444 cases.add(
...@@ -341,7 +448,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -341,7 +448,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
341 \\ return x;448 \\ return x;
342 \\}449 \\}
343 ,450 ,
344 ".tmp_source.zig:1:13: error: threadlocal variable cannot be constant",451 "tmp.zig:1:13: error: threadlocal variable cannot be constant",
345 );452 );
346453
347 cases.add(454 cases.add(
...@@ -350,7 +457,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -350,7 +457,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
350 \\ threadlocal var x: i32 = 1234;457 \\ threadlocal var x: i32 = 1234;
351 \\}458 \\}
352 ,459 ,
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",
354 );461 );
355462
356 cases.add(463 cases.add(
...@@ -359,7 +466,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -359,7 +466,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
359 \\ var oops = @bitCast(u7, byte);466 \\ var oops = @bitCast(u7, byte);
360 \\}467 \\}
361 ,468 ,
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",
363 );470 );
364471
365 cases.add(472 cases.add(
...@@ -371,7 +478,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -371,7 +478,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
371 \\ return 5678;478 \\ return 5678;
372 \\}479 \\}
373 ,480 ,
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.",
375 );482 );
376483
377 cases.add(484 cases.add(
...@@ -383,8 +490,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -383,8 +490,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
383 \\ return 5678;490 \\ return 5678;
384 \\}491 \\}
385 ,492 ,
386 ".tmp_source.zig:2:9: error: expected error set type, found 'bool'",493 "tmp.zig:2:9: error: expected error set type, found 'bool'",
387 ".tmp_source.zig:2:11: note: `||` merges error sets; `or` performs boolean OR",494 "tmp.zig:2:11: note: `||` merges error sets; `or` performs boolean OR",
388 );495 );
389496
390 cases.add(497 cases.add(
...@@ -393,7 +500,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -393,7 +500,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
393 \\ @compileLog(@ptrCast(*const c_void, &entry));500 \\ @compileLog(@ptrCast(*const c_void, &entry));
394 \\}501 \\}
395 ,502 ,
396 ".tmp_source.zig:2:5: error: found compile log statement",503 "tmp.zig:2:5: error: found compile log statement",
397 );504 );
398505
399 cases.add(506 cases.add(
...@@ -413,8 +520,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -413,8 +520,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
413 \\ };520 \\ };
414 \\}521 \\}
415 ,522 ,
416 ".tmp_source.zig:5:9: error: duplicate switch value",523 "tmp.zig:5:9: error: duplicate switch value",
417 ".tmp_source.zig:12:9: error: duplicate switch value",524 "tmp.zig:12:9: error: duplicate switch value",
418 );525 );
419526
420 cases.add(527 cases.add(
...@@ -430,8 +537,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -430,8 +537,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
430 \\ };537 \\ };
431 \\}538 \\}
432 ,539 ,
433 ".tmp_source.zig:2:15: error: switch must handle all possibilities",540 "tmp.zig:2:15: error: switch must handle all possibilities",
434 ".tmp_source.zig:7:15: error: switch must handle all possibilities",541 "tmp.zig:7:15: error: switch must handle all possibilities",
435 );542 );
436543
437 cases.add(544 cases.add(
...@@ -443,7 +550,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -443,7 +550,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
443 \\ const deref = int_ptr.*;550 \\ const deref = int_ptr.*;
444 \\}551 \\}
445 ,552 ,
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",
447 );554 );
448555
449 cases.add(556 cases.add(
...@@ -454,8 +561,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -454,8 +561,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
454 \\ do_the_thing(bar);561 \\ do_the_thing(bar);
455 \\}562 \\}
456 ,563 ,
457 ".tmp_source.zig:4:18: error: expected type 'fn(i32) void', found 'fn(bool) void",564 "tmp.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'",565 "tmp.zig:4:18: note: parameter 0: 'bool' cannot cast into 'i32'",
459 );566 );
460567
461 cases.add(568 cases.add(
...@@ -469,8 +576,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -469,8 +576,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
469 \\ const unsigned: u32 = value;576 \\ const unsigned: u32 = value;
470 \\}577 \\}
471 ,578 ,
472 ".tmp_source.zig:3:36: 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'",
473 ".tmp_source.zig:7:27: 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'",
474 );581 );
475582
476 cases.add(583 cases.add(
...@@ -488,9 +595,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -488,9 +595,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
488 \\ var byte: u8 = spartan_count;595 \\ var byte: u8 = spartan_count;
489 \\}596 \\}
490 ,597 ,
491 ".tmp_source.zig:3:31: error: integer value 300 cannot be implicitly casted to type 'u8'",598 "tmp.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'",599 "tmp.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'",600 "tmp.zig:11:20: error: expected type 'u8', found 'u16'",
494 );601 );
495602
496 cases.add(603 cases.add(
...@@ -500,7 +607,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -500,7 +607,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
500 \\ const y: f32 = x;607 \\ const y: f32 = x;
501 \\}608 \\}
502 ,609 ,
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",
504 );611 );
505612
506 cases.add(613 cases.add(
...@@ -510,7 +617,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -510,7 +617,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
510 \\617 \\
511 \\export fn entry() usize { return @sizeOf(@typeOf(y)); }618 \\export fn entry() usize { return @sizeOf(@typeOf(y)); }
512 ,619 ,
513 ".tmp_source.zig:2:14: error: expected type 'f32', found 'f64'",620 "tmp.zig:2:14: error: expected type 'f32', found 'f64'",
514 );621 );
515622
516 cases.add(623 cases.add(
...@@ -522,28 +629,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -522,28 +629,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
522 \\ var x: i65536 = 1;629 \\ var x: i65536 = 1;
523 \\}630 \\}
524 ,631 ,
525 ".tmp_source.zig:2:31: error: integer value 65536 cannot be implicitly casted to type 'u16'",632 "tmp.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",633 "tmp.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",
547 );634 );
548635
549 cases.add(636 cases.add(
...@@ -556,7 +643,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -556,7 +643,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
556 \\ const car = Car.init();643 \\ const car = Car.init();
557 \\}644 \\}
558 ,645 ,
559 ".tmp_source.zig:2:11: error: use of undeclared identifier 'SymbolThatDoesNotExist'",646 "tmp.zig:2:11: error: use of undeclared identifier 'SymbolThatDoesNotExist'",
560 );647 );
561648
562 cases.add(649 cases.add(
...@@ -568,7 +655,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -568,7 +655,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
568 \\ var ptr2: *c_void = &b;655 \\ var ptr2: *c_void = &b;
569 \\}656 \\}
570 ,657 ,
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'",
572 );659 );
573660
574 cases.add(661 cases.add(
...@@ -584,7 +671,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -584,7 +671,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
584 \\ const field = @typeInfo(Struct).Struct.fields[index];671 \\ const field = @typeInfo(Struct).Struct.fields[index];
585 \\}672 \\}
586 ,673 ,
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",
588 );675 );
589676
590 cases.add(677 cases.add(
...@@ -598,7 +685,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -598,7 +685,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
598 \\ _ = @typeName(Foo(i32));685 \\ _ = @typeName(Foo(i32));
599 \\}686 \\}
600 ,687 ,
601 ".tmp_source.zig:2:5: error: found compile log statement",688 "tmp.zig:2:5: error: found compile log statement",
602 );689 );
603690
604 cases.add(691 cases.add(
...@@ -608,7 +695,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -608,7 +695,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
608 \\ var b = a[0..10];695 \\ var b = a[0..10];
609 \\}696 \\}
610 ,697 ,
611 ".tmp_source.zig:3:14: error: slice of undefined",698 "tmp.zig:3:14: error: slice of undefined",
612 );699 );
613700
614 cases.add(701 cases.add(
...@@ -618,7 +705,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -618,7 +705,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
618 \\ const sliceA: []u8 = &buffer;705 \\ const sliceA: []u8 = &buffer;
619 \\}706 \\}
620 ,707 ,
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'",
622 );709 );
623710
624 cases.add(711 cases.add(
...@@ -628,7 +715,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -628,7 +715,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
628 \\ _ = a.*.len;715 \\ _ = a.*.len;
629 \\}716 \\}
630 ,717 ,
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'",
632 );719 );
633720
634 cases.add(721 cases.add(
...@@ -639,9 +726,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -639,9 +726,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
639 \\ return p == null;726 \\ return p == null;
640 \\}727 \\}
641 ,728 ,
642 ".tmp_source.zig:3:15: error: '*u0' and '?*u0' do not have the same in-memory representation",729 "tmp.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",730 "tmp.zig:3:31: note: '*u0' has no in-memory bits",
644 ".tmp_source.zig:3:24: note: '?*u0' has in-memory bits",731 "tmp.zig:3:24: note: '?*u0' has in-memory bits",
645 );732 );
646733
647 cases.add(734 cases.add(
...@@ -651,7 +738,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -651,7 +738,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
651 \\ _ = &x == null;738 \\ _ = &x == null;
652 \\}739 \\}
653 ,740 ,
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",
655 );742 );
656743
657 cases.add(744 cases.add(
...@@ -663,10 +750,10 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -663,10 +750,10 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
663 \\ const Errors = error{} || u16;750 \\ const Errors = error{} || u16;
664 \\}751 \\}
665 ,752 ,
666 ".tmp_source.zig:2:20: error: expected error set type, found type 'u8'",753 "tmp.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",754 "tmp.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'",755 "tmp.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",756 "tmp.zig:5:28: note: `||` merges error sets; `or` performs boolean OR",
670 );757 );
671758
672 cases.add(759 cases.add(
...@@ -684,7 +771,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -684,7 +771,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
684 \\ const S = Gen();771 \\ const S = Gen();
685 \\}772 \\}
686 ,773 ,
687 ".tmp_source.zig:2:12: error: use of undeclared identifier 'T'",774 "tmp.zig:2:12: error: use of undeclared identifier 'T'",
688 );775 );
689776
690 cases.add(777 cases.add(
...@@ -695,7 +782,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -695,7 +782,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
695 \\ f(i32);782 \\ f(i32);
696 \\}783 \\}
697 ,784 ,
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",
699 );786 );
700787
701 cases.add(788 cases.add(
...@@ -713,9 +800,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -713,9 +800,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
713 \\ var x = func(3);800 \\ var x = func(3);
714 \\}801 \\}
715 ,802 ,
716 ".tmp_source.zig:4:24: error: 'y' not accessible from inner function",803 "tmp.zig:4:24: error: 'y' not accessible from inner function",
717 ".tmp_source.zig:3:28: note: crossed function definition here",804 "tmp.zig:3:28: note: crossed function definition here",
718 ".tmp_source.zig:1:10: note: declared here",805 "tmp.zig:1:10: note: declared here",
719 );806 );
720807
721 cases.add(808 cases.add(
...@@ -724,7 +811,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -724,7 +811,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
724 \\ const x = @intToFloat(f32, 1.1);811 \\ const x = @intToFloat(f32, 1.1);
725 \\}812 \\}
726 ,813 ,
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'",
728 );815 );
729816
730 cases.add(817 cases.add(
...@@ -733,7 +820,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -733,7 +820,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
733 \\ const x = @floatToInt(i32, i32(54));820 \\ const x = @floatToInt(i32, i32(54));
734 \\}821 \\}
735 ,822 ,
736 ".tmp_source.zig:2:35: error: expected float type, found 'i32'",823 "tmp.zig:2:35: error: expected float type, found 'i32'",
737 );824 );
738825
739 cases.add(826 cases.add(
...@@ -742,7 +829,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -742,7 +829,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
742 \\ const x = @floatToInt(i8, 200);829 \\ const x = @floatToInt(i8, 200);
743 \\}830 \\}
744 ,831 ,
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'",
746 );833 );
747834
748 cases.add(835 cases.add(
...@@ -754,7 +841,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -754,7 +841,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
754 \\ const int_val = int_ptr.*;841 \\ const int_val = int_ptr.*;
755 \\}842 \\}
756 ,843 ,
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",
758 );845 );
759846
760 cases.add(847 cases.add(
...@@ -767,7 +854,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -767,7 +854,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
767 \\ const a = items[0];854 \\ const a = items[0];
768 \\}855 \\}
769 ,856 ,
770 ".tmp_source.zig:2:12: error: use of undeclared identifier 'SomeNonexistentType'",857 "tmp.zig:2:12: error: use of undeclared identifier 'SomeNonexistentType'",
771 );858 );
772859
773 cases.add(860 cases.add(
...@@ -778,7 +865,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -778,7 +865,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
778 \\ @noInlineCall(foo);865 \\ @noInlineCall(foo);
779 \\}866 \\}
780 ,867 ,
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",
782 );869 );
783870
784 cases.add(871 cases.add(
...@@ -795,8 +882,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -795,8 +882,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
795 \\ }882 \\ }
796 \\}883 \\}
797 ,884 ,
798 ".tmp_source.zig:6:19: error: comptime control flow inside runtime block",885 "tmp.zig:6:19: error: comptime control flow inside runtime block",
799 ".tmp_source.zig:5:9: note: runtime block created here",886 "tmp.zig:5:9: note: runtime block created here",
800 );887 );
801888
802 cases.add(889 cases.add(
...@@ -812,8 +899,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -812,8 +899,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
812 \\ }899 \\ }
813 \\}900 \\}
814 ,901 ,
815 ".tmp_source.zig:6:13: error: comptime control flow inside runtime block",902 "tmp.zig:6:13: error: comptime control flow inside runtime block",
816 ".tmp_source.zig:5:9: note: runtime block created here",903 "tmp.zig:5:9: note: runtime block created here",
817 );904 );
818905
819 cases.add(906 cases.add(
...@@ -827,8 +914,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -827,8 +914,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
827 \\ }914 \\ }
828 \\}915 \\}
829 ,916 ,
830 ".tmp_source.zig:5:23: error: comptime control flow inside runtime block",917 "tmp.zig:5:23: error: comptime control flow inside runtime block",
831 ".tmp_source.zig:5:9: note: runtime block created here",918 "tmp.zig:5:9: note: runtime block created here",
832 );919 );
833920
834 cases.add(921 cases.add(
...@@ -842,8 +929,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -842,8 +929,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
842 \\ }929 \\ }
843 \\}930 \\}
844 ,931 ,
845 ".tmp_source.zig:5:25: error: comptime control flow inside runtime block",932 "tmp.zig:5:25: error: comptime control flow inside runtime block",
846 ".tmp_source.zig:5:9: note: runtime block created here",933 "tmp.zig:5:9: note: runtime block created here",
847 );934 );
848935
849 cases.add(936 cases.add(
...@@ -857,8 +944,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -857,8 +944,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
857 \\ }944 \\ }
858 \\}945 \\}
859 ,946 ,
860 ".tmp_source.zig:5:20: error: comptime control flow inside runtime block",947 "tmp.zig:5:20: error: comptime control flow inside runtime block",
861 ".tmp_source.zig:5:9: note: runtime block created here",948 "tmp.zig:5:9: note: runtime block created here",
862 );949 );
863950
864 cases.add(951 cases.add(
...@@ -872,8 +959,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -872,8 +959,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
872 \\ }959 \\ }
873 \\}960 \\}
874 ,961 ,
875 ".tmp_source.zig:5:20: error: comptime control flow inside runtime block",962 "tmp.zig:5:20: error: comptime control flow inside runtime block",
876 ".tmp_source.zig:5:9: note: runtime block created here",963 "tmp.zig:5:9: note: runtime block created here",
877 );964 );
878965
879 cases.add(966 cases.add(
...@@ -887,8 +974,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -887,8 +974,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
887 \\ }974 \\ }
888 \\}975 \\}
889 ,976 ,
890 ".tmp_source.zig:5:22: error: comptime control flow inside runtime block",977 "tmp.zig:5:22: error: comptime control flow inside runtime block",
891 ".tmp_source.zig:5:9: note: runtime block created here",978 "tmp.zig:5:9: note: runtime block created here",
892 );979 );
893980
894 cases.add(981 cases.add(
...@@ -904,7 +991,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -904,7 +991,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
904 \\ };991 \\ };
905 \\}992 \\}
906 ,993 ,
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",
908 );995 );
909996
910 cases.add(997 cases.add(
...@@ -914,24 +1001,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -914,24 +1001,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
914 \\ foo();1001 \\ foo();
915 \\}1002 \\}
916 ,1003 ,
917 ".tmp_source.zig:1:1: error: non-extern function has no body",1004 "tmp.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",
935 );1005 );
9361006
937 cases.add(1007 cases.add(
...@@ -942,7 +1012,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -942,7 +1012,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
942 \\ return handle_undef == handle_dummy;1012 \\ return handle_undef == handle_dummy;
943 \\}1013 \\}
944 ,1014 ,
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",
946 );1016 );
9471017
948 cases.add(1018 cases.add(
...@@ -952,7 +1022,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -952,7 +1022,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
952 \\ return handle_undef == @handle();1022 \\ return handle_undef == @handle();
953 \\}1023 \\}
954 ,1024 ,
955 ".tmp_source.zig:3:28: error: @handle() in non-async function",1025 "tmp.zig:3:28: error: @handle() in non-async function",
956 );1026 );
9571027
958 cases.add(1028 cases.add(
...@@ -962,8 +1032,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -962,8 +1032,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
962 \\ return _;1032 \\ return _;
963 \\}1033 \\}
964 ,1034 ,
965 ".tmp_source.zig:2:5: error: `_` is not a declarable symbol",1035 "tmp.zig:2:5: error: `_` is not a declarable symbol",
966 ".tmp_source.zig:3:12: error: use of undeclared identifier '_'",1036 "tmp.zig:3:12: error: use of undeclared identifier '_'",
967 );1037 );
9681038
969 cases.add(1039 cases.add(
...@@ -976,7 +1046,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -976,7 +1046,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
976 \\ }1046 \\ }
977 \\}1047 \\}
978 ,1048 ,
979 ".tmp_source.zig:4:20: error: use of undeclared identifier '_'",1049 "tmp.zig:4:20: error: use of undeclared identifier '_'",
980 );1050 );
9811051
982 cases.add(1052 cases.add(
...@@ -992,7 +1062,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -992,7 +1062,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
992 \\ return 1;1062 \\ return 1;
993 \\}1063 \\}
994 ,1064 ,
995 ".tmp_source.zig:4:20: error: use of undeclared identifier '_'",1065 "tmp.zig:4:20: error: use of undeclared identifier '_'",
996 );1066 );
9971067
998 cases.add(1068 cases.add(
...@@ -1010,7 +1080,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1010,7 +1080,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1010 \\ return error.optionalReturnError;1080 \\ return error.optionalReturnError;
1011 \\}1081 \\}
1012 ,1082 ,
1013 ".tmp_source.zig:6:17: error: use of undeclared identifier '_'",1083 "tmp.zig:6:17: error: use of undeclared identifier '_'",
1014 );1084 );
10151085
1016 cases.add(1086 cases.add(
...@@ -1030,9 +1100,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1030,9 +1100,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1030 \\ while (x) |_| returns() else |_| unreachable;1100 \\ while (x) |_| returns() else |_| unreachable;
1031 \\}1101 \\}
1032 ,1102 ,
1033 ".tmp_source.zig:5:25: error: expression value is ignored",1103 "tmp.zig:5:25: error: expression value is ignored",
1034 ".tmp_source.zig:9:26: error: expression value is ignored",1104 "tmp.zig:9:26: error: expression value is ignored",
1035 ".tmp_source.zig:13:26: error: expression value is ignored",1105 "tmp.zig:13:26: error: expression value is ignored",
1036 );1106 );
10371107
1038 cases.add(1108 cases.add(
...@@ -1043,7 +1113,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1043,7 +1113,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1043 \\ dump(a);1113 \\ dump(a);
1044 \\}1114 \\}
1045 ,1115 ,
1046 ".tmp_source.zig:1:9: error: missing parameter name",1116 "tmp.zig:1:9: error: missing parameter name",
1047 );1117 );
10481118
1049 cases.add(1119 cases.add(
...@@ -1057,7 +1127,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1057,7 +1127,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1057 \\ for (xx) |f| {}1127 \\ for (xx) |f| {}
1058 \\}1128 \\}
1059 ,1129 ,
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",
1061 );1131 );
10621132
1063 cases.add(1133 cases.add(
...@@ -1068,7 +1138,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1068,7 +1138,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1068 \\ f(g);1138 \\ f(g);
1069 \\}1139 \\}
1070 ,1140 ,
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",
1072 );1142 );
10731143
1074 cases.add(1144 cases.add(
...@@ -1082,7 +1152,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1082,7 +1152,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1082 \\};1152 \\};
1083 \\export fn entry(bar: *Bar) void {}1153 \\export fn entry(bar: *Bar) void {}
1084 ,1154 ,
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'",
1086 );1156 );
10871157
1088 cases.add(1158 cases.add(
...@@ -1095,7 +1165,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1095,7 +1165,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1095 \\ command.exec();1165 \\ command.exec();
1096 \\}1166 \\}
1097 ,1167 ,
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",
1099 );1169 );
11001170
1101 cases.add(1171 cases.add(
...@@ -1108,7 +1178,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1108,7 +1178,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1108 \\ command.exec();1178 \\ command.exec();
1109 \\}1179 \\}
1110 ,1180 ,
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",
1112 );1182 );
11131183
1114 cases.add(1184 cases.add(
...@@ -1118,7 +1188,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1118,7 +1188,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1118 \\ const aligned = @alignCast(4, ptr);1188 \\ const aligned = @alignCast(4, ptr);
1119 \\}1189 \\}
1120 ,1190 ,
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",
1122 );1192 );
11231193
1124 cases.add(1194 cases.add(
...@@ -1127,7 +1197,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1127,7 +1197,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1127 \\ return @ptrToInt(&{}) == @ptrToInt(&{});1197 \\ return @ptrToInt(&{}) == @ptrToInt(&{});
1128 \\}1198 \\}
1129 ,1199 ,
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",
1131 );1201 );
11321202
1133 cases.add(1203 cases.add(
...@@ -1136,7 +1206,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1136,7 +1206,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1136 \\ return @popCount(x);1206 \\ return @popCount(x);
1137 \\}1207 \\}
1138 ,1208 ,
1139 ".tmp_source.zig:2:22: error: expected integer type, found 'f32'",1209 "tmp.zig:2:22: error: expected integer type, found 'f32'",
1140 );1210 );
11411211
1142 cases.add(1212 cases.add(
...@@ -1145,7 +1215,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1145,7 +1215,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1145 \\ _ = @popCount(-1);1215 \\ _ = @popCount(-1);
1146 \\}1216 \\}
1147 ,1217 ,
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",
1149 );1219 );
11501220
1151 cases.addCase(x: {1221 cases.addCase(x: {
...@@ -1161,10 +1231,10 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1161,10 +1231,10 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1161 \\1231 \\
1162 \\fn bar(x: *b.Foo) void {}1232 \\fn bar(x: *b.Foo) void {}
1163 ,1233 ,
1164 ".tmp_source.zig:6:10: error: expected type '*Foo', found '*Foo'",1234 "tmp.zig:6:10: error: expected type '*b.Foo', found '*a.Foo'",
1165 ".tmp_source.zig:6:10: note: pointer type child 'Foo' cannot cast into pointer type child 'Foo'",1235 "tmp.zig:6:10: note: pointer type child 'a.Foo' cannot cast into pointer type child 'b.Foo'",
1166 "a.zig:1:17: note: Foo declared here",1236 "a.zig:1:17: note: a.Foo declared here",
1167 "b.zig:1:17: note: Foo declared here",1237 "b.zig:1:17: note: b.Foo declared here",
1168 );1238 );
11691239
1170 tc.addSourceFile("a.zig",1240 tc.addSourceFile("a.zig",
...@@ -1182,19 +1252,6 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1182,19 +1252,6 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1182 break :x tc;1252 break :x tc;
1183 });1253 });
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
1198 cases.add(1255 cases.add(
1199 "@floatToInt comptime safety",1256 "@floatToInt comptime safety",
1200 \\comptime {1257 \\comptime {
...@@ -1207,9 +1264,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1207,9 +1264,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1207 \\ _ = @floatToInt(u8, f32(256.1));1264 \\ _ = @floatToInt(u8, f32(256.1));
1208 \\}1265 \\}
1209 ,1266 ,
1210 ".tmp_source.zig:2:9: error: integer value '-129' cannot be stored in type 'i8'",1267 "tmp.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'",1268 "tmp.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'",1269 "tmp.zig:8:9: error: integer value '256' cannot be stored in type 'u8'",
1213 );1270 );
12141271
1215 cases.add(1272 cases.add(
...@@ -1218,7 +1275,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1218,7 +1275,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1218 \\ const a: fn () c_void = undefined;1275 \\ const a: fn () c_void = undefined;
1219 \\}1276 \\}
1220 ,1277 ,
1221 ".tmp_source.zig:2:20: error: return type cannot be opaque",1278 "tmp.zig:2:20: error: return type cannot be opaque",
1222 );1279 );
12231280
1224 cases.add(1281 cases.add(
...@@ -1231,7 +1288,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1231,7 +1288,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1231 \\ var y = p.*;1288 \\ var y = p.*;
1232 \\}1289 \\}
1233 ,1290 ,
1234 ".tmp_source.zig:4:23: error: expected type '*?*i32', found '**i32'",1291 "tmp.zig:4:23: error: expected type '*?*i32', found '**i32'",
1235 );1292 );
12361293
1237 cases.add(1294 cases.add(
...@@ -1240,7 +1297,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1240,7 +1297,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1240 \\ const x: [*]const bool = true;1297 \\ const x: [*]const bool = true;
1241 \\}1298 \\}
1242 ,1299 ,
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'",
1244 );1301 );
12451302
1246 cases.add(1303 cases.add(
...@@ -1249,7 +1306,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1249,7 +1306,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1249 \\ return x.*;1306 \\ return x.*;
1250 \\}1307 \\}
1251 ,1308 ,
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'",
1253 );1310 );
12541311
1255 cases.add(1312 cases.add(
...@@ -1262,14 +1319,14 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1262,14 +1319,14 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1262 \\ foo.a += 1;1319 \\ foo.a += 1;
1263 \\}1320 \\}
1264 ,1321 ,
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",
1266 );1323 );
12671324
1268 cases.add(1325 cases.add(
1269 "unknown length pointer to opaque",1326 "unknown length pointer to opaque",
1270 \\export const T = [*]@OpaqueType();1327 \\export const T = [*]@OpaqueType();
1271 ,1328 ,
1272 ".tmp_source.zig:1:18: error: unknown-length pointer to opaque",1329 "tmp.zig:1:18: error: unknown-length pointer to opaque",
1273 );1330 );
12741331
1275 cases.add(1332 cases.add(
...@@ -1285,7 +1342,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1285,7 +1342,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1285 \\ var rule_set = try Foo.init();1342 \\ var rule_set = try Foo.init();
1286 \\}1343 \\}
1287 ,1344 ,
1288 ".tmp_source.zig:2:13: error: expected type 'i32', found 'type'",1345 "tmp.zig:2:13: error: expected type 'i32', found 'type'",
1289 );1346 );
12901347
1291 cases.add(1348 cases.add(
...@@ -1294,7 +1351,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1294,7 +1351,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1294 \\ const slice = ptr[0..2];1351 \\ const slice = ptr[0..2];
1295 \\}1352 \\}
1296 ,1353 ,
1297 ".tmp_source.zig:2:22: error: slice of single-item pointer",1354 "tmp.zig:2:22: error: slice of single-item pointer",
1298 );1355 );
12991356
1300 cases.add(1357 cases.add(
...@@ -1303,7 +1360,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1303,7 +1360,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1303 \\ return ptr[1];1360 \\ return ptr[1];
1304 \\}1361 \\}
1305 ,1362 ,
1306 ".tmp_source.zig:2:15: error: index of single-item pointer",1363 "tmp.zig:2:15: error: index of single-item pointer",
1307 );1364 );
13081365
1309 cases.add(1366 cases.add(
...@@ -1319,10 +1376,10 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1319,10 +1376,10 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1319 \\ return null;1376 \\ return null;
1320 \\}1377 \\}
1321 ,1378 ,
1322 ".tmp_source.zig:5:34: error: expected type '?NextError!i32', found '?OtherError!i32'",1379 "tmp.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'",1380 "tmp.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'",1381 "tmp.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",1382 "tmp.zig:2:26: note: 'error.OutOfMemory' not a member of destination error set",
1326 );1383 );
13271384
1328 cases.add(1385 cases.add(
...@@ -1339,14 +1396,14 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1339,14 +1396,14 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1339 \\ Filled,1396 \\ Filled,
1340 \\};1397 \\};
1341 ,1398 ,
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'",
1343 );1400 );
13441401
1345 cases.add(1402 cases.add(
1346 "invalid field access in comptime",1403 "invalid field access in comptime",
1347 \\comptime { var x = doesnt_exist.whatever; }1404 \\comptime { var x = doesnt_exist.whatever; }
1348 ,1405 ,
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'",
1350 );1407 );
13511408
1352 cases.add(1409 cases.add(
...@@ -1367,8 +1424,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1367,8 +1424,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1367 \\ }1424 \\ }
1368 \\}1425 \\}
1369 ,1426 ,
1370 ".tmp_source.zig:12:9: error: cannot suspend inside suspend block",1427 "tmp.zig:12:9: error: cannot suspend inside suspend block",
1371 ".tmp_source.zig:11:5: note: other suspend block here",1428 "tmp.zig:11:5: note: other suspend block here",
1372 );1429 );
13731430
1374 cases.add(1431 cases.add(
...@@ -1378,8 +1435,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1378,8 +1435,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1378 \\}1435 \\}
1379 \\inline fn b() void { }1436 \\inline fn b() void { }
1380 ,1437 ,
1381 ".tmp_source.zig:2:5: error: functions marked inline must be stored in const or comptime var",1438 "tmp.zig:2:5: error: functions marked inline must be stored in const or comptime var",
1382 ".tmp_source.zig:4:1: note: declared here",1439 "tmp.zig:4:1: note: declared here",
1383 );1440 );
13841441
1385 cases.add(1442 cases.add(
...@@ -1389,7 +1446,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1389,7 +1446,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1389 \\ @panic(e);1446 \\ @panic(e);
1390 \\}1447 \\}
1391 ,1448 ,
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}'",
1393 );1450 );
13941451
1395 cases.add(1452 cases.add(
...@@ -1403,8 +1460,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1403,8 +1460,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1403 \\ var tagName = @tagName(fi);1460 \\ var tagName = @tagName(fi);
1404 \\}1461 \\}
1405 ,1462 ,
1406 ".tmp_source.zig:7:19: error: union has no associated enum",1463 "tmp.zig:7:19: error: union has no associated enum",
1407 ".tmp_source.zig:1:18: note: declared here",1464 "tmp.zig:1:18: note: declared here",
1408 );1465 );
14091466
1410 cases.add(1467 cases.add(
...@@ -1417,7 +1474,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1417,7 +1474,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1417 \\ return error.ShouldBeCompileError;1474 \\ return error.ShouldBeCompileError;
1418 \\}1475 \\}
1419 ,1476 ,
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}'",
1421 );1478 );
14221479
1423 cases.add(1480 cases.add(
...@@ -1426,7 +1483,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1426,7 +1483,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1426 \\ var s = (struct{v: var}){.v=i32(10)};1483 \\ var s = (struct{v: var}){.v=i32(10)};
1427 \\}1484 \\}
1428 ,1485 ,
1429 ".tmp_source.zig:2:23: error: invalid token: 'var'",1486 "tmp.zig:2:23: error: invalid token: 'var'",
1430 );1487 );
14311488
1432 cases.add(1489 cases.add(
...@@ -1436,7 +1493,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1436,7 +1493,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1436 \\ const y = @ptrCast(*i32, &x);1493 \\ const y = @ptrCast(*i32, &x);
1437 \\}1494 \\}
1438 ,1495 ,
1439 ".tmp_source.zig:3:15: error: cast discards const qualifier",1496 "tmp.zig:3:15: error: cast discards const qualifier",
1440 );1497 );
14411498
1442 cases.add(1499 cases.add(
...@@ -1445,7 +1502,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1445,7 +1502,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1445 \\ const slice = ([*]i32)(undefined)[0..1];1502 \\ const slice = ([*]i32)(undefined)[0..1];
1446 \\}1503 \\}
1447 ,1504 ,
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",
1449 );1506 );
14501507
1451 cases.add(1508 cases.add(
...@@ -1460,7 +1517,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1460,7 +1517,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1460 \\ a(c);1517 \\ a(c);
1461 \\}1518 \\}
1462 ,1519 ,
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'",
1464 );1521 );
14651522
1466 cases.add(1523 cases.add(
...@@ -1474,7 +1531,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1474,7 +1531,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1474 \\ }1531 \\ }
1475 \\}1532 \\}
1476 ,1533 ,
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'",
1478 );1535 );
14791536
1480 cases.add(1537 cases.add(
...@@ -1485,7 +1542,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1485,7 +1542,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1485 \\fn foo() !void {1542 \\fn foo() !void {
1486 \\}1543 \\}
1487 ,1544 ,
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",
1489 );1546 );
14901547
1491 cases.add(1548 cases.add(
...@@ -1504,8 +1561,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1504,8 +1561,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1504 \\ }1561 \\ }
1505 \\}1562 \\}
1506 ,1563 ,
1507 ".tmp_source.zig:2:26: error: error.Baz not handled in switch",1564 "tmp.zig:2:26: error: error.Baz not handled in switch",
1508 ".tmp_source.zig:2:26: error: error.Bar not handled in switch",1565 "tmp.zig:2:26: error: error.Bar not handled in switch",
1509 );1566 );
15101567
1511 cases.add(1568 cases.add(
...@@ -1526,8 +1583,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1526,8 +1583,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1526 \\ }1583 \\ }
1527 \\}1584 \\}
1528 ,1585 ,
1529 ".tmp_source.zig:5:14: error: duplicate switch value: '@typeOf(foo).ReturnType.ErrorSet.Foo'",1586 "tmp.zig:5:14: error: duplicate switch value: '@typeOf(foo).ReturnType.ErrorSet.Foo'",
1530 ".tmp_source.zig:3:14: note: other value is here",1587 "tmp.zig:3:14: note: other value is here",
1531 );1588 );
15321589
1533 cases.add("invalid cast from integral type to enum",1590 cases.add("invalid cast from integral type to enum",
...@@ -1542,7 +1599,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1542,7 +1599,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1542 \\ E.One => {},1599 \\ E.One => {},
1543 \\ }1600 \\ }
1544 \\}1601 \\}
1545 , ".tmp_source.zig:9:10: error: expected type 'usize', found 'E'");1602 , "tmp.zig:9:10: error: expected type 'usize', found 'E'");
15461603
1547 cases.add(1604 cases.add(
1548 "range operator in switch used on error set",1605 "range operator in switch used on error set",
...@@ -1560,7 +1617,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1560,7 +1617,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1560 \\ }1617 \\ }
1561 \\}1618 \\}
1562 ,1619 ,
1563 ".tmp_source.zig:3:17: error: operator not allowed for errors",1620 "tmp.zig:3:17: error: operator not allowed for errors",
1564 );1621 );
15651622
1566 cases.add(1623 cases.add(
...@@ -1569,7 +1626,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1569,7 +1626,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1569 \\ const z: ?fn()!void = null;1626 \\ const z: ?fn()!void = null;
1570 \\}1627 \\}
1571 ,1628 ,
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",
1573 );1630 );
15741631
1575 cases.add(1632 cases.add(
...@@ -1579,7 +1636,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1579,7 +1636,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1579 \\ const z = Foo.Bar;1636 \\ const z = Foo.Bar;
1580 \\}1637 \\}
1581 ,1638 ,
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'",
1583 );1640 );
15841641
1585 cases.add(1642 cases.add(
...@@ -1588,7 +1645,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1588,7 +1645,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1588 \\ const z = i32!i32;1645 \\ const z = i32!i32;
1589 \\}1646 \\}
1590 ,1647 ,
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'",
1592 );1649 );
15931650
1594 cases.add(1651 cases.add(
...@@ -1604,7 +1661,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1604,7 +1661,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1604 \\ }1661 \\ }
1605 \\}1662 \\}
1606 ,1663 ,
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",
1608 );1665 );
16091666
1610 cases.add(1667 cases.add(
...@@ -1613,7 +1670,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1613,7 +1670,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1613 \\ const z = error.A > error.B;1670 \\ const z = error.A > error.B;
1614 \\}1671 \\}
1615 ,1672 ,
1616 ".tmp_source.zig:2:23: error: operator not allowed for errors",1673 "tmp.zig:2:23: error: operator not allowed for errors",
1617 );1674 );
16181675
1619 cases.add(1676 cases.add(
...@@ -1625,7 +1682,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1625,7 +1682,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1625 \\ var y = @errSetCast(Set2, x);1682 \\ var y = @errSetCast(Set2, x);
1626 \\}1683 \\}
1627 ,1684 ,
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'",
1629 );1686 );
16301687
1631 cases.add(1688 cases.add(
...@@ -1638,9 +1695,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1638,9 +1695,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1638 \\ return error.B;1695 \\ return error.B;
1639 \\}1696 \\}
1640 ,1697 ,
1641 ".tmp_source.zig:3:35: error: expected type 'SmallErrorSet!i32', found 'anyerror!i32'",1698 "tmp.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'",1699 "tmp.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",1700 "tmp.zig:3:35: note: cannot cast global error set into smaller set",
1644 );1701 );
16451702
1646 cases.add(1703 cases.add(
...@@ -1653,10 +1710,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1653,10 +1710,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1653 \\ return error.B;1710 \\ return error.B;
1654 \\}1711 \\}
1655 ,1712 ,
1656 ".tmp_source.zig:3:31: error: expected type 'SmallErrorSet', found 'anyerror'",1713 "tmp.zig:3:31: error: expected type 'SmallErrorSet', found 'anyerror'",
1657 ".tmp_source.zig:3:31: note: cannot cast global error set into smaller set",1714 "tmp.zig:3:31: note: cannot cast global error set into smaller set",
1658 );1715 );
1659
1660 cases.add(1716 cases.add(
1661 "recursive inferred error set",1717 "recursive inferred error set",
1662 \\export fn entry() void {1718 \\export fn entry() void {
...@@ -1666,7 +1722,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1666,7 +1722,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1666 \\ try foo();1722 \\ try foo();
1667 \\}1723 \\}
1668 ,1724 ,
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",
1670 );1726 );
16711727
1672 cases.add(1728 cases.add(
...@@ -1680,8 +1736,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1680,8 +1736,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1680 \\ var x: Set2 = set1;1736 \\ var x: Set2 = set1;
1681 \\}1737 \\}
1682 ,1738 ,
1683 ".tmp_source.zig:7:19: error: expected type 'Set2', found 'Set1'",1739 "tmp.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",1740 "tmp.zig:1:23: note: 'error.B' not a member of destination error set",
1685 );1741 );
16861742
1687 cases.add(1743 cases.add(
...@@ -1695,7 +1751,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1695,7 +1751,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1695 \\ var y = @intToError(x);1751 \\ var y = @intToError(x);
1696 \\}1752 \\}
1697 ,1753 ,
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",
1699 );1755 );
17001756
1701 cases.add(1757 cases.add(
...@@ -1713,7 +1769,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1713,7 +1769,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1713 \\ var y = @errSetCast(Set2, @intToError(x));1769 \\ var y = @errSetCast(Set2, @intToError(x));
1714 \\}1770 \\}
1715 ,1771 ,
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'",
1717 );1773 );
17181774
1719 cases.add(1775 cases.add(
...@@ -1722,7 +1778,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1722,7 +1778,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1722 \\ _ = @memberCount(anyerror);1778 \\ _ = @memberCount(anyerror);
1723 \\}1779 \\}
1724 ,1780 ,
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",
1726 );1782 );
17271783
1728 cases.add(1784 cases.add(
...@@ -1735,8 +1791,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1735,8 +1791,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1735 \\ const a: Foo = undefined;1791 \\ const a: Foo = undefined;
1736 \\}1792 \\}
1737 ,1793 ,
1738 ".tmp_source.zig:3:5: error: duplicate error: 'Bar'",1794 "tmp.zig:3:5: error: duplicate error: 'Bar'",
1739 ".tmp_source.zig:2:5: note: other error here",1795 "tmp.zig:2:5: note: other error here",
1740 );1796 );
17411797
1742 cases.add(1798 cases.add(
...@@ -1745,7 +1801,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1745,7 +1801,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1745 \\ const x = usize(-10);1801 \\ const x = usize(-10);
1746 \\}1802 \\}
1747 ,1803 ,
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'",
1749 );1805 );
17501806
1751 cases.add(1807 cases.add(
...@@ -1755,7 +1811,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1755,7 +1811,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1755 \\ var arr: [v]u8 = undefined;1811 \\ var arr: [v]u8 = undefined;
1756 \\}1812 \\}
1757 ,1813 ,
1758 ".tmp_source.zig:1:1: error: unable to infer variable type",1814 "tmp.zig:1:1: error: unable to infer variable type",
1759 );1815 );
17601816
1761 cases.add(1817 cases.add(
...@@ -1768,8 +1824,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1768,8 +1824,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1768 \\ const a: Foo = undefined;1824 \\ const a: Foo = undefined;
1769 \\}1825 \\}
1770 ,1826 ,
1771 ".tmp_source.zig:3:5: error: duplicate struct field: 'Bar'",1827 "tmp.zig:3:5: error: duplicate struct field: 'Bar'",
1772 ".tmp_source.zig:2:5: note: other field here",1828 "tmp.zig:2:5: note: other field here",
1773 );1829 );
17741830
1775 cases.add(1831 cases.add(
...@@ -1782,8 +1838,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1782,8 +1838,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1782 \\ const a: Foo = undefined;1838 \\ const a: Foo = undefined;
1783 \\}1839 \\}
1784 ,1840 ,
1785 ".tmp_source.zig:3:5: error: duplicate union field: 'Bar'",1841 "tmp.zig:3:5: error: duplicate union field: 'Bar'",
1786 ".tmp_source.zig:2:5: note: other field here",1842 "tmp.zig:2:5: note: other field here",
1787 );1843 );
17881844
1789 cases.add(1845 cases.add(
...@@ -1797,8 +1853,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1797,8 +1853,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1797 \\ const a: Foo = undefined;1853 \\ const a: Foo = undefined;
1798 \\}1854 \\}
1799 ,1855 ,
1800 ".tmp_source.zig:3:5: error: duplicate enum field: 'Bar'",1856 "tmp.zig:3:5: error: duplicate enum field: 'Bar'",
1801 ".tmp_source.zig:2:5: note: other field here",1857 "tmp.zig:2:5: note: other field here",
1802 );1858 );
18031859
1804 cases.add(1860 cases.add(
...@@ -1808,15 +1864,15 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1808,15 +1864,15 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1808 \\}1864 \\}
1809 \\nakedcc fn foo() void { }1865 \\nakedcc fn foo() void { }
1810 ,1866 ,
1811 ".tmp_source.zig:2:5: error: unable to call function with naked calling convention",1867 "tmp.zig:2:5: error: unable to call function with naked calling convention",
1812 ".tmp_source.zig:4:1: note: declared here",1868 "tmp.zig:4:1: note: declared here",
1813 );1869 );
18141870
1815 cases.add(1871 cases.add(
1816 "function with invalid return type",1872 "function with invalid return type",
1817 \\export fn foo() boid {}1873 \\export fn foo() boid {}
1818 ,1874 ,
1819 ".tmp_source.zig:1:17: error: use of undeclared identifier 'boid'",1875 "tmp.zig:1:17: error: use of undeclared identifier 'boid'",
1820 );1876 );
18211877
1822 cases.add(1878 cases.add(
...@@ -1824,7 +1880,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1824,7 +1880,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1824 \\const Foo = enum { A, B, C };1880 \\const Foo = enum { A, B, C };
1825 \\export fn entry(foo: Foo) void { }1881 \\export fn entry(foo: Foo) void { }
1826 ,1882 ,
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'",
1828 );1884 );
18291885
1830 cases.add(1886 cases.add(
...@@ -1836,7 +1892,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1836,7 +1892,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1836 \\};1892 \\};
1837 \\export fn entry(foo: Foo) void { }1893 \\export fn entry(foo: Foo) void { }
1838 ,1894 ,
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'",
1840 );1896 );
18411897
1842 cases.add(1898 cases.add(
...@@ -1848,7 +1904,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1848,7 +1904,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1848 \\};1904 \\};
1849 \\export fn entry(foo: Foo) void { }1905 \\export fn entry(foo: Foo) void { }
1850 ,1906 ,
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'",
1852 );1908 );
18531909
1854 cases.add(1910 cases.add(
...@@ -1860,7 +1916,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1860,7 +1916,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1860 \\ switch (f) {}1916 \\ switch (f) {}
1861 \\}1917 \\}
1862 ,1918 ,
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",
1864 );1920 );
18651921
1866 cases.add(1922 cases.add(
...@@ -1869,7 +1925,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1869,7 +1925,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1869 \\ var a = 1 >> -1;1925 \\ var a = 1 >> -1;
1870 \\}1926 \\}
1871 ,1927 ,
1872 ".tmp_source.zig:2:18: error: shift by negative value -1",1928 "tmp.zig:2:18: error: shift by negative value -1",
1873 );1929 );
18741930
1875 cases.add(1931 cases.add(
...@@ -1880,7 +1936,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1880,7 +1936,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1880 \\ }1936 \\ }
1881 \\}1937 \\}
1882 ,1938 ,
1883 ".tmp_source.zig:3:9: error: encountered @panic at compile-time",1939 "tmp.zig:3:9: error: encountered @panic at compile-time",
1884 );1940 );
18851941
1886 cases.add(1942 cases.add(
...@@ -1910,7 +1966,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1910,7 +1966,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1910 \\ bogus;1966 \\ bogus;
1911 \\}1967 \\}
1912 ,1968 ,
1913 ".tmp_source.zig:8:5: error: use of undeclared identifier 'bogus'",1969 "tmp.zig:8:5: error: use of undeclared identifier 'bogus'",
1914 );1970 );
19151971
1916 cases.add(1972 cases.add(
...@@ -1923,7 +1979,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1923,7 +1979,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1923 \\ }1979 \\ }
1924 \\}1980 \\}
1925 ,1981 ,
1926 ".tmp_source.zig:4:13: error: label not found: 'outer'",1982 "tmp.zig:4:13: error: label not found: 'outer'",
1927 );1983 );
19281984
1929 cases.add(1985 cases.add(
...@@ -1937,7 +1993,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1937,7 +1993,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1937 \\ }1993 \\ }
1938 \\}1994 \\}
1939 ,1995 ,
1940 ".tmp_source.zig:5:13: error: labeled loop not found: 'outer'",1996 "tmp.zig:5:13: error: labeled loop not found: 'outer'",
1941 );1997 );
19421998
1943 cases.add(1999 cases.add(
...@@ -1950,8 +2006,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1950,8 +2006,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1950 \\2006 \\
1951 \\extern fn bar(x: *void) void { }2007 \\extern fn bar(x: *void) void { }
1952 ,2008 ,
1953 ".tmp_source.zig:1:30: 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'",
1954 ".tmp_source.zig:7:18: 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'",
1955 );2011 );
19562012
1957 cases.add(2013 cases.add(
...@@ -1963,7 +2019,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1963,7 +2019,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1963 \\ var bad = {};2019 \\ var bad = {};
1964 \\}2020 \\}
1965 ,2021 ,
1966 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",2022 "tmp.zig:5:5: error: expected token ';', found 'var'",
1967 );2023 );
19682024
1969 cases.add(2025 cases.add(
...@@ -1975,7 +2031,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1975,7 +2031,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1975 \\ var bad = {};2031 \\ var bad = {};
1976 \\}2032 \\}
1977 ,2033 ,
1978 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",2034 "tmp.zig:5:5: error: expected token ';', found 'var'",
1979 );2035 );
19802036
1981 cases.add(2037 cases.add(
...@@ -1987,7 +2043,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1987,7 +2043,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1987 \\ var bad = {};2043 \\ var bad = {};
1988 \\}2044 \\}
1989 ,2045 ,
1990 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",2046 "tmp.zig:5:5: error: expected token ';', found 'var'",
1991 );2047 );
19922048
1993 cases.add(2049 cases.add(
...@@ -1999,7 +2055,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -1999,7 +2055,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
1999 \\ var bad = {};2055 \\ var bad = {};
2000 \\}2056 \\}
2001 ,2057 ,
2002 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",2058 "tmp.zig:5:5: error: expected token ';', found 'var'",
2003 );2059 );
20042060
2005 cases.add(2061 cases.add(
...@@ -2011,7 +2067,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2011,7 +2067,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2011 \\ var bad = {};2067 \\ var bad = {};
2012 \\}2068 \\}
2013 ,2069 ,
2014 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",2070 "tmp.zig:5:5: error: expected token ';', found 'var'",
2015 );2071 );
20162072
2017 cases.add(2073 cases.add(
...@@ -2023,7 +2079,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2023,7 +2079,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2023 \\ var bad = {};2079 \\ var bad = {};
2024 \\}2080 \\}
2025 ,2081 ,
2026 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",2082 "tmp.zig:5:5: error: expected token ';', found 'var'",
2027 );2083 );
20282084
2029 cases.add(2085 cases.add(
...@@ -2035,7 +2091,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2035,7 +2091,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2035 \\ var bad = {};2091 \\ var bad = {};
2036 \\}2092 \\}
2037 ,2093 ,
2038 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",2094 "tmp.zig:5:5: error: expected token ';', found 'var'",
2039 );2095 );
20402096
2041 cases.add(2097 cases.add(
...@@ -2047,7 +2103,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2047,7 +2103,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2047 \\ var bad = {};2103 \\ var bad = {};
2048 \\}2104 \\}
2049 ,2105 ,
2050 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",2106 "tmp.zig:5:5: error: expected token ';', found 'var'",
2051 );2107 );
20522108
2053 cases.add(2109 cases.add(
...@@ -2059,7 +2115,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2059,7 +2115,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2059 \\ var bad = {};2115 \\ var bad = {};
2060 \\}2116 \\}
2061 ,2117 ,
2062 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",2118 "tmp.zig:5:5: error: expected token ';', found 'var'",
2063 );2119 );
20642120
2065 cases.add(2121 cases.add(
...@@ -2071,7 +2127,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2071,7 +2127,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2071 \\ var bad = {};2127 \\ var bad = {};
2072 \\}2128 \\}
2073 ,2129 ,
2074 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",2130 "tmp.zig:5:5: error: expected token ';', found 'var'",
2075 );2131 );
20762132
2077 cases.add(2133 cases.add(
...@@ -2083,7 +2139,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2083,7 +2139,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2083 \\ var bad = {};2139 \\ var bad = {};
2084 \\}2140 \\}
2085 ,2141 ,
2086 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",2142 "tmp.zig:5:5: error: expected token ';', found 'var'",
2087 );2143 );
20882144
2089 cases.add(2145 cases.add(
...@@ -2095,7 +2151,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2095,7 +2151,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2095 \\ var bad = {};2151 \\ var bad = {};
2096 \\}2152 \\}
2097 ,2153 ,
2098 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",2154 "tmp.zig:5:5: error: expected token ';', found 'var'",
2099 );2155 );
21002156
2101 cases.add(2157 cases.add(
...@@ -2107,7 +2163,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2107,7 +2163,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2107 \\ var bad = {};2163 \\ var bad = {};
2108 \\}2164 \\}
2109 ,2165 ,
2110 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",2166 "tmp.zig:5:5: error: expected token ';', found 'var'",
2111 );2167 );
21122168
2113 cases.add(2169 cases.add(
...@@ -2119,7 +2175,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2119,7 +2175,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2119 \\ var bad = {};2175 \\ var bad = {};
2120 \\}2176 \\}
2121 ,2177 ,
2122 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",2178 "tmp.zig:5:5: error: expected token ';', found 'var'",
2123 );2179 );
21242180
2125 cases.add(2181 cases.add(
...@@ -2131,7 +2187,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2131,7 +2187,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2131 \\ var bad = {};2187 \\ var bad = {};
2132 \\}2188 \\}
2133 ,2189 ,
2134 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",2190 "tmp.zig:5:5: error: expected token ';', found 'var'",
2135 );2191 );
21362192
2137 cases.add(2193 cases.add(
...@@ -2143,7 +2199,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2143,7 +2199,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2143 \\ var bad = {};2199 \\ var bad = {};
2144 \\}2200 \\}
2145 ,2201 ,
2146 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",2202 "tmp.zig:5:5: error: expected token ';', found 'var'",
2147 );2203 );
21482204
2149 cases.add(2205 cases.add(
...@@ -2155,7 +2211,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2155,7 +2211,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2155 \\ var bad = {};2211 \\ var bad = {};
2156 \\}2212 \\}
2157 ,2213 ,
2158 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",2214 "tmp.zig:5:5: error: expected token ';', found 'var'",
2159 );2215 );
21602216
2161 cases.add(2217 cases.add(
...@@ -2167,7 +2223,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2167,7 +2223,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2167 \\ var bad = {};2223 \\ var bad = {};
2168 \\}2224 \\}
2169 ,2225 ,
2170 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",2226 "tmp.zig:5:5: error: expected token ';', found 'var'",
2171 );2227 );
21722228
2173 cases.add(2229 cases.add(
...@@ -2179,7 +2235,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2179,7 +2235,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2179 \\ var bad = {};2235 \\ var bad = {};
2180 \\}2236 \\}
2181 ,2237 ,
2182 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",2238 "tmp.zig:5:5: error: expected token ';', found 'var'",
2183 );2239 );
21842240
2185 cases.add(2241 cases.add(
...@@ -2191,7 +2247,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2191,7 +2247,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2191 \\ var bad = {};2247 \\ var bad = {};
2192 \\}2248 \\}
2193 ,2249 ,
2194 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",2250 "tmp.zig:5:5: error: expected token ';', found 'var'",
2195 );2251 );
21962252
2197 cases.add(2253 cases.add(
...@@ -2203,7 +2259,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2203,7 +2259,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2203 \\ var bad = {};2259 \\ var bad = {};
2204 \\}2260 \\}
2205 ,2261 ,
2206 ".tmp_source.zig:5:5: error: expected token ';', found 'var'",2262 "tmp.zig:5:5: error: expected token ';', found 'var'",
2207 );2263 );
22082264
2209 cases.add(2265 cases.add(
...@@ -2212,7 +2268,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2212,7 +2268,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2212 \\fn a() void {}2268 \\fn a() void {}
2213 \\export fn entry() void { a(); }2269 \\export fn entry() void { a(); }
2214 ,2270 ,
2215 ".tmp_source.zig:2:1: error: redefinition of 'a'",2271 "tmp.zig:2:1: error: redefinition of 'a'",
2216 );2272 );
22172273
2218 cases.add(2274 cases.add(
...@@ -2220,7 +2276,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2220,7 +2276,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2220 \\fn a() noreturn {return;}2276 \\fn a() noreturn {return;}
2221 \\export fn entry() void { a(); }2277 \\export fn entry() void { a(); }
2222 ,2278 ,
2223 ".tmp_source.zig:1:18: error: expected type 'noreturn', found 'void'",2279 "tmp.zig:1:18: error: expected type 'noreturn', found 'void'",
2224 );2280 );
22252281
2226 cases.add(2282 cases.add(
...@@ -2228,7 +2284,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2228,7 +2284,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2228 \\fn a() i32 {}2284 \\fn a() i32 {}
2229 \\export fn entry() void { _ = a(); }2285 \\export fn entry() void { _ = a(); }
2230 ,2286 ,
2231 ".tmp_source.zig:1:12: error: expected type 'i32', found 'void'",2287 "tmp.zig:1:12: error: expected type 'i32', found 'void'",
2232 );2288 );
22332289
2234 cases.add(2290 cases.add(
...@@ -2237,7 +2293,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2237,7 +2293,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2237 \\ b();2293 \\ b();
2238 \\}2294 \\}
2239 ,2295 ,
2240 ".tmp_source.zig:2:5: error: use of undeclared identifier 'b'",2296 "tmp.zig:2:5: error: use of undeclared identifier 'b'",
2241 );2297 );
22422298
2243 cases.add(2299 cases.add(
...@@ -2247,7 +2303,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2247,7 +2303,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2247 \\}2303 \\}
2248 \\fn b(a: i32, b: i32, c: i32) void { }2304 \\fn b(a: i32, b: i32, c: i32) void { }
2249 ,2305 ,
2250 ".tmp_source.zig:2:6: error: expected 3 arguments, found 1",2306 "tmp.zig:2:6: error: expected 3 arguments, found 1",
2251 );2307 );
22522308
2253 cases.add(2309 cases.add(
...@@ -2255,7 +2311,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2255,7 +2311,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2255 \\fn a() bogus {}2311 \\fn a() bogus {}
2256 \\export fn entry() void { _ = a(); }2312 \\export fn entry() void { _ = a(); }
2257 ,2313 ,
2258 ".tmp_source.zig:1:8: error: use of undeclared identifier 'bogus'",2314 "tmp.zig:1:8: error: use of undeclared identifier 'bogus'",
2259 );2315 );
22602316
2261 cases.add(2317 cases.add(
...@@ -2263,7 +2319,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2263,7 +2319,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2263 \\fn a() *noreturn {}2319 \\fn a() *noreturn {}
2264 \\export fn entry() void { _ = a(); }2320 \\export fn entry() void { _ = a(); }
2265 ,2321 ,
2266 ".tmp_source.zig:1:8: error: pointer to noreturn not allowed",2322 "tmp.zig:1:8: error: pointer to noreturn not allowed",
2267 );2323 );
22682324
2269 cases.add(2325 cases.add(
...@@ -2275,7 +2331,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2275,7 +2331,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2275 \\2331 \\
2276 \\fn b() void {}2332 \\fn b() void {}
2277 ,2333 ,
2278 ".tmp_source.zig:3:5: error: unreachable code",2334 "tmp.zig:3:5: error: unreachable code",
2279 );2335 );
22802336
2281 cases.add(2337 cases.add(
...@@ -2283,7 +2339,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2283,7 +2339,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2283 \\const bogus = @import("bogus-does-not-exist.zig",);2339 \\const bogus = @import("bogus-does-not-exist.zig",);
2284 \\export fn entry() void { bogus.bogo(); }2340 \\export fn entry() void { bogus.bogo(); }
2285 ,2341 ,
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'",
2287 );2343 );
22882344
2289 cases.add(2345 cases.add(
...@@ -2294,8 +2350,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2294,8 +2350,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2294 \\ c;2350 \\ c;
2295 \\}2351 \\}
2296 ,2352 ,
2297 ".tmp_source.zig:3:5: error: use of undeclared identifier 'b'",2353 "tmp.zig:3:5: error: use of undeclared identifier 'b'",
2298 ".tmp_source.zig:4:5: error: use of undeclared identifier 'c'",2354 "tmp.zig:4:5: error: use of undeclared identifier 'c'",
2299 );2355 );
23002356
2301 cases.add(2357 cases.add(
...@@ -2304,7 +2360,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2304,7 +2360,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2304 \\}2360 \\}
2305 \\export fn entry() void { f(1, 2); }2361 \\export fn entry() void { f(1, 2); }
2306 ,2362 ,
2307 ".tmp_source.zig:1:15: error: redeclaration of variable 'a'",2363 "tmp.zig:1:15: error: redeclaration of variable 'a'",
2308 );2364 );
23092365
2310 cases.add(2366 cases.add(
...@@ -2314,7 +2370,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2314,7 +2370,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2314 \\ const a = 0;2370 \\ const a = 0;
2315 \\}2371 \\}
2316 ,2372 ,
2317 ".tmp_source.zig:3:5: error: redeclaration of variable 'a'",2373 "tmp.zig:3:5: error: redeclaration of variable 'a'",
2318 );2374 );
23192375
2320 cases.add(2376 cases.add(
...@@ -2324,7 +2380,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2324,7 +2380,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2324 \\}2380 \\}
2325 \\export fn entry() void { f(1); }2381 \\export fn entry() void { f(1); }
2326 ,2382 ,
2327 ".tmp_source.zig:2:5: error: redeclaration of variable 'a'",2383 "tmp.zig:2:5: error: redeclaration of variable 'a'",
2328 );2384 );
23292385
2330 cases.add(2386 cases.add(
...@@ -2334,7 +2390,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2334,7 +2390,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2334 \\ return a;2390 \\ return a;
2335 \\}2391 \\}
2336 ,2392 ,
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'",
2338 );2394 );
23392395
2340 cases.add(2396 cases.add(
...@@ -2343,7 +2399,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2343,7 +2399,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2343 \\ if (0) {}2399 \\ if (0) {}
2344 \\}2400 \\}
2345 ,2401 ,
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'",
2347 );2403 );
23482404
2349 cases.add(2405 cases.add(
...@@ -2352,7 +2408,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2352,7 +2408,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2352 \\ const a = return;2408 \\ const a = return;
2353 \\}2409 \\}
2354 ,2410 ,
2355 ".tmp_source.zig:2:5: error: unreachable code",2411 "tmp.zig:2:5: error: unreachable code",
2356 );2412 );
23572413
2358 cases.add(2414 cases.add(
...@@ -2361,7 +2417,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2361,7 +2417,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2361 \\ const a: noreturn = {};2417 \\ const a: noreturn = {};
2362 \\}2418 \\}
2363 ,2419 ,
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",
2365 );2421 );
23662422
2367 cases.add(2423 cases.add(
...@@ -2369,7 +2425,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2369,7 +2425,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2369 \\fn f(a: noreturn) void {}2425 \\fn f(a: noreturn) void {}
2370 \\export fn entry() void { f(); }2426 \\export fn entry() void { f(); }
2371 ,2427 ,
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",
2373 );2429 );
23742430
2375 cases.add(2431 cases.add(
...@@ -2378,7 +2434,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2378,7 +2434,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2378 \\ 3 = 3;2434 \\ 3 = 3;
2379 \\}2435 \\}
2380 ,2436 ,
2381 ".tmp_source.zig:2:7: error: cannot assign to constant",2437 "tmp.zig:2:7: error: cannot assign to constant",
2382 );2438 );
23832439
2384 cases.add(2440 cases.add(
...@@ -2388,7 +2444,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2388,7 +2444,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2388 \\ a = 4;2444 \\ a = 4;
2389 \\}2445 \\}
2390 ,2446 ,
2391 ".tmp_source.zig:3:7: error: cannot assign to constant",2447 "tmp.zig:3:7: error: cannot assign to constant",
2392 );2448 );
23932449
2394 cases.add(2450 cases.add(
...@@ -2397,7 +2453,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2397,7 +2453,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2397 \\ b = 3;2453 \\ b = 3;
2398 \\}2454 \\}
2399 ,2455 ,
2400 ".tmp_source.zig:2:5: error: use of undeclared identifier 'b'",2456 "tmp.zig:2:5: error: use of undeclared identifier 'b'",
2401 );2457 );
24022458
2403 cases.add(2459 cases.add(
...@@ -2406,7 +2462,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2406,7 +2462,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2406 \\ (const a = 0);2462 \\ (const a = 0);
2407 \\}2463 \\}
2408 ,2464 ,
2409 ".tmp_source.zig:2:6: error: invalid token: 'const'",2465 "tmp.zig:2:6: error: invalid token: 'const'",
2410 );2466 );
24112467
2412 cases.add(2468 cases.add(
...@@ -2415,7 +2471,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2415,7 +2471,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2415 \\ i[i] = i[i];2471 \\ i[i] = i[i];
2416 \\}2472 \\}
2417 ,2473 ,
2418 ".tmp_source.zig:2:5: error: use of undeclared identifier 'i'",2474 "tmp.zig:2:5: error: use of undeclared identifier 'i'",
2419 );2475 );
24202476
2421 cases.add(2477 cases.add(
...@@ -2425,8 +2481,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2425,8 +2481,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2425 \\ bad[bad] = bad[bad];2481 \\ bad[bad] = bad[bad];
2426 \\}2482 \\}
2427 ,2483 ,
2428 ".tmp_source.zig:3:8: error: array access of non-array type 'bool'",2484 "tmp.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'",2485 "tmp.zig:3:19: error: array access of non-array type 'bool'",
2430 );2486 );
24312487
2432 cases.add(2488 cases.add(
...@@ -2437,8 +2493,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2437,8 +2493,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2437 \\ array[bad] = array[bad];2493 \\ array[bad] = array[bad];
2438 \\}2494 \\}
2439 ,2495 ,
2440 ".tmp_source.zig:4:11: error: expected type 'usize', found 'bool'",2496 "tmp.zig:4:11: error: expected type 'usize', found 'bool'",
2441 ".tmp_source.zig:4:24: error: expected type 'usize', found 'bool'",2497 "tmp.zig:4:24: error: expected type 'usize', found 'bool'",
2442 );2498 );
24432499
2444 cases.add(2500 cases.add(
...@@ -2449,7 +2505,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2449,7 +2505,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2449 \\}2505 \\}
2450 \\export fn entry() void { f(); }2506 \\export fn entry() void { f(); }
2451 ,2507 ,
2452 ".tmp_source.zig:3:7: error: cannot assign to constant",2508 "tmp.zig:3:7: error: cannot assign to constant",
2453 );2509 );
24542510
2455 cases.add(2511 cases.add(
...@@ -2460,26 +2516,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2460,26 +2516,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2460 \\}2516 \\}
2461 \\export fn entry() void { f(true); }2517 \\export fn entry() void { f(true); }
2462 ,2518 ,
2463 ".tmp_source.zig:2:42: error: integer value 1 cannot be implicitly casted to type 'void'",2519 "tmp.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'",2520 "tmp.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",
2483 );2521 );
24842522
2485 cases.add(2523 cases.add(
...@@ -2491,8 +2529,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2491,8 +2529,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2491 \\ const y = a.bar;2529 \\ const y = a.bar;
2492 \\}2530 \\}
2493 ,2531 ,
2494 ".tmp_source.zig:4:6: error: no member named 'foo' in struct 'A'",2532 "tmp.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'",2533 "tmp.zig:5:16: error: no member named 'bar' in struct 'A'",
2496 );2534 );
24972535
2498 cases.add(2536 cases.add(
...@@ -2500,7 +2538,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2500,7 +2538,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2500 \\const A = struct { x : i32, };2538 \\const A = struct { x : i32, };
2501 \\const A = struct { y : i32, };2539 \\const A = struct { y : i32, };
2502 ,2540 ,
2503 ".tmp_source.zig:2:1: error: redefinition of 'A'",2541 "tmp.zig:2:1: error: redefinition of 'A'",
2504 );2542 );
25052543
2506 cases.add(2544 cases.add(
...@@ -2508,7 +2546,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2508,7 +2546,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2508 \\const A = enum {};2546 \\const A = enum {};
2509 \\const A = enum {};2547 \\const A = enum {};
2510 ,2548 ,
2511 ".tmp_source.zig:2:1: error: redefinition of 'A'",2549 "tmp.zig:2:1: error: redefinition of 'A'",
2512 );2550 );
25132551
2514 cases.add(2552 cases.add(
...@@ -2516,8 +2554,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2516,8 +2554,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2516 \\var a : i32 = 1;2554 \\var a : i32 = 1;
2517 \\var a : i32 = 2;2555 \\var a : i32 = 2;
2518 ,2556 ,
2519 ".tmp_source.zig:2:1: error: redefinition of 'a'",2557 "tmp.zig:2:1: error: redefinition of 'a'",
2520 ".tmp_source.zig:1:1: note: previous definition is here",2558 "tmp.zig:1:1: note: previous definition is here",
2521 );2559 );
25222560
2523 cases.add(2561 cases.add(
...@@ -2536,7 +2574,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2536,7 +2574,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2536 \\ };2574 \\ };
2537 \\}2575 \\}
2538 ,2576 ,
2539 ".tmp_source.zig:11:9: error: duplicate field",2577 "tmp.zig:11:9: error: duplicate field",
2540 );2578 );
25412579
2542 cases.add(2580 cases.add(
...@@ -2555,7 +2593,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2555,7 +2593,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2555 \\ };2593 \\ };
2556 \\}2594 \\}
2557 ,2595 ,
2558 ".tmp_source.zig:9:17: error: missing field: 'x'",2596 "tmp.zig:9:17: error: missing field: 'x'",
2559 );2597 );
25602598
2561 cases.add(2599 cases.add(
...@@ -2573,7 +2611,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2573,7 +2611,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2573 \\ };2611 \\ };
2574 \\}2612 \\}
2575 ,2613 ,
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'",
2577 );2615 );
25782616
2579 cases.add(2617 cases.add(
...@@ -2582,7 +2620,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2582,7 +2620,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2582 \\ break;2620 \\ break;
2583 \\}2621 \\}
2584 ,2622 ,
2585 ".tmp_source.zig:2:5: error: break expression outside loop",2623 "tmp.zig:2:5: error: break expression outside loop",
2586 );2624 );
25872625
2588 cases.add(2626 cases.add(
...@@ -2591,7 +2629,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2591,7 +2629,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2591 \\ continue;2629 \\ continue;
2592 \\}2630 \\}
2593 ,2631 ,
2594 ".tmp_source.zig:2:5: error: continue expression outside loop",2632 "tmp.zig:2:5: error: continue expression outside loop",
2595 );2633 );
25962634
2597 cases.add(2635 cases.add(
...@@ -2600,7 +2638,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2600,7 +2638,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2600 \\ if (true) |x| { }2638 \\ if (true) |x| { }
2601 \\}2639 \\}
2602 ,2640 ,
2603 ".tmp_source.zig:2:9: error: expected optional type, found 'bool'",2641 "tmp.zig:2:9: error: expected optional type, found 'bool'",
2604 );2642 );
26052643
2606 cases.add(2644 cases.add(
...@@ -2610,7 +2648,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2610,7 +2648,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2610 \\}2648 \\}
2611 \\export fn entry() void { _ = f(); }2649 \\export fn entry() void { _ = f(); }
2612 ,2650 ,
2613 ".tmp_source.zig:2:15: error: unreachable code",2651 "tmp.zig:2:15: error: unreachable code",
2614 );2652 );
26152653
2616 cases.add(2654 cases.add(
...@@ -2619,18 +2657,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2619,18 +2657,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2619 \\}2657 \\}
2620 \\export fn entry() void { _ = f(); }2658 \\export fn entry() void { _ = f(); }
2621 ,2659 ,
2622 ".tmp_source.zig:1:8: error: invalid builtin function: 'bogus'",2660 "tmp.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",
2634 );2661 );
26352662
2636 cases.add(2663 cases.add(
...@@ -2638,7 +2665,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2638,7 +2665,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2638 \\fn f(noalias x: i32) void {}2665 \\fn f(noalias x: i32) void {}
2639 \\export fn entry() void { f(1234); }2666 \\export fn entry() void { f(1234); }
2640 ,2667 ,
2641 ".tmp_source.zig:1:6: error: noalias on non-pointer parameter",2668 "tmp.zig:1:6: error: noalias on non-pointer parameter",
2642 );2669 );
26432670
2644 cases.add(2671 cases.add(
...@@ -2646,7 +2673,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2646,7 +2673,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2646 \\const foo = []u16{.x = 1024,};2673 \\const foo = []u16{.x = 1024,};
2647 \\export fn entry() usize { return @sizeOf(@typeOf(foo)); }2674 \\export fn entry() usize { return @sizeOf(@typeOf(foo)); }
2648 ,2675 ,
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",
2650 );2677 );
26512678
2652 cases.add(2679 cases.add(
...@@ -2656,7 +2683,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2656,7 +2683,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2656 \\ return 1;2683 \\ return 1;
2657 \\}2684 \\}
2658 ,2685 ,
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",
2660 );2687 );
26612688
2662 cases.add(2689 cases.add(
...@@ -2672,10 +2699,10 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2672,10 +2699,10 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2672 \\ f(1234);2699 \\ f(1234);
2673 \\}2700 \\}
2674 ,2701 ,
2675 ".tmp_source.zig:4:6: error: redefinition of 'Foo'",2702 "tmp.zig:4:6: error: redefinition of 'Foo'",
2676 ".tmp_source.zig:1:1: note: previous definition is here",2703 "tmp.zig:1:1: note: previous definition is here",
2677 ".tmp_source.zig:5:5: error: redefinition of 'Bar'",2704 "tmp.zig:5:5: error: redefinition of 'Bar'",
2678 ".tmp_source.zig:2:1: note: previous definition is here",2705 "tmp.zig:2:1: note: previous definition is here",
2679 );2706 );
26802707
2681 cases.add(2708 cases.add(
...@@ -2696,7 +2723,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2696,7 +2723,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2696 \\2723 \\
2697 \\export fn entry() usize { return @sizeOf(@typeOf(f)); }2724 \\export fn entry() usize { return @sizeOf(@typeOf(f)); }
2698 ,2725 ,
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",
2700 );2727 );
27012728
2702 cases.add(2729 cases.add(
...@@ -2719,8 +2746,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2719,8 +2746,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2719 \\2746 \\
2720 \\export fn entry() usize { return @sizeOf(@typeOf(f)); }2747 \\export fn entry() usize { return @sizeOf(@typeOf(f)); }
2721 ,2748 ,
2722 ".tmp_source.zig:13:15: error: duplicate switch value",2749 "tmp.zig:13:15: error: duplicate switch value",
2723 ".tmp_source.zig:10:15: note: other value is here",2750 "tmp.zig:10:15: note: other value is here",
2724 );2751 );
27252752
2726 cases.add(2753 cases.add(
...@@ -2744,8 +2771,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2744,8 +2771,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2744 \\2771 \\
2745 \\export fn entry() usize { return @sizeOf(@typeOf(f)); }2772 \\export fn entry() usize { return @sizeOf(@typeOf(f)); }
2746 ,2773 ,
2747 ".tmp_source.zig:13:15: error: duplicate switch value",2774 "tmp.zig:13:15: error: duplicate switch value",
2748 ".tmp_source.zig:10:15: note: other value is here",2775 "tmp.zig:10:15: note: other value is here",
2749 );2776 );
27502777
2751 cases.add(2778 cases.add(
...@@ -2761,7 +2788,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2761,7 +2788,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2761 \\ f(1234);2788 \\ f(1234);
2762 \\}2789 \\}
2763 ,2790 ,
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",
2765 );2792 );
27662793
2767 cases.add(2794 cases.add(
...@@ -2773,7 +2800,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2773,7 +2800,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2773 \\}2800 \\}
2774 \\export fn entry() usize { return @sizeOf(@typeOf(foo)); }2801 \\export fn entry() usize { return @sizeOf(@typeOf(foo)); }
2775 ,2802 ,
2776 ".tmp_source.zig:2:5: error: switch must handle all possibilities",2803 "tmp.zig:2:5: error: switch must handle all possibilities",
2777 );2804 );
27782805
2779 cases.add(2806 cases.add(
...@@ -2788,8 +2815,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2788,8 +2815,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2788 \\}2815 \\}
2789 \\export fn entry() usize { return @sizeOf(@typeOf(foo)); }2816 \\export fn entry() usize { return @sizeOf(@typeOf(foo)); }
2790 ,2817 ,
2791 ".tmp_source.zig:6:9: error: duplicate switch value",2818 "tmp.zig:6:9: error: duplicate switch value",
2792 ".tmp_source.zig:5:14: note: previous value is here",2819 "tmp.zig:5:14: note: previous value is here",
2793 );2820 );
27942821
2795 cases.add(2822 cases.add(
...@@ -2802,7 +2829,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2802,7 +2829,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2802 \\const y: u8 = 100;2829 \\const y: u8 = 100;
2803 \\export fn entry() usize { return @sizeOf(@typeOf(foo)); }2830 \\export fn entry() usize { return @sizeOf(@typeOf(foo)); }
2804 ,2831 ,
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'",
2806 );2833 );
28072834
2808 cases.add(2835 cases.add(
...@@ -2811,7 +2838,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2811,7 +2838,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2811 \\const x = foo();2838 \\const x = foo();
2812 \\export fn entry() i32 { return x; }2839 \\export fn entry() i32 { return x; }
2813 ,2840 ,
2814 ".tmp_source.zig:2:11: error: unable to evaluate constant expression",2841 "tmp.zig:2:11: error: unable to evaluate constant expression",
2815 );2842 );
28162843
2817 cases.add(2844 cases.add(
...@@ -2822,7 +2849,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2822,7 +2849,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2822 \\2849 \\
2823 \\export fn entry() usize { return @sizeOf(@typeOf(a)); }2850 \\export fn entry() usize { return @sizeOf(@typeOf(a)); }
2824 ,2851 ,
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'",
2826 );2853 );
28272854
2828 cases.add(2855 cases.add(
...@@ -2833,7 +2860,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2833,7 +2860,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2833 \\var s: [10]u8 = undefined;2860 \\var s: [10]u8 = undefined;
2834 \\export fn entry() usize { return @sizeOf(@typeOf(f)); }2861 \\export fn entry() usize { return @sizeOf(@typeOf(f)); }
2835 ,2862 ,
2836 ".tmp_source.zig:2:12: error: unable to evaluate constant expression",2863 "tmp.zig:2:12: error: unable to evaluate constant expression",
2837 );2864 );
28382865
2839 cases.add(2866 cases.add(
...@@ -2841,7 +2868,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2841,7 +2868,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2841 \\const c = @cImport(@cInclude("bogus.h"));2868 \\const c = @cImport(@cInclude("bogus.h"));
2842 \\export fn entry() usize { return @sizeOf(@typeOf(c.bogo)); }2869 \\export fn entry() usize { return @sizeOf(@typeOf(c.bogo)); }
2843 ,2870 ,
2844 ".tmp_source.zig:1:11: error: C import failed",2871 "tmp.zig:1:11: error: C import failed",
2845 ".h:1:10: note: 'bogus.h' file not found",2872 ".h:1:10: note: 'bogus.h' file not found",
2846 );2873 );
28472874
...@@ -2852,7 +2879,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2852,7 +2879,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2852 \\fn foo() *const i32 { return y; }2879 \\fn foo() *const i32 { return y; }
2853 \\export fn entry() usize { return @sizeOf(@typeOf(foo)); }2880 \\export fn entry() usize { return @sizeOf(@typeOf(foo)); }
2854 ,2881 ,
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'",
2856 );2883 );
28572884
2858 cases.add(2885 cases.add(
...@@ -2860,7 +2887,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2860,7 +2887,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2860 \\const x : u8 = 300;2887 \\const x : u8 = 300;
2861 \\export fn entry() usize { return @sizeOf(@typeOf(x)); }2888 \\export fn entry() usize { return @sizeOf(@typeOf(x)); }
2862 ,2889 ,
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'",
2864 );2891 );
28652892
2866 cases.add(2893 cases.add(
...@@ -2871,8 +2898,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2871,8 +2898,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2871 \\}2898 \\}
2872 \\export fn entry() u16 { return f(); }2899 \\export fn entry() u16 { return f(); }
2873 ,2900 ,
2874 ".tmp_source.zig:3:14: error: RHS of shift is too large for LHS type",2901 "tmp.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",2902 "tmp.zig:3:17: note: value 8 cannot fit into type u3",
2876 );2903 );
28772904
2878 cases.add(2905 cases.add(
...@@ -2880,7 +2907,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2880,7 +2907,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2880 \\const x = 2 == 2.0;2907 \\const x = 2 == 2.0;
2881 \\export fn entry() usize { return @sizeOf(@typeOf(x)); }2908 \\export fn entry() usize { return @sizeOf(@typeOf(x)); }
2882 ,2909 ,
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'",
2884 );2911 );
28852912
2886 cases.add(2913 cases.add(
...@@ -2909,7 +2936,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2909,7 +2936,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2909 \\2936 \\
2910 \\export fn entry() usize { return @sizeOf(@typeOf(f)); }2937 \\export fn entry() usize { return @sizeOf(@typeOf(f)); }
2911 ,2938 ,
2912 ".tmp_source.zig:20:34: error: expected 1 arguments, found 0",2939 "tmp.zig:20:34: error: expected 1 arguments, found 0",
2913 );2940 );
29142941
2915 cases.add(2942 cases.add(
...@@ -2918,8 +2945,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2918,8 +2945,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2918 \\fn f(i32) void {}2945 \\fn f(i32) void {}
2919 \\export fn entry() usize { return @sizeOf(@typeOf(f)); }2946 \\export fn entry() usize { return @sizeOf(@typeOf(f)); }
2920 ,2947 ,
2921 ".tmp_source.zig:1:1: error: missing function name",2948 "tmp.zig:1:1: error: missing function name",
2922 ".tmp_source.zig:2:6: error: missing parameter name",2949 "tmp.zig:2:6: error: missing parameter name",
2923 );2950 );
29242951
2925 cases.add(2952 cases.add(
...@@ -2930,7 +2957,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2930,7 +2957,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2930 \\fn c() i32 {return 2;}2957 \\fn c() i32 {return 2;}
2931 \\export fn entry() usize { return @sizeOf(@typeOf(fns)); }2958 \\export fn entry() usize { return @sizeOf(@typeOf(fns)); }
2932 ,2959 ,
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'",
2934 );2961 );
29352962
2936 cases.add(2963 cases.add(
...@@ -2942,7 +2969,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2942,7 +2969,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2942 \\2969 \\
2943 \\export fn entry() usize { return @sizeOf(@typeOf(fns)); }2970 \\export fn entry() usize { return @sizeOf(@typeOf(fns)); }
2944 ,2971 ,
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'",
2946 );2973 );
29472974
2948 cases.add(2975 cases.add(
...@@ -2951,16 +2978,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2951,16 +2978,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2951 \\fn func() bogus {}2978 \\fn func() bogus {}
2952 \\export fn entry() usize { return @sizeOf(@typeOf(func)); }2979 \\export fn entry() usize { return @sizeOf(@typeOf(func)); }
2953 ,2980 ,
2954 ".tmp_source.zig:2:1: error: redefinition of 'func'",2981 "tmp.zig:2:1: error: redefinition of 'func'",
2955 ".tmp_source.zig:1:11: error: use of undeclared identifier 'bogus'",2982 "tmp.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 '",
2964 );2983 );
29652984
2966 cases.add(2985 cases.add(
...@@ -2973,9 +2992,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2973,9 +2992,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2973 \\2992 \\
2974 \\export fn entry() usize { return @sizeOf(@typeOf(Foo)); }2993 \\export fn entry() usize { return @sizeOf(@typeOf(Foo)); }
2975 ,2994 ,
2976 ".tmp_source.zig:5:25: error: unable to evaluate constant expression",2995 "tmp.zig:5:25: error: unable to evaluate constant expression",
2977 ".tmp_source.zig:2:12: note: called from here",2996 "tmp.zig:2:12: note: called from here",
2978 ".tmp_source.zig:2:8: note: called from here",2997 "tmp.zig:2:8: note: called from here",
2979 );2998 );
29802999
2981 cases.add(3000 cases.add(
...@@ -2987,7 +3006,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -2987,7 +3006,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
2987 \\3006 \\
2988 \\export fn entry() usize { return @sizeOf(@typeOf(x)); }3007 \\export fn entry() usize { return @sizeOf(@typeOf(x)); }
2989 ,3008 ,
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'",
2991 );3010 );
29923011
2993 cases.add(3012 cases.add(
...@@ -3002,10 +3021,10 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3002,10 +3021,10 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3002 \\export fn entry3() usize { return @sizeOf(@typeOf(int_x)); }3021 \\export fn entry3() usize { return @sizeOf(@typeOf(int_x)); }
3003 \\export fn entry4() usize { return @sizeOf(@typeOf(float_x)); }3022 \\export fn entry4() usize { return @sizeOf(@typeOf(float_x)); }
3004 ,3023 ,
3005 ".tmp_source.zig:1:21: error: division by zero",3024 "tmp.zig:1:21: error: division by zero",
3006 ".tmp_source.zig:2:25: error: division by zero",3025 "tmp.zig:2:25: error: division by zero",
3007 ".tmp_source.zig:3:22: error: division by zero",3026 "tmp.zig:3:22: error: division by zero",
3008 ".tmp_source.zig:4:26: error: division by zero",3027 "tmp.zig:4:26: error: division by zero",
3009 );3028 );
30103029
3011 cases.add(3030 cases.add(
...@@ -3015,7 +3034,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3015,7 +3034,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3015 \\3034 \\
3016 \\export fn entry() usize { return @sizeOf(@typeOf(foo)); }3035 \\export fn entry() usize { return @sizeOf(@typeOf(foo)); }
3017 ,3036 ,
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",
3019 );3038 );
30203039
3021 cases.add(3040 cases.add(
...@@ -3025,7 +3044,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3025,7 +3044,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3025 \\3044 \\
3026 \\export fn entry() usize { return @sizeOf(@typeOf(invalid)); }3045 \\export fn entry() usize { return @sizeOf(@typeOf(invalid)); }
3027 ,3046 ,
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'",
3029 );3048 );
30303049
3031 cases.add(3050 cases.add(
...@@ -3037,7 +3056,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3037,7 +3056,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3037 \\3056 \\
3038 \\export fn entry() usize { return @sizeOf(@typeOf(test1)); }3057 \\export fn entry() usize { return @sizeOf(@typeOf(test1)); }
3039 ,3058 ,
3040 ".tmp_source.zig:3:16: error: unable to evaluate constant expression",3059 "tmp.zig:3:16: error: unable to evaluate constant expression",
3041 );3060 );
30423061
3043 cases.add(3062 cases.add(
...@@ -3046,7 +3065,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3046,7 +3065,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3046 \\3065 \\
3047 \\export fn entry() usize { return @sizeOf(@typeOf(a)); }3066 \\export fn entry() usize { return @sizeOf(@typeOf(a)); }
3048 ,3067 ,
3049 ".tmp_source.zig:1:16: error: expected type '*u8', found '(null)'",3068 "tmp.zig:1:16: error: expected type '*u8', found '(null)'",
3050 );3069 );
30513070
3052 cases.add(3071 cases.add(
...@@ -3056,7 +3075,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3056,7 +3075,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3056 \\ const pointer = &array[0];3075 \\ const pointer = &array[0];
3057 \\}3076 \\}
3058 ,3077 ,
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",
3060 );3079 );
30613080
3062 cases.add(3081 cases.add(
...@@ -3068,8 +3087,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3068,8 +3087,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3068 \\3087 \\
3069 \\export fn entry() usize { return @sizeOf(@typeOf(y)); }3088 \\export fn entry() usize { return @sizeOf(@typeOf(y)); }
3070 ,3089 ,
3071 ".tmp_source.zig:3:14: error: division by zero",3090 "tmp.zig:3:14: error: division by zero",
3072 ".tmp_source.zig:1:14: note: called from here",3091 "tmp.zig:1:14: note: called from here",
3073 );3092 );
30743093
3075 cases.add(3094 cases.add(
...@@ -3078,7 +3097,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3078,7 +3097,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3078 \\3097 \\
3079 \\export fn entry() usize { return @sizeOf(@typeOf(x)); }3098 \\export fn entry() usize { return @sizeOf(@typeOf(x)); }
3080 ,3099 ,
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",
3082 );3101 );
30833102
3084 cases.add(3103 cases.add(
...@@ -3088,7 +3107,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3088,7 +3107,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3088 \\ _ = a / a;3107 \\ _ = a / a;
3089 \\}3108 \\}
3090 ,3109 ,
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",
3092 );3111 );
30933112
3094 cases.add(3113 cases.add(
...@@ -3098,7 +3117,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3098,7 +3117,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3098 \\ a /= a;3117 \\ a /= a;
3099 \\}3118 \\}
3100 ,3119 ,
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",
3102 );3121 );
31033122
3104 cases.add(3123 cases.add(
...@@ -3108,7 +3127,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3108,7 +3127,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3108 \\ _ = a % a;3127 \\ _ = a % a;
3109 \\}3128 \\}
3110 ,3129 ,
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",
3112 );3131 );
31133132
3114 cases.add(3133 cases.add(
...@@ -3118,7 +3137,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3118,7 +3137,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3118 \\ a %= a;3137 \\ a %= a;
3119 \\}3138 \\}
3120 ,3139 ,
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",
3122 );3141 );
31233142
3124 cases.add(3143 cases.add(
...@@ -3128,7 +3147,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3128,7 +3147,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3128 \\ _ = a + a;3147 \\ _ = a + a;
3129 \\}3148 \\}
3130 ,3149 ,
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",
3132 );3151 );
31333152
3134 cases.add(3153 cases.add(
...@@ -3138,7 +3157,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3138,7 +3157,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3138 \\ a += a;3157 \\ a += a;
3139 \\}3158 \\}
3140 ,3159 ,
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",
3142 );3161 );
31433162
3144 cases.add(3163 cases.add(
...@@ -3148,7 +3167,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3148,7 +3167,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3148 \\ _ = a +% a;3167 \\ _ = a +% a;
3149 \\}3168 \\}
3150 ,3169 ,
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",
3152 );3171 );
31533172
3154 cases.add(3173 cases.add(
...@@ -3158,7 +3177,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3158,7 +3177,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3158 \\ a +%= a;3177 \\ a +%= a;
3159 \\}3178 \\}
3160 ,3179 ,
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",
3162 );3181 );
31633182
3164 cases.add(3183 cases.add(
...@@ -3168,7 +3187,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3168,7 +3187,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3168 \\ _ = a - a;3187 \\ _ = a - a;
3169 \\}3188 \\}
3170 ,3189 ,
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",
3172 );3191 );
31733192
3174 cases.add(3193 cases.add(
...@@ -3178,7 +3197,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3178,7 +3197,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3178 \\ a -= a;3197 \\ a -= a;
3179 \\}3198 \\}
3180 ,3199 ,
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",
3182 );3201 );
31833202
3184 cases.add(3203 cases.add(
...@@ -3188,7 +3207,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3188,7 +3207,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3188 \\ _ = a -% a;3207 \\ _ = a -% a;
3189 \\}3208 \\}
3190 ,3209 ,
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",
3192 );3211 );
31933212
3194 cases.add(3213 cases.add(
...@@ -3198,7 +3217,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3198,7 +3217,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3198 \\ a -%= a;3217 \\ a -%= a;
3199 \\}3218 \\}
3200 ,3219 ,
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",
3202 );3221 );
32033222
3204 cases.add(3223 cases.add(
...@@ -3208,7 +3227,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3208,7 +3227,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3208 \\ _ = a * a;3227 \\ _ = a * a;
3209 \\}3228 \\}
3210 ,3229 ,
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",
3212 );3231 );
32133232
3214 cases.add(3233 cases.add(
...@@ -3218,7 +3237,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3218,7 +3237,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3218 \\ a *= a;3237 \\ a *= a;
3219 \\}3238 \\}
3220 ,3239 ,
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",
3222 );3241 );
32233242
3224 cases.add(3243 cases.add(
...@@ -3228,7 +3247,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3228,7 +3247,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3228 \\ _ = a *% a;3247 \\ _ = a *% a;
3229 \\}3248 \\}
3230 ,3249 ,
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",
3232 );3251 );
32333252
3234 cases.add(3253 cases.add(
...@@ -3238,7 +3257,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3238,7 +3257,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3238 \\ a *%= a;3257 \\ a *%= a;
3239 \\}3258 \\}
3240 ,3259 ,
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",
3242 );3261 );
32433262
3244 cases.add(3263 cases.add(
...@@ -3248,7 +3267,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3248,7 +3267,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3248 \\ _ = a << 2;3267 \\ _ = a << 2;
3249 \\}3268 \\}
3250 ,3269 ,
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",
3252 );3271 );
32533272
3254 cases.add(3273 cases.add(
...@@ -3258,7 +3277,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3258,7 +3277,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3258 \\ a <<= 2;3277 \\ a <<= 2;
3259 \\}3278 \\}
3260 ,3279 ,
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",
3262 );3281 );
32633282
3264 cases.add(3283 cases.add(
...@@ -3268,7 +3287,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3268,7 +3287,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3268 \\ _ = a >> 2;3287 \\ _ = a >> 2;
3269 \\}3288 \\}
3270 ,3289 ,
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",
3272 );3291 );
32733292
3274 cases.add(3293 cases.add(
...@@ -3278,7 +3297,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3278,7 +3297,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3278 \\ a >>= 2;3297 \\ a >>= 2;
3279 \\}3298 \\}
3280 ,3299 ,
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",
3282 );3301 );
32833302
3284 cases.add(3303 cases.add(
...@@ -3288,7 +3307,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3288,7 +3307,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3288 \\ _ = a & a;3307 \\ _ = a & a;
3289 \\}3308 \\}
3290 ,3309 ,
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",
3292 );3311 );
32933312
3294 cases.add(3313 cases.add(
...@@ -3298,7 +3317,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3298,7 +3317,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3298 \\ a &= a;3317 \\ a &= a;
3299 \\}3318 \\}
3300 ,3319 ,
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",
3302 );3321 );
33033322
3304 cases.add(3323 cases.add(
...@@ -3308,7 +3327,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3308,7 +3327,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3308 \\ _ = a | a;3327 \\ _ = a | a;
3309 \\}3328 \\}
3310 ,3329 ,
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",
3312 );3331 );
33133332
3314 cases.add(3333 cases.add(
...@@ -3318,7 +3337,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3318,7 +3337,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3318 \\ a |= a;3337 \\ a |= a;
3319 \\}3338 \\}
3320 ,3339 ,
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",
3322 );3341 );
33233342
3324 cases.add(3343 cases.add(
...@@ -3328,7 +3347,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3328,7 +3347,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3328 \\ _ = a ^ a;3347 \\ _ = a ^ a;
3329 \\}3348 \\}
3330 ,3349 ,
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",
3332 );3351 );
33333352
3334 cases.add(3353 cases.add(
...@@ -3338,7 +3357,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3338,7 +3357,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3338 \\ a ^= a;3357 \\ a ^= a;
3339 \\}3358 \\}
3340 ,3359 ,
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",
3342 );3361 );
33433362
3344 cases.add(3363 cases.add(
...@@ -3348,7 +3367,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3348,7 +3367,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3348 \\ _ = a == a;3367 \\ _ = a == a;
3349 \\}3368 \\}
3350 ,3369 ,
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",
3352 );3371 );
33533372
3354 cases.add(3373 cases.add(
...@@ -3358,7 +3377,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3358,7 +3377,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3358 \\ _ = a != a;3377 \\ _ = a != a;
3359 \\}3378 \\}
3360 ,3379 ,
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",
3362 );3381 );
33633382
3364 cases.add(3383 cases.add(
...@@ -3368,7 +3387,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3368,7 +3387,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3368 \\ _ = a > a;3387 \\ _ = a > a;
3369 \\}3388 \\}
3370 ,3389 ,
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",
3372 );3391 );
33733392
3374 cases.add(3393 cases.add(
...@@ -3378,7 +3397,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3378,7 +3397,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3378 \\ _ = a >= a;3397 \\ _ = a >= a;
3379 \\}3398 \\}
3380 ,3399 ,
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",
3382 );3401 );
33833402
3384 cases.add(3403 cases.add(
...@@ -3388,7 +3407,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3388,7 +3407,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3388 \\ _ = a < a;3407 \\ _ = a < a;
3389 \\}3408 \\}
3390 ,3409 ,
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",
3392 );3411 );
33933412
3394 cases.add(3413 cases.add(
...@@ -3398,7 +3417,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3398,7 +3417,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3398 \\ _ = a <= a;3417 \\ _ = a <= a;
3399 \\}3418 \\}
3400 ,3419 ,
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",
3402 );3421 );
34033422
3404 cases.add(3423 cases.add(
...@@ -3408,7 +3427,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3408,7 +3427,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3408 \\ _ = a and a;3427 \\ _ = a and a;
3409 \\}3428 \\}
3410 ,3429 ,
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",
3412 );3431 );
34133432
3414 cases.add(3433 cases.add(
...@@ -3418,7 +3437,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3418,7 +3437,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3418 \\ _ = a or a;3437 \\ _ = a or a;
3419 \\}3438 \\}
3420 ,3439 ,
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",
3422 );3441 );
34233442
3424 cases.add(3443 cases.add(
...@@ -3428,7 +3447,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3428,7 +3447,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3428 \\ _ = -a;3447 \\ _ = -a;
3429 \\}3448 \\}
3430 ,3449 ,
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",
3432 );3451 );
34333452
3434 cases.add(3453 cases.add(
...@@ -3438,7 +3457,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3438,7 +3457,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3438 \\ _ = -%a;3457 \\ _ = -%a;
3439 \\}3458 \\}
3440 ,3459 ,
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",
3442 );3461 );
34433462
3444 cases.add(3463 cases.add(
...@@ -3448,7 +3467,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3448,7 +3467,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3448 \\ _ = ~a;3467 \\ _ = ~a;
3449 \\}3468 \\}
3450 ,3469 ,
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",
3452 );3471 );
34533472
3454 cases.add(3473 cases.add(
...@@ -3458,7 +3477,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3458,7 +3477,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3458 \\ _ = !a;3477 \\ _ = !a;
3459 \\}3478 \\}
3460 ,3479 ,
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",
3462 );3481 );
34633482
3464 cases.add(3483 cases.add(
...@@ -3468,7 +3487,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3468,7 +3487,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3468 \\ _ = a orelse false;3487 \\ _ = a orelse false;
3469 \\}3488 \\}
3470 ,3489 ,
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",
3472 );3491 );
34733492
3474 cases.add(3493 cases.add(
...@@ -3478,7 +3497,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3478,7 +3497,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3478 \\ _ = a catch |err| false;3497 \\ _ = a catch |err| false;
3479 \\}3498 \\}
3480 ,3499 ,
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",
3482 );3501 );
34833502
3484 cases.add(3503 cases.add(
...@@ -3488,7 +3507,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3488,7 +3507,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3488 \\ _ = a.*;3507 \\ _ = a.*;
3489 \\}3508 \\}
3490 ,3509 ,
3491 ".tmp_source.zig:3:9: error: attempt to dereference undefined value",3510 "tmp.zig:3:9: error: attempt to dereference undefined value",
3492 );3511 );
34933512
3494 cases.add(3513 cases.add(
...@@ -3500,8 +3519,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3500,8 +3519,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3500 \\3519 \\
3501 \\export fn entry() usize { return @sizeOf(@typeOf(seventh_fib_number)); }3520 \\export fn entry() usize { return @sizeOf(@typeOf(seventh_fib_number)); }
3502 ,3521 ,
3503 ".tmp_source.zig:3:21: error: evaluation exceeded 1000 backwards branches",3522 "tmp.zig:3:21: error: evaluation exceeded 1000 backwards branches",
3504 ".tmp_source.zig:3:21: note: called from here",3523 "tmp.zig:3:21: note: called from here",
3505 );3524 );
35063525
3507 cases.add(3526 cases.add(
...@@ -3510,7 +3529,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3510,7 +3529,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3510 \\3529 \\
3511 \\export fn entry() usize { return @sizeOf(@typeOf(resource)); }3530 \\export fn entry() usize { return @sizeOf(@typeOf(resource)); }
3512 ,3531 ,
3513 ".tmp_source.zig:1:29: error: unable to find '",3532 "tmp.zig:1:29: error: unable to find '",
3514 "bogus.txt'",3533 "bogus.txt'",
3515 );3534 );
35163535
...@@ -3524,7 +3543,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3524,7 +3543,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3524 \\3543 \\
3525 \\export fn entry() usize { return @sizeOf(@typeOf(a)); }3544 \\export fn entry() usize { return @sizeOf(@typeOf(a)); }
3526 ,3545 ,
3527 ".tmp_source.zig:4:21: error: unable to evaluate constant expression",3546 "tmp.zig:4:21: error: unable to evaluate constant expression",
3528 );3547 );
35293548
3530 cases.add(3549 cases.add(
...@@ -3541,8 +3560,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3541,8 +3560,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3541 \\3560 \\
3542 \\export fn entry() usize { return @sizeOf(@typeOf(a)); }3561 \\export fn entry() usize { return @sizeOf(@typeOf(a)); }
3543 ,3562 ,
3544 ".tmp_source.zig:6:24: error: unable to evaluate constant expression",3563 "tmp.zig:6:24: error: unable to evaluate constant expression",
3545 ".tmp_source.zig:4:17: note: called from here",3564 "tmp.zig:4:17: note: called from here",
3546 );3565 );
35473566
3548 cases.add(3567 cases.add(
...@@ -3554,7 +3573,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3554,7 +3573,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3554 \\ bad_fn_call();3573 \\ bad_fn_call();
3555 \\}3574 \\}
3556 ,3575 ,
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'",
3558 );3577 );
35593578
3560 cases.add(3579 cases.add(
...@@ -3573,8 +3592,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3573,8 +3592,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3573 \\export fn entry1() usize { return @sizeOf(@typeOf(bad_eql_1)); }3592 \\export fn entry1() usize { return @sizeOf(@typeOf(bad_eql_1)); }
3574 \\export fn entry2() usize { return @sizeOf(@typeOf(bad_eql_2)); }3593 \\export fn entry2() usize { return @sizeOf(@typeOf(bad_eql_2)); }
3575 ,3594 ,
3576 ".tmp_source.zig:2:14: error: operator not allowed for type '[]u8'",3595 "tmp.zig:2:14: error: operator not allowed for type '[]u8'",
3577 ".tmp_source.zig:9:16: error: operator not allowed for type 'EnumWithData'",3596 "tmp.zig:9:16: error: operator not allowed for type 'EnumWithData'",
3578 );3597 );
35793598
3580 cases.add(3599 cases.add(
...@@ -3590,7 +3609,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3590,7 +3609,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3590 \\ return 2;3609 \\ return 2;
3591 \\}3610 \\}
3592 ,3611 ,
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",
3594 );3613 );
35953614
3596 cases.add(3615 cases.add(
...@@ -3601,7 +3620,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3601,7 +3620,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3601 \\ while (!@cmpxchgWeak(i32, &x, 1234, 5678, AtomicOrder.Monotonic, AtomicOrder.SeqCst)) {}3620 \\ while (!@cmpxchgWeak(i32, &x, 1234, 5678, AtomicOrder.Monotonic, AtomicOrder.SeqCst)) {}
3602 \\}3621 \\}
3603 ,3622 ,
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",
3605 );3624 );
36063625
3607 cases.add(3626 cases.add(
...@@ -3612,7 +3631,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3612,7 +3631,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3612 \\ while (!@cmpxchgWeak(i32, &x, 1234, 5678, AtomicOrder.Unordered, AtomicOrder.Unordered)) {}3631 \\ while (!@cmpxchgWeak(i32, &x, 1234, 5678, AtomicOrder.Unordered, AtomicOrder.Unordered)) {}
3613 \\}3632 \\}
3614 ,3633 ,
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",
3616 );3635 );
36173636
3618 cases.add(3637 cases.add(
...@@ -3624,8 +3643,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3624,8 +3643,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3624 \\3643 \\
3625 \\export fn entry() usize { return @sizeOf(@typeOf(y)); }3644 \\export fn entry() usize { return @sizeOf(@typeOf(y)); }
3626 ,3645 ,
3627 ".tmp_source.zig:3:12: error: negation caused overflow",3646 "tmp.zig:3:12: error: negation caused overflow",
3628 ".tmp_source.zig:1:14: note: called from here",3647 "tmp.zig:1:14: note: called from here",
3629 );3648 );
36303649
3631 cases.add(3650 cases.add(
...@@ -3637,8 +3656,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3637,8 +3656,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3637 \\3656 \\
3638 \\export fn entry() usize { return @sizeOf(@typeOf(y)); }3657 \\export fn entry() usize { return @sizeOf(@typeOf(y)); }
3639 ,3658 ,
3640 ".tmp_source.zig:3:14: error: operation caused overflow",3659 "tmp.zig:3:14: error: operation caused overflow",
3641 ".tmp_source.zig:1:14: note: called from here",3660 "tmp.zig:1:14: note: called from here",
3642 );3661 );
36433662
3644 cases.add(3663 cases.add(
...@@ -3650,8 +3669,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3650,8 +3669,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3650 \\3669 \\
3651 \\export fn entry() usize { return @sizeOf(@typeOf(y)); }3670 \\export fn entry() usize { return @sizeOf(@typeOf(y)); }
3652 ,3671 ,
3653 ".tmp_source.zig:3:14: error: operation caused overflow",3672 "tmp.zig:3:14: error: operation caused overflow",
3654 ".tmp_source.zig:1:14: note: called from here",3673 "tmp.zig:1:14: note: called from here",
3655 );3674 );
36563675
3657 cases.add(3676 cases.add(
...@@ -3663,8 +3682,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3663,8 +3682,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3663 \\3682 \\
3664 \\export fn entry() usize { return @sizeOf(@typeOf(y)); }3683 \\export fn entry() usize { return @sizeOf(@typeOf(y)); }
3665 ,3684 ,
3666 ".tmp_source.zig:3:14: error: operation caused overflow",3685 "tmp.zig:3:14: error: operation caused overflow",
3667 ".tmp_source.zig:1:14: note: called from here",3686 "tmp.zig:1:14: note: called from here",
3668 );3687 );
36693688
3670 cases.add(3689 cases.add(
...@@ -3676,7 +3695,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3676,7 +3695,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3676 \\3695 \\
3677 \\export fn entry() usize { return @sizeOf(@typeOf(f)); }3696 \\export fn entry() usize { return @sizeOf(@typeOf(f)); }
3678 ,3697 ,
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'",
3680 );3699 );
36813700
3682 cases.add(3701 cases.add(
...@@ -3686,8 +3705,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3686,8 +3705,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3686 \\}3705 \\}
3687 \\fn something() anyerror!void { }3706 \\fn something() anyerror!void { }
3688 ,3707 ,
3689 ".tmp_source.zig:2:5: error: expected type 'void', found 'anyerror'",3708 "tmp.zig:2:5: error: expected type 'void', found 'anyerror'",
3690 ".tmp_source.zig:1:15: note: return type declared here",3709 "tmp.zig:1:15: note: return type declared here",
3691 );3710 );
36923711
3693 cases.add(3712 cases.add(
...@@ -3700,7 +3719,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3700,7 +3719,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3700 \\ }3719 \\ }
3701 \\}3720 \\}
3702 ,3721 ,
3703 ".tmp_source.zig:2:13: error: unable to evaluate constant expression",3722 "tmp.zig:2:13: error: unable to evaluate constant expression",
3704 );3723 );
37053724
3706 cases.add(3725 cases.add(
...@@ -3709,7 +3728,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3709,7 +3728,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3709 \\ return x + y;3728 \\ return x + y;
3710 \\}3729 \\}
3711 ,3730 ,
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'",
3713 );3732 );
37143733
3715 cases.add(3734 cases.add(
...@@ -3720,7 +3739,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3720,7 +3739,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3720 \\}3739 \\}
3721 \\export fn entry() usize { return @sizeOf(@typeOf(f)); }3740 \\export fn entry() usize { return @sizeOf(@typeOf(f)); }
3722 ,3741 ,
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'",
3724 );3743 );
37253744
3726 cases.add(3745 cases.add(
...@@ -3730,8 +3749,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3730,8 +3749,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3730 \\ var foo = @bytesToSlice(u32, array)[0];3749 \\ var foo = @bytesToSlice(u32, array)[0];
3731 \\}3750 \\}
3732 ,3751 ,
3733 ".tmp_source.zig:3:15: error: unable to convert [5]u8 to []align(1) const u32: size mismatch",3752 "tmp.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",3753 "tmp.zig:3:29: note: u32 has size 4; remaining bytes: 1",
3735 );3754 );
37363755
3737 cases.add(3756 cases.add(
...@@ -3755,8 +3774,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3755,8 +3774,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3755 \\ list.length = 10;3774 \\ list.length = 10;
3756 \\}3775 \\}
3757 ,3776 ,
3758 ".tmp_source.zig:3:7: error: unable to evaluate constant expression",3777 "tmp.zig:3:7: error: unable to evaluate constant expression",
3759 ".tmp_source.zig:16:19: note: called from here",3778 "tmp.zig:16:19: note: called from here",
3760 );3779 );
37613780
3762 cases.add(3781 cases.add(
...@@ -3767,7 +3786,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3767,7 +3786,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3767 \\}3786 \\}
3768 \\export fn entry() usize { return @sizeOf(@typeOf(f)); }3787 \\export fn entry() usize { return @sizeOf(@typeOf(f)); }
3769 ,3788 ,
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'",
3771 );3790 );
37723791
3773 cases.add(3792 cases.add(
...@@ -3781,7 +3800,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3781,7 +3800,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3781 \\}3800 \\}
3782 \\export fn entry() usize { return @sizeOf(@typeOf(f)); }3801 \\export fn entry() usize { return @sizeOf(@typeOf(f)); }
3783 ,3802 ,
3784 ".tmp_source.zig:6:15: error: expected 2 arguments, found 3",3803 "tmp.zig:6:15: error: expected 2 arguments, found 3",
3785 );3804 );
37863805
3787 cases.add(3806 cases.add(
...@@ -3791,7 +3810,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3791,7 +3810,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3791 \\ cstr[0] = 'W';3810 \\ cstr[0] = 'W';
3792 \\}3811 \\}
3793 ,3812 ,
3794 ".tmp_source.zig:3:11: error: cannot assign to constant",3813 "tmp.zig:3:11: error: cannot assign to constant",
3795 );3814 );
37963815
3797 cases.add(3816 cases.add(
...@@ -3801,14 +3820,14 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3801,14 +3820,14 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3801 \\ cstr[0] = 'W';3820 \\ cstr[0] = 'W';
3802 \\}3821 \\}
3803 ,3822 ,
3804 ".tmp_source.zig:3:11: error: cannot assign to constant",3823 "tmp.zig:3:11: error: cannot assign to constant",
3805 );3824 );
38063825
3807 cases.add(3826 cases.add(
3808 "main function with bogus args type",3827 "main function with bogus args type",
3809 \\pub fn main(args: [][]bogus) !void {}3828 \\pub fn main(args: [][]bogus) !void {}
3810 ,3829 ,
3811 ".tmp_source.zig:1:23: error: use of undeclared identifier 'bogus'",3830 "tmp.zig:1:23: error: use of undeclared identifier 'bogus'",
3812 );3831 );
38133832
3814 cases.add(3833 cases.add(
...@@ -3844,7 +3863,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3844,7 +3863,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3844 \\3863 \\
3845 \\export fn entry() usize { return @sizeOf(@typeOf(foo)); }3864 \\export fn entry() usize { return @sizeOf(@typeOf(foo)); }
3846 ,3865 ,
3847 ".tmp_source.zig:5:16: error: use of undeclared identifier 'JsonList'",3866 "tmp.zig:5:16: error: use of undeclared identifier 'JsonList'",
3848 );3867 );
38493868
3850 cases.add(3869 cases.add(
...@@ -3865,7 +3884,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3865,7 +3884,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3865 \\ derp.init();3884 \\ derp.init();
3866 \\}3885 \\}
3867 ,3886 ,
3868 ".tmp_source.zig:14:5: error: expected type 'i32', found 'Foo'",3887 "tmp.zig:14:5: error: expected type 'i32', found 'Foo'",
3869 );3888 );
38703889
3871 cases.add(3890 cases.add(
...@@ -3895,7 +3914,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3895,7 +3914,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3895 \\ x.init();3914 \\ x.init();
3896 \\}3915 \\}
3897 ,3916 ,
3898 ".tmp_source.zig:23:5: error: expected type '*Allocator', found '*List'",3917 "tmp.zig:23:5: error: expected type '*Allocator', found '*List'",
3899 );3918 );
39003919
3901 cases.add(3920 cases.add(
...@@ -3906,7 +3925,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3906,7 +3925,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3906 \\3925 \\
3907 \\export fn entry() usize { return @sizeOf(@typeOf(block_aligned_stuff)); }3926 \\export fn entry() usize { return @sizeOf(@typeOf(block_aligned_stuff)); }
3908 ,3927 ,
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'",
3910 );3929 );
39113930
3912 cases.addCase(x: {3931 cases.addCase(x: {
...@@ -3918,7 +3937,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3918,7 +3937,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3918 \\ foo.privateFunction();3937 \\ foo.privateFunction();
3919 \\}3938 \\}
3920 ,3939 ,
3921 ".tmp_source.zig:4:8: error: 'privateFunction' is private",3940 "tmp.zig:4:8: error: 'privateFunction' is private",
3922 "foo.zig:1:1: note: declared here",3941 "foo.zig:1:1: note: declared here",
3923 );3942 );
39243943
...@@ -3936,7 +3955,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3936,7 +3955,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3936 \\3955 \\
3937 \\export fn entry() usize { return @sizeOf(@typeOf(a)); }3956 \\export fn entry() usize { return @sizeOf(@typeOf(a)); }
3938 ,3957 ,
3939 ".tmp_source.zig:2:11: error: expected type 'type', found 'i32'",3958 "tmp.zig:2:11: error: expected type 'type', found 'i32'",
3940 );3959 );
39413960
3942 cases.add(3961 cases.add(
...@@ -3949,7 +3968,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3949,7 +3968,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3949 \\ f.field = 0;3968 \\ f.field = 0;
3950 \\}3969 \\}
3951 ,3970 ,
3952 ".tmp_source.zig:6:13: error: cannot assign to constant",3971 "tmp.zig:6:13: error: cannot assign to constant",
3953 );3972 );
39543973
3955 cases.add(3974 cases.add(
...@@ -3970,7 +3989,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3970,7 +3989,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3970 \\3989 \\
3971 \\export fn entry() usize { return @sizeOf(@typeOf(testTrickyDefer)); }3990 \\export fn entry() usize { return @sizeOf(@typeOf(testTrickyDefer)); }
3972 ,3991 ,
3973 ".tmp_source.zig:4:11: error: cannot return from defer expression",3992 "tmp.zig:4:11: error: cannot return from defer expression",
3974 );3993 );
39753994
3976 cases.add(3995 cases.add(
...@@ -3985,8 +4004,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -3985,8 +4004,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
3985 \\4004 \\
3986 \\export fn entry() usize { return @sizeOf(@typeOf(foo)); }4005 \\export fn entry() usize { return @sizeOf(@typeOf(foo)); }
3987 ,4006 ,
3988 ".tmp_source.zig:2:26: error: index 1 outside argument list of size 1",4007 "tmp.zig:2:26: error: index 1 outside argument list of size 1",
3989 ".tmp_source.zig:6:15: note: called from here",4008 "tmp.zig:6:15: note: called from here",
3990 );4009 );
39914010
3992 cases.add(4011 cases.add(
...@@ -4005,7 +4024,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4005,7 +4024,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4005 \\4024 \\
4006 \\export fn entry() usize { return @sizeOf(@typeOf(bar)); }4025 \\export fn entry() usize { return @sizeOf(@typeOf(bar)); }
4007 ,4026 ,
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",
4009 );4028 );
40104029
4011 cases.add(4030 cases.add(
...@@ -4014,7 +4033,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4014,7 +4033,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4014 \\ var vga_mem: u16 = 0xB8000;4033 \\ var vga_mem: u16 = 0xB8000;
4015 \\}4034 \\}
4016 ,4035 ,
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'",
4018 );4037 );
40194038
4020 cases.add(4039 cases.add(
...@@ -4022,7 +4041,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4022,7 +4041,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4022 \\const some_data: [100]u8 align(3) = undefined;4041 \\const some_data: [100]u8 align(3) = undefined;
4023 \\export fn entry() usize { return @sizeOf(@typeOf(some_data)); }4042 \\export fn entry() usize { return @sizeOf(@typeOf(some_data)); }
4024 ,4043 ,
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",
4026 );4045 );
40274046
4028 cases.add(4047 cases.add(
...@@ -4030,7 +4049,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4030,7 +4049,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4030 \\extern fn foo() align(3) void;4049 \\extern fn foo() align(3) void;
4031 \\export fn entry() void { return foo(); }4050 \\export fn entry() void { return foo(); }
4032 ,4051 ,
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",
4034 );4053 );
40354054
4036 cases.add(4055 cases.add(
...@@ -4044,9 +4063,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4044,9 +4063,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4044 \\ @compileLog("end",);4063 \\ @compileLog("end",);
4045 \\}4064 \\}
4046 ,4065 ,
4047 ".tmp_source.zig:5:5: error: found compile log statement",4066 "tmp.zig:5:5: error: found compile log statement",
4048 ".tmp_source.zig:6:5: error: found compile log statement",4067 "tmp.zig:6:5: error: found compile log statement",
4049 ".tmp_source.zig:7:5: error: found compile log statement",4068 "tmp.zig:7:5: error: found compile log statement",
4050 );4069 );
40514070
4052 cases.add(4071 cases.add(
...@@ -4067,7 +4086,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4067,7 +4086,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4067 \\4086 \\
4068 \\export fn entry() usize { return @sizeOf(@typeOf(foo)); }4087 \\export fn entry() usize { return @sizeOf(@typeOf(foo)); }
4069 ,4088 ,
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'",
4071 );4090 );
40724091
4073 cases.add(4092 cases.add(
...@@ -4084,8 +4103,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4084,8 +4103,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4084 \\ if (!ok) unreachable;4103 \\ if (!ok) unreachable;
4085 \\}4104 \\}
4086 ,4105 ,
4087 ".tmp_source.zig:10:14: error: unable to evaluate constant expression",4106 "tmp.zig:10:14: error: unable to evaluate constant expression",
4088 ".tmp_source.zig:6:20: note: called from here",4107 "tmp.zig:6:20: note: called from here",
4089 );4108 );
40904109
4091 cases.add(4110 cases.add(
...@@ -4099,8 +4118,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4099,8 +4118,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4099 \\4118 \\
4100 \\fn bar() void { }4119 \\fn bar() void { }
4101 ,4120 ,
4102 ".tmp_source.zig:3:5: error: control flow attempts to use compile-time variable at runtime",4121 "tmp.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",4122 "tmp.zig:3:24: note: compile-time variable assigned here",
4104 );4123 );
41054124
4106 cases.add(4125 cases.add(
...@@ -4110,7 +4129,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4110,7 +4129,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4110 \\}4129 \\}
4111 \\fn bar() i32 { return 0; }4130 \\fn bar() i32 { return 0; }
4112 ,4131 ,
4113 ".tmp_source.zig:2:8: error: expression value is ignored",4132 "tmp.zig:2:8: error: expression value is ignored",
4114 );4133 );
41154134
4116 cases.add(4135 cases.add(
...@@ -4120,7 +4139,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4120,7 +4139,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4120 \\}4139 \\}
4121 \\fn bar() anyerror!i32 { return 0; }4140 \\fn bar() anyerror!i32 { return 0; }
4122 ,4141 ,
4123 ".tmp_source.zig:2:11: error: expression value is ignored",4142 "tmp.zig:2:11: error: expression value is ignored",
4124 );4143 );
41254144
4126 cases.add(4145 cases.add(
...@@ -4129,7 +4148,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4129,7 +4148,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4129 \\ 1;4148 \\ 1;
4130 \\}4149 \\}
4131 ,4150 ,
4132 ".tmp_source.zig:2:5: error: expression value is ignored",4151 "tmp.zig:2:5: error: expression value is ignored",
4133 );4152 );
41344153
4135 cases.add(4154 cases.add(
...@@ -4138,7 +4157,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4138,7 +4157,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4138 \\ comptime {1;}4157 \\ comptime {1;}
4139 \\}4158 \\}
4140 ,4159 ,
4141 ".tmp_source.zig:2:15: error: expression value is ignored",4160 "tmp.zig:2:15: error: expression value is ignored",
4142 );4161 );
41434162
4144 cases.add(4163 cases.add(
...@@ -4147,7 +4166,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4147,7 +4166,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4147 \\ comptime 1;4166 \\ comptime 1;
4148 \\}4167 \\}
4149 ,4168 ,
4150 ".tmp_source.zig:2:5: error: expression value is ignored",4169 "tmp.zig:2:5: error: expression value is ignored",
4151 );4170 );
41524171
4153 cases.add(4172 cases.add(
...@@ -4156,7 +4175,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4156,7 +4175,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4156 \\ defer {1;}4175 \\ defer {1;}
4157 \\}4176 \\}
4158 ,4177 ,
4159 ".tmp_source.zig:2:12: error: expression value is ignored",4178 "tmp.zig:2:12: error: expression value is ignored",
4160 );4179 );
41614180
4162 cases.add(4181 cases.add(
...@@ -4166,7 +4185,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4166,7 +4185,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4166 \\}4185 \\}
4167 \\fn bar() anyerror!i32 { return 0; }4186 \\fn bar() anyerror!i32 { return 0; }
4168 ,4187 ,
4169 ".tmp_source.zig:2:14: error: expression value is ignored",4188 "tmp.zig:2:14: error: expression value is ignored",
4170 );4189 );
41714190
4172 cases.add(4191 cases.add(
...@@ -4180,7 +4199,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4180,7 +4199,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4180 \\4199 \\
4181 \\export fn entry() usize { return @sizeOf(@typeOf(pass)); }4200 \\export fn entry() usize { return @sizeOf(@typeOf(pass)); }
4182 ,4201 ,
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'",
4184 );4203 );
41854204
4186 cases.add(4205 cases.add(
...@@ -4196,7 +4215,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4196,7 +4215,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4196 \\4215 \\
4197 \\export fn entry() usize { return @sizeOf(@typeOf(foo)); }4216 \\export fn entry() usize { return @sizeOf(@typeOf(foo)); }
4198 ,4217 ,
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'",
4200 );4219 );
42014220
4202 cases.addCase(x: {4221 cases.addCase(x: {
...@@ -4209,7 +4228,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4209,7 +4228,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4209 \\}4228 \\}
4210 ,4229 ,
4211 "foo.zig:1:1: error: exported symbol collision: 'bar'",4230 "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",
4213 );4232 );
42144233
4215 tc.addSourceFile("foo.zig",4234 tc.addSourceFile("foo.zig",
...@@ -4228,7 +4247,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4228,7 +4247,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4228 \\ foo(global_array);4247 \\ foo(global_array);
4229 \\}4248 \\}
4230 ,4249 ,
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'",
4232 );4251 );
42334252
4234 cases.add(4253 cases.add(
...@@ -4237,7 +4256,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4237,7 +4256,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4237 \\ return @ptrCast(usize, a);4256 \\ return @ptrCast(usize, a);
4238 \\}4257 \\}
4239 ,4258 ,
4240 ".tmp_source.zig:2:21: error: expected pointer, found 'usize'",4259 "tmp.zig:2:21: error: expected pointer, found 'usize'",
4241 );4260 );
42424261
4243 cases.add(4262 cases.add(
...@@ -4254,7 +4273,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4254,7 +4273,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4254 \\ );4273 \\ );
4255 \\}4274 \\}
4256 ,4275 ,
4257 ".tmp_source.zig:6:5: error: unable to evaluate constant expression",4276 "tmp.zig:6:5: error: unable to evaluate constant expression",
4258 );4277 );
42594278
4260 cases.add(4279 cases.add(
...@@ -4264,7 +4283,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4264,7 +4283,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4264 \\ const foo = builtin.Arch.x86;4283 \\ const foo = builtin.Arch.x86;
4265 \\}4284 \\}
4266 ,4285 ,
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'",
4268 );4287 );
42694288
4270 cases.add(4289 cases.add(
...@@ -4274,7 +4293,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4274,7 +4293,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4274 \\ var y: *void = @intToPtr(*void, x);4293 \\ var y: *void = @intToPtr(*void, x);
4275 \\}4294 \\}
4276 ,4295 ,
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",
4278 );4297 );
42794298
4280 cases.add(4299 cases.add(
...@@ -4284,7 +4303,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4284,7 +4303,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4284 \\ return @fieldParentPtr(Foo, "a", a);4303 \\ return @fieldParentPtr(Foo, "a", a);
4285 \\}4304 \\}
4286 ,4305 ,
4287 ".tmp_source.zig:3:28: error: expected struct type, found 'i32'",4306 "tmp.zig:3:28: error: expected struct type, found 'i32'",
4288 );4307 );
42894308
4290 cases.add(4309 cases.add(
...@@ -4296,7 +4315,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4296,7 +4315,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4296 \\ return @fieldParentPtr(Foo, "a", a);4315 \\ return @fieldParentPtr(Foo, "a", a);
4297 \\}4316 \\}
4298 ,4317 ,
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'",
4300 );4319 );
43014320
4302 cases.add(4321 cases.add(
...@@ -4308,7 +4327,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4308,7 +4327,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4308 \\ return @fieldParentPtr(Foo, "a", a);4327 \\ return @fieldParentPtr(Foo, "a", a);
4309 \\}4328 \\}
4310 ,4329 ,
4311 ".tmp_source.zig:5:38: error: expected pointer, found 'i32'",4330 "tmp.zig:5:38: error: expected pointer, found 'i32'",
4312 );4331 );
43134332
4314 cases.add(4333 cases.add(
...@@ -4324,7 +4343,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4324,7 +4343,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4324 \\ const another_foo_ptr = @fieldParentPtr(Foo, "b", field_ptr);4343 \\ const another_foo_ptr = @fieldParentPtr(Foo, "b", field_ptr);
4325 \\}4344 \\}
4326 ,4345 ,
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",
4328 );4347 );
43294348
4330 cases.add(4349 cases.add(
...@@ -4339,7 +4358,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4339,7 +4358,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4339 \\ const another_foo_ptr = @fieldParentPtr(Foo, "b", &foo.a);4358 \\ const another_foo_ptr = @fieldParentPtr(Foo, "b", &foo.a);
4340 \\}4359 \\}
4341 ,4360 ,
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'",
4343 );4362 );
43444363
4345 cases.add(4364 cases.add(
...@@ -4349,7 +4368,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4349,7 +4368,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4349 \\ return @byteOffsetOf(Foo, "a",);4368 \\ return @byteOffsetOf(Foo, "a",);
4350 \\}4369 \\}
4351 ,4370 ,
4352 ".tmp_source.zig:3:26: error: expected struct type, found 'i32'",4371 "tmp.zig:3:26: error: expected struct type, found 'i32'",
4353 );4372 );
43544373
4355 cases.add(4374 cases.add(
...@@ -4361,14 +4380,14 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4361,14 +4380,14 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4361 \\ return @byteOffsetOf(Foo, "a",);4380 \\ return @byteOffsetOf(Foo, "a",);
4362 \\}4381 \\}
4363 ,4382 ,
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'",
4365 );4384 );
43664385
4367 cases.addExe(4386 cases.addExe(
4368 "missing main fn in executable",4387 "missing main fn in executable",
4369 \\4388 \\
4370 ,4389 ,
4371 "error: no member named 'main' in '",4390 "error: root source file has no member called 'main'",
4372 );4391 );
43734392
4374 cases.addExe(4393 cases.addExe(
...@@ -4376,7 +4395,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4376,7 +4395,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4376 \\fn main() void {}4395 \\fn main() void {}
4377 ,4396 ,
4378 "error: 'main' is private",4397 "error: 'main' is private",
4379 ".tmp_source.zig:1:1: note: declared here",4398 "tmp.zig:1:1: note: declared here",
4380 );4399 );
43814400
4382 cases.add(4401 cases.add(
...@@ -4386,7 +4405,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4386,7 +4405,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4386 \\ return foo;4405 \\ return foo;
4387 \\}4406 \\}
4388 ,4407 ,
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'",
4390 );4409 );
43914410
4392 cases.add(4411 cases.add(
...@@ -4396,7 +4415,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4396,7 +4415,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4396 \\ return foo;4415 \\ return foo;
4397 \\}4416 \\}
4398 ,4417 ,
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'",
4400 );4419 );
44014420
4402 cases.add(4421 cases.add(
...@@ -4406,7 +4425,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4406,7 +4425,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4406 \\ foo();4425 \\ foo();
4407 \\}4426 \\}
4408 ,4427 ,
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'",
4410 );4429 );
44114430
4412 cases.add(4431 cases.add(
...@@ -4416,7 +4435,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4416,7 +4435,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4416 \\ return &a;4435 \\ return &a;
4417 \\}4436 \\}
4418 ,4437 ,
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",
4420 );4439 );
44214440
4422 cases.add(4441 cases.add(
...@@ -4427,7 +4446,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4427,7 +4446,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4427 \\ return if (c) &a else &b;4446 \\ return if (c) &a else &b;
4428 \\}4447 \\}
4429 ,4448 ,
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",
4431 );4450 );
44324451
4433 cases.add(4452 cases.add(
...@@ -4452,8 +4471,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4452,8 +4471,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4452 \\ if (!ok) unreachable;4471 \\ if (!ok) unreachable;
4453 \\}4472 \\}
4454 ,4473 ,
4455 ".tmp_source.zig:9:17: error: redefinition of 'Self'",4474 "tmp.zig:9:17: error: redefinition of 'Self'",
4456 ".tmp_source.zig:5:9: note: previous definition is here",4475 "tmp.zig:5:9: note: previous definition is here",
4457 );4476 );
44584477
4459 cases.add(4478 cases.add(
...@@ -4463,7 +4482,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4463,7 +4482,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4463 \\}4482 \\}
4464 \\fn bar() ?i32 { return 1; }4483 \\fn bar() ?i32 { return 1; }
4465 ,4484 ,
4466 ".tmp_source.zig:2:15: error: expected type 'bool', found '?i32'",4485 "tmp.zig:2:15: error: expected type 'bool', found '?i32'",
4467 );4486 );
44684487
4469 cases.add(4488 cases.add(
...@@ -4473,7 +4492,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4473,7 +4492,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4473 \\}4492 \\}
4474 \\fn bar() anyerror!i32 { return 1; }4493 \\fn bar() anyerror!i32 { return 1; }
4475 ,4494 ,
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'",
4477 );4496 );
44784497
4479 cases.add(4498 cases.add(
...@@ -4483,7 +4502,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4483,7 +4502,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4483 \\}4502 \\}
4484 \\fn bar() bool { return true; }4503 \\fn bar() bool { return true; }
4485 ,4504 ,
4486 ".tmp_source.zig:2:15: error: expected optional type, found 'bool'",4505 "tmp.zig:2:15: error: expected optional type, found 'bool'",
4487 );4506 );
44884507
4489 cases.add(4508 cases.add(
...@@ -4493,7 +4512,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4493,7 +4512,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4493 \\}4512 \\}
4494 \\fn bar() anyerror!i32 { return 1; }4513 \\fn bar() anyerror!i32 { return 1; }
4495 ,4514 ,
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'",
4497 );4516 );
44984517
4499 cases.add(4518 cases.add(
...@@ -4503,7 +4522,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4503,7 +4522,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4503 \\}4522 \\}
4504 \\fn bar() bool { return true; }4523 \\fn bar() bool { return true; }
4505 ,4524 ,
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'",
4507 );4526 );
45084527
4509 cases.add(4528 cases.add(
...@@ -4513,7 +4532,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4513,7 +4532,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4513 \\}4532 \\}
4514 \\fn bar() ?i32 { return 1; }4533 \\fn bar() ?i32 { return 1; }
4515 ,4534 ,
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'",
4517 );4536 );
45184537
4519 cases.add(4538 cases.add(
...@@ -4531,7 +4550,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4531,7 +4550,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4531 \\}4550 \\}
4532 \\extern fn quux() void;4551 \\extern fn quux() void;
4533 ,4552 ,
4534 ".tmp_source.zig:4:1: error: unable to inline function",4553 "tmp.zig:4:1: error: unable to inline function",
4535 );4554 );
45364555
4537 cases.add(4556 cases.add(
...@@ -4542,7 +4561,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4542,7 +4561,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4542 \\inline fn bar() void { }4561 \\inline fn bar() void { }
4543 \\extern fn quux(usize) void;4562 \\extern fn quux(usize) void;
4544 ,4563 ,
4545 ".tmp_source.zig:4:1: error: unable to inline function",4564 "tmp.zig:4:1: error: unable to inline function",
4546 );4565 );
45474566
4548 cases.add(4567 cases.add(
...@@ -4551,7 +4570,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4551,7 +4570,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4551 \\ return a / b;4570 \\ return a / b;
4552 \\}4571 \\}
4553 ,4572 ,
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",
4555 );4574 );
45564575
4557 cases.add(4576 cases.add(
...@@ -4560,7 +4579,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4560,7 +4579,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4560 \\ return a % b;4579 \\ return a % b;
4561 \\}4580 \\}
4562 ,4581 ,
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",
4564 );4583 );
45654584
4566 cases.add(4585 cases.add(
...@@ -4571,7 +4590,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4571,7 +4590,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4571 \\ const c = a / b;4590 \\ const c = a / b;
4572 \\}4591 \\}
4573 ,4592 ,
4574 ".tmp_source.zig:4:17: error: division by zero",4593 "tmp.zig:4:17: error: division by zero",
4575 );4594 );
45764595
4577 cases.add(4596 cases.add(
...@@ -4582,7 +4601,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4582,7 +4601,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4582 \\ const c = a % b;4601 \\ const c = a % b;
4583 \\}4602 \\}
4584 ,4603 ,
4585 ".tmp_source.zig:4:17: error: division by zero",4604 "tmp.zig:4:17: error: division by zero",
4586 );4605 );
45874606
4588 cases.add(4607 cases.add(
...@@ -4592,8 +4611,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4592,8 +4611,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4592 \\ @setRuntimeSafety(false);4611 \\ @setRuntimeSafety(false);
4593 \\}4612 \\}
4594 ,4613 ,
4595 ".tmp_source.zig:3:5: error: runtime safety set twice for same scope",4614 "tmp.zig:3:5: error: runtime safety set twice for same scope",
4596 ".tmp_source.zig:2:5: note: first set here",4615 "tmp.zig:2:5: note: first set here",
4597 );4616 );
45984617
4599 cases.add(4618 cases.add(
...@@ -4603,8 +4622,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4603,8 +4622,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4603 \\ @setFloatMode(@import("builtin").FloatMode.Optimized);4622 \\ @setFloatMode(@import("builtin").FloatMode.Optimized);
4604 \\}4623 \\}
4605 ,4624 ,
4606 ".tmp_source.zig:3:5: error: float mode set twice for same scope",4625 "tmp.zig:3:5: error: float mode set twice for same scope",
4607 ".tmp_source.zig:2:5: note: first set here",4626 "tmp.zig:2:5: note: first set here",
4608 );4627 );
46094628
4610 cases.add(4629 cases.add(
...@@ -4613,7 +4632,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4613,7 +4632,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4613 \\ var b: u8[40] = undefined;4632 \\ var b: u8[40] = undefined;
4614 \\}4633 \\}
4615 ,4634 ,
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'",
4617 );4636 );
46184637
4619 cases.add(4638 cases.add(
...@@ -4626,7 +4645,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4626,7 +4645,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4626 \\ }4645 \\ }
4627 \\}4646 \\}
4628 ,4647 ,
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",
4630 );4649 );
46314650
4632 cases.add(4651 cases.add(
...@@ -4639,7 +4658,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4639,7 +4658,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4639 \\ }4658 \\ }
4640 \\}4659 \\}
4641 ,4660 ,
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",
4643 );4662 );
46444663
4645 cases.add(4664 cases.add(
...@@ -4653,7 +4672,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4653,7 +4672,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4653 \\ foos[0]();4672 \\ foos[0]();
4654 \\}4673 \\}
4655 ,4674 ,
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",
4657 );4676 );
46584677
4659 cases.add(4678 cases.add(
...@@ -4667,7 +4686,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4667,7 +4686,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4667 \\ foos[0](true);4686 \\ foos[0](true);
4668 \\}4687 \\}
4669 ,4688 ,
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",
4671 );4690 );
46724691
4673 cases.add(4692 cases.add(
...@@ -4681,24 +4700,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4681,24 +4700,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4681 \\ return bar;4700 \\ return bar;
4682 \\}4701 \\}
4683 ,4702 ,
4684 ".tmp_source.zig:1:13: error: aoeu",4703 "tmp.zig:1:13: error: aoeu",
4685 ".tmp_source.zig:3:19: note: referenced here",4704 "tmp.zig:3:19: note: referenced here",
4686 ".tmp_source.zig:7:12: note: referenced here",4705 "tmp.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",
4702 );4706 );
47034707
4704 cases.add(4708 cases.add(
...@@ -4707,7 +4711,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4707,7 +4711,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4707 \\ const a = 0x1.0p16384;4711 \\ const a = 0x1.0p16384;
4708 \\}4712 \\}
4709 ,4713 ,
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",
4711 );4715 );
47124716
4713 cases.add(4717 cases.add(
...@@ -4716,7 +4720,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4716,7 +4720,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4716 \\ const a = 0x1.0p-16384;4720 \\ const a = 0x1.0p-16384;
4717 \\}4721 \\}
4718 ,4722 ,
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",
4720 );4724 );
47214725
4722 cases.add(4726 cases.add(
...@@ -4725,7 +4729,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4725,7 +4729,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4725 \\ return i32(12.34);4729 \\ return i32(12.34);
4726 \\}4730 \\}
4727 ,4731 ,
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'",
4729 );4733 );
47304734
4731 cases.add(4735 cases.add(
...@@ -4734,7 +4738,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4734,7 +4738,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4734 \\ return @ptrToInt(x);4738 \\ return @ptrToInt(x);
4735 \\}4739 \\}
4736 ,4740 ,
4737 ".tmp_source.zig:2:22: error: expected pointer, found 'i32'",4741 "tmp.zig:2:22: error: expected pointer, found 'i32'",
4738 );4742 );
47394743
4740 cases.add(4744 cases.add(
...@@ -4743,7 +4747,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4743,7 +4747,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4743 \\ const x = @shlExact(u8(0b01010101), 2);4747 \\ const x = @shlExact(u8(0b01010101), 2);
4744 \\}4748 \\}
4745 ,4749 ,
4746 ".tmp_source.zig:2:15: error: operation caused overflow",4750 "tmp.zig:2:15: error: operation caused overflow",
4747 );4751 );
47484752
4749 cases.add(4753 cases.add(
...@@ -4752,7 +4756,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4752,7 +4756,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4752 \\ const x = @shrExact(u8(0b10101010), 2);4756 \\ const x = @shrExact(u8(0b10101010), 2);
4753 \\}4757 \\}
4754 ,4758 ,
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",
4756 );4760 );
47574761
4758 cases.add(4762 cases.add(
...@@ -4761,7 +4765,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4761,7 +4765,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4761 \\ return 0x11 << x;4765 \\ return 0x11 << x;
4762 \\}4766 \\}
4763 ,4767 ,
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",
4765 );4769 );
47664770
4767 cases.add(4771 cases.add(
...@@ -4770,7 +4774,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4770,7 +4774,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4770 \\ return x << y;4774 \\ return x << y;
4771 \\}4775 \\}
4772 ,4776 ,
4773 ".tmp_source.zig:2:17: error: expected type 'u3', found 'u8'",4777 "tmp.zig:2:17: error: expected type 'u3', found 'u8'",
4774 );4778 );
47754779
4776 cases.add(4780 cases.add(
...@@ -4780,7 +4784,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4780,7 +4784,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4780 \\ const a: u16 = 300;4784 \\ const a: u16 = 300;
4781 \\}4785 \\}
4782 ,4786 ,
4783 ".tmp_source.zig:1:1: error: declaration shadows primitive type 'u16'",4787 "tmp.zig:1:1: error: declaration shadows primitive type 'u16'",
4784 );4788 );
47854789
4786 cases.add(4790 cases.add(
...@@ -4799,7 +4803,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4799,7 +4803,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4799 \\ x.* += 1;4803 \\ x.* += 1;
4800 \\}4804 \\}
4801 ,4805 ,
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'",
4803 );4807 );
48044808
4805 cases.add(4809 cases.add(
...@@ -4819,9 +4823,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4819,9 +4823,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4819 \\ x[0] += 1;4823 \\ x[0] += 1;
4820 \\}4824 \\}
4821 ,4825 ,
4822 ".tmp_source.zig:9:18: error: cast increases pointer alignment",4826 "tmp.zig:9:18: error: cast increases pointer alignment",
4823 ".tmp_source.zig:9:23: note: '*align(1) u32' has alignment 1",4827 "tmp.zig:9:23: note: '*align(1) u32' has alignment 1",
4824 ".tmp_source.zig:9:18: note: '*[1]u32' has alignment 4",4828 "tmp.zig:9:18: note: '*[1]u32' has alignment 4",
4825 );4829 );
48264830
4827 cases.add(4831 cases.add(
...@@ -4832,9 +4836,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4832,9 +4836,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4832 \\ return ptr.*;4836 \\ return ptr.*;
4833 \\}4837 \\}
4834 ,4838 ,
4835 ".tmp_source.zig:3:17: error: cast increases pointer alignment",4839 "tmp.zig:3:17: error: cast increases pointer alignment",
4836 ".tmp_source.zig:3:38: note: '*u8' has alignment 1",4840 "tmp.zig:3:38: note: '*u8' has alignment 1",
4837 ".tmp_source.zig:3:26: note: '*u32' has alignment 4",4841 "tmp.zig:3:26: note: '*u32' has alignment 4",
4838 );4842 );
48394843
4840 cases.add(4844 cases.add(
...@@ -4843,7 +4847,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4843,7 +4847,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4843 \\ @alignCast(4, u32(3));4847 \\ @alignCast(4, u32(3));
4844 \\}4848 \\}
4845 ,4849 ,
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'",
4847 );4851 );
48484852
4849 cases.add(4853 cases.add(
...@@ -4856,7 +4860,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4856,7 +4860,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4856 \\}4860 \\}
4857 \\fn alignedSmall() align(4) i32 { return 1234; }4861 \\fn alignedSmall() align(4) i32 { return 1234; }
4858 ,4862 ,
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'",
4860 );4864 );
48614865
4862 cases.add(4866 cases.add(
...@@ -4868,7 +4872,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4868,7 +4872,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4868 \\ return x == 5678;4872 \\ return x == 5678;
4869 \\}4873 \\}
4870 ,4874 ,
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'",
4872 );4876 );
48734877
4874 cases.add(4878 cases.add(
...@@ -4877,7 +4881,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4877,7 +4881,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4877 \\ const array = [2]u8{1, 2, 3};4881 \\ const array = [2]u8{1, 2, 3};
4878 \\}4882 \\}
4879 ,4883 ,
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",
4881 );4885 );
48824886
4883 cases.add(4887 cases.add(
...@@ -4889,7 +4893,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4889,7 +4893,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4889 \\ bar(@ptrCast(*c_void, &x));4893 \\ bar(@ptrCast(*c_void, &x));
4890 \\}4894 \\}
4891 ,4895 ,
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'",
4893 );4897 );
48944898
4895 cases.add(4899 cases.add(
...@@ -4906,7 +4910,6 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4906,7 +4910,6 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4906 \\ var d = null;4910 \\ var d = null;
4907 \\ var e = opaque.*;4911 \\ var e = opaque.*;
4908 \\ var f = i32;4912 \\ var f = i32;
4909 \\ var g = @import("std",);
4910 \\ var h = (Foo {}).bar;4913 \\ var h = (Foo {}).bar;
4911 \\4914 \\
4912 \\ var z: noreturn = return;4915 \\ var z: noreturn = return;
...@@ -4916,16 +4919,15 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4916,16 +4919,15 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4916 \\ fn bar(self: *const Foo) void {}4919 \\ fn bar(self: *const Foo) void {}
4917 \\};4920 \\};
4918 ,4921 ,
4919 ".tmp_source.zig:4:4: error: variable of type '*comptime_int' must be const or comptime",4922 "tmp.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",4923 "tmp.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",4924 "tmp.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",4925 "tmp.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",4926 "tmp.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",4927 "tmp.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",4928 "tmp.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",4929 "tmp.zig:13:4: error: variable of type '(bound fn(*const Foo) void)' 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",4930 "tmp.zig:15:4: error: unreachable code",
4928 ".tmp_source.zig:16:4: error: unreachable code",
4929 );4931 );
49304932
4931 cases.add(4933 cases.add(
...@@ -4935,7 +4937,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4935,7 +4937,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4935 \\ while (!@cmpxchgWeak(i32, &x, 1234, 5678, u32(1234), u32(1234))) {}4937 \\ while (!@cmpxchgWeak(i32, &x, 1234, 5678, u32(1234), u32(1234))) {}
4936 \\}4938 \\}
4937 ,4939 ,
4938 ".tmp_source.zig:3:50: error: expected type 'AtomicOrder', found 'u32'",4940 "tmp.zig:3:50: error: expected type 'builtin.AtomicOrder', found 'u32'",
4939 );4941 );
49404942
4941 cases.add(4943 cases.add(
...@@ -4945,7 +4947,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4945,7 +4947,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4945 \\ @export("entry", entry, u32(1234));4947 \\ @export("entry", entry, u32(1234));
4946 \\}4948 \\}
4947 ,4949 ,
4948 ".tmp_source.zig:3:32: error: expected type 'GlobalLinkage', found 'u32'",4950 "tmp.zig:3:32: error: expected type 'builtin.GlobalLinkage', found 'u32'",
4949 );4951 );
49504952
4951 cases.add(4953 cases.add(
...@@ -4974,7 +4976,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4974,7 +4976,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4974 \\ };4976 \\ };
4975 \\}4977 \\}
4976 ,4978 ,
4977 ".tmp_source.zig:14:17: error: use of undeclared identifier 'HeaderValue'",4979 "tmp.zig:14:17: error: use of undeclared identifier 'HeaderValue'",
4978 );4980 );
49794981
4980 cases.add(4982 cases.add(
...@@ -4983,7 +4985,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4983,7 +4985,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4983 \\ @setAlignStack(16);4985 \\ @setAlignStack(16);
4984 \\}4986 \\}
4985 ,4987 ,
4986 ".tmp_source.zig:2:5: error: @setAlignStack outside function",4988 "tmp.zig:2:5: error: @setAlignStack outside function",
4987 );4989 );
49884990
4989 cases.add(4991 cases.add(
...@@ -4992,7 +4994,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -4992,7 +4994,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
4992 \\ @setAlignStack(16);4994 \\ @setAlignStack(16);
4993 \\}4995 \\}
4994 ,4996 ,
4995 ".tmp_source.zig:2:5: error: @setAlignStack in naked function",4997 "tmp.zig:2:5: error: @setAlignStack in naked function",
4996 );4998 );
49974999
4998 cases.add(5000 cases.add(
...@@ -5004,7 +5006,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5004,7 +5006,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5004 \\ @setAlignStack(16);5006 \\ @setAlignStack(16);
5005 \\}5007 \\}
5006 ,5008 ,
5007 ".tmp_source.zig:5:5: error: @setAlignStack in inline function",5009 "tmp.zig:5:5: error: @setAlignStack in inline function",
5008 );5010 );
50095011
5010 cases.add(5012 cases.add(
...@@ -5014,8 +5016,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5014,8 +5016,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5014 \\ @setAlignStack(16);5016 \\ @setAlignStack(16);
5015 \\}5017 \\}
5016 ,5018 ,
5017 ".tmp_source.zig:3:5: error: alignstack set twice",5019 "tmp.zig:3:5: error: alignstack set twice",
5018 ".tmp_source.zig:2:5: note: first set here",5020 "tmp.zig:2:5: note: first set here",
5019 );5021 );
50205022
5021 cases.add(5023 cases.add(
...@@ -5024,7 +5026,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5024,7 +5026,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5024 \\ @setAlignStack(511 + 1);5026 \\ @setAlignStack(511 + 1);
5025 \\}5027 \\}
5026 ,5028 ,
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",
5028 );5030 );
50295031
5030 cases.add(5032 cases.add(
...@@ -5071,7 +5073,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5071,7 +5073,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5071 \\ }5073 \\ }
5072 \\}5074 \\}
5073 ,5075 ,
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",
5075 );5077 );
50765078
5077 cases.add(5079 cases.add(
...@@ -5087,7 +5089,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5087,7 +5089,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5087 \\ return x.blah;5089 \\ return x.blah;
5088 \\}5090 \\}
5089 ,5091 ,
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",
5091 );5093 );
50925094
5093 cases.add(5095 cases.add(
...@@ -5095,7 +5097,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5095,7 +5097,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5095 "fn test() bool {\r\n" ++5097 "fn test() bool {\r\n" ++
5096 " true\r\n" ++5098 " true\r\n" ++
5097 "}\r\n",5099 "}\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",
5099 );5101 );
51005102
5101 cases.add(5103 cases.add(
...@@ -5105,7 +5107,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5105,7 +5107,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5105 \\ true\r5107 \\ true\r
5106 \\}5108 \\}
5107 ,5109 ,
5108 ".tmp_source.zig:1:1: error: invalid character: '\\xff'",5110 "tmp.zig:1:1: error: invalid character: '\\xff'",
5109 );5111 );
51105112
5111 cases.add(5113 cases.add(
...@@ -5113,7 +5115,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5113,7 +5115,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5113 "fn test() bool {\n" ++5115 "fn test() bool {\n" ++
5114 "\ttrue\n" ++5116 "\ttrue\n" ++
5115 "}\n",5117 "}\n",
5116 ".tmp_source.zig:2:1: error: invalid character: '\\t'",5118 "tmp.zig:2:1: error: invalid character: '\\t'",
5117 );5119 );
51185120
5119 cases.add(5121 cases.add(
...@@ -5122,7 +5124,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5122,7 +5124,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5122 \\ _ = @ArgType(i32, 3);5124 \\ _ = @ArgType(i32, 3);
5123 \\}5125 \\}
5124 ,5126 ,
5125 ".tmp_source.zig:2:18: error: expected function, found 'i32'",5127 "tmp.zig:2:18: error: expected function, found 'i32'",
5126 );5128 );
51275129
5128 cases.add(5130 cases.add(
...@@ -5132,7 +5134,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5132,7 +5134,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5132 \\}5134 \\}
5133 \\fn add(a: i32, b: i32) i32 { return a + b; }5135 \\fn add(a: i32, b: i32) i32 { return a + b; }
5134 ,5136 ,
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",
5136 );5138 );
51375139
5138 cases.add(5140 cases.add(
...@@ -5141,7 +5143,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5141,7 +5143,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5141 \\ _ = @memberType(i32, 0);5143 \\ _ = @memberType(i32, 0);
5142 \\}5144 \\}
5143 ,5145 ,
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",
5145 );5147 );
51465148
5147 cases.add(5149 cases.add(
...@@ -5151,7 +5153,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5151,7 +5153,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5151 \\}5153 \\}
5152 \\const Foo = enum {A,};5154 \\const Foo = enum {A,};
5153 ,5155 ,
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",
5155 );5157 );
51565158
5157 cases.add(5159 cases.add(
...@@ -5161,7 +5163,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5161,7 +5163,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5161 \\}5163 \\}
5162 \\const Foo = struct {};5164 \\const Foo = struct {};
5163 ,5165 ,
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",
5165 );5167 );
51665168
5167 cases.add(5169 cases.add(
...@@ -5171,7 +5173,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5171,7 +5173,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5171 \\}5173 \\}
5172 \\const Foo = union {A: void,};5174 \\const Foo = union {A: void,};
5173 ,5175 ,
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",
5175 );5177 );
51765178
5177 cases.add(5179 cases.add(
...@@ -5180,7 +5182,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5180,7 +5182,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5180 \\ _ = @memberName(i32, 0);5182 \\ _ = @memberName(i32, 0);
5181 \\}5183 \\}
5182 ,5184 ,
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",
5184 );5186 );
51855187
5186 cases.add(5188 cases.add(
...@@ -5190,7 +5192,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5190,7 +5192,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5190 \\}5192 \\}
5191 \\const Foo = struct {};5193 \\const Foo = struct {};
5192 ,5194 ,
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",
5194 );5196 );
51955197
5196 cases.add(5198 cases.add(
...@@ -5200,7 +5202,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5200,7 +5202,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5200 \\}5202 \\}
5201 \\const Foo = enum {A,};5203 \\const Foo = enum {A,};
5202 ,5204 ,
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",
5204 );5206 );
52055207
5206 cases.add(5208 cases.add(
...@@ -5210,7 +5212,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5210,7 +5212,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5210 \\}5212 \\}
5211 \\const Foo = union {A:i32,};5213 \\const Foo = union {A:i32,};
5212 ,5214 ,
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",
5214 );5216 );
52155217
5216 cases.add(5218 cases.add(
...@@ -5220,7 +5222,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5220,7 +5222,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5220 \\}5222 \\}
5221 \\pub extern fn foo(format: *const u8, ...) void;5223 \\pub extern fn foo(format: *const u8, ...) void;
5222 ,5224 ,
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'",
5224 );5226 );
52255227
5226 cases.add(5228 cases.add(
...@@ -5239,9 +5241,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5239,9 +5241,9 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5239 \\ var allocator: ContextAllocator = undefined;5241 \\ var allocator: ContextAllocator = undefined;
5240 \\}5242 \\}
5241 ,5243 ,
5242 ".tmp_source.zig:4:25: error: aoeu",5244 "tmp.zig:4:25: error: aoeu",
5243 ".tmp_source.zig:1:36: note: called from here",5245 "tmp.zig:1:36: note: called from here",
5244 ".tmp_source.zig:12:20: note: referenced here",5246 "tmp.zig:12:20: note: referenced here",
5245 );5247 );
52465248
5247 cases.add(5249 cases.add(
...@@ -5258,7 +5260,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5258,7 +5260,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5258 \\ var x = Small.One;5260 \\ var x = Small.One;
5259 \\}5261 \\}
5260 ,5262 ,
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'",
5262 );5264 );
52635265
5264 cases.add(5266 cases.add(
...@@ -5273,7 +5275,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5273,7 +5275,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5273 \\ var x = Small.One;5275 \\ var x = Small.One;
5274 \\}5276 \\}
5275 ,5277 ,
5276 ".tmp_source.zig:1:21: error: expected integer, found 'f32'",5278 "tmp.zig:1:21: error: expected integer, found 'f32'",
5277 );5279 );
52785280
5279 cases.add(5281 cases.add(
...@@ -5289,7 +5291,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5289,7 +5291,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5289 \\ var x: u2 = Small.Two;5291 \\ var x: u2 = Small.Two;
5290 \\}5292 \\}
5291 ,5293 ,
5292 ".tmp_source.zig:9:22: error: expected type 'u2', found 'Small'",5294 "tmp.zig:9:22: error: expected type 'u2', found 'Small'",
5293 );5295 );
52945296
5295 cases.add(5297 cases.add(
...@@ -5306,7 +5308,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5306,7 +5308,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5306 \\ var x = @intToEnum(Small, y);5308 \\ var x = @intToEnum(Small, y);
5307 \\}5309 \\}
5308 ,5310 ,
5309 ".tmp_source.zig:10:31: error: expected type 'u2', found 'u3'",5311 "tmp.zig:10:31: error: expected type 'u2', found 'u3'",
5310 );5312 );
53115313
5312 cases.add(5314 cases.add(
...@@ -5322,7 +5324,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5322,7 +5324,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5322 \\ var y = Small.Two;5324 \\ var y = Small.Two;
5323 \\}5325 \\}
5324 ,5326 ,
5325 ".tmp_source.zig:1:20: error: expected unsigned integer, found 'i2'",5327 "tmp.zig:1:20: error: expected unsigned integer, found 'i2'",
5326 );5328 );
53275329
5328 cases.add(5330 cases.add(
...@@ -5334,7 +5336,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5334,7 +5336,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5334 \\ var x: MultipleChoice = undefined;5336 \\ var x: MultipleChoice = undefined;
5335 \\}5337 \\}
5336 ,5338 ,
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",
5338 );5340 );
53395341
5340 cases.add(5342 cases.add(
...@@ -5346,8 +5348,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5346,8 +5348,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5346 \\ var x: MultipleChoice = undefined;5348 \\ var x: MultipleChoice = undefined;
5347 \\}5349 \\}
5348 ,5350 ,
5349 ".tmp_source.zig:2:14: error: non-enum union field assignment",5351 "tmp.zig:2:14: error: non-enum union field assignment",
5350 ".tmp_source.zig:1:24: note: consider 'union(enum)' here",5352 "tmp.zig:1:24: note: consider 'union(enum)' here",
5351 );5353 );
53525354
5353 cases.add(5355 cases.add(
...@@ -5357,7 +5359,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5357,7 +5359,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5357 \\ return @sizeOf(Foo);5359 \\ return @sizeOf(Foo);
5358 \\}5360 \\}
5359 ,5361 ,
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",
5361 );5363 );
53625364
5363 cases.add(5365 cases.add(
...@@ -5367,7 +5369,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5367,7 +5369,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5367 \\ return @sizeOf(Foo);5369 \\ return @sizeOf(Foo);
5368 \\}5370 \\}
5369 ,5371 ,
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",
5371 );5373 );
53725374
5373 cases.add(5375 cases.add(
...@@ -5383,8 +5385,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5383,8 +5385,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5383 \\ var x = MultipleChoice.C;5385 \\ var x = MultipleChoice.C;
5384 \\}5386 \\}
5385 ,5387 ,
5386 ".tmp_source.zig:6:9: error: enum tag value 60 already taken",5388 "tmp.zig:6:9: error: enum tag value 60 already taken",
5387 ".tmp_source.zig:4:9: note: other occurrence here",5389 "tmp.zig:4:9: note: other occurrence here",
5388 );5390 );
53895391
5390 cases.add(5392 cases.add(
...@@ -5402,8 +5404,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5402,8 +5404,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5402 \\ return @sizeOf(Payload);5404 \\ return @sizeOf(Payload);
5403 \\}5405 \\}
5404 ,5406 ,
5405 ".tmp_source.zig:6:17: error: enum field missing: 'C'",5407 "tmp.zig:6:17: error: enum field missing: 'C'",
5406 ".tmp_source.zig:4:5: note: declared here",5408 "tmp.zig:4:5: note: declared here",
5407 );5409 );
54085410
5409 cases.add(5411 cases.add(
...@@ -5415,8 +5417,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5415,8 +5417,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5415 \\ const x = @TagType(Foo);5417 \\ const x = @TagType(Foo);
5416 \\}5418 \\}
5417 ,5419 ,
5418 ".tmp_source.zig:5:24: error: union 'Foo' has no tag",5420 "tmp.zig:5:24: error: union 'Foo' has no tag",
5419 ".tmp_source.zig:1:13: note: consider 'union(enum)' here",5421 "tmp.zig:1:13: note: consider 'union(enum)' here",
5420 );5422 );
54215423
5422 cases.add(5424 cases.add(
...@@ -5428,7 +5430,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5428,7 +5430,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5428 \\ const x = @TagType(Foo);5430 \\ const x = @TagType(Foo);
5429 \\}5431 \\}
5430 ,5432 ,
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'",
5432 );5434 );
54335435
5434 cases.add(5436 cases.add(
...@@ -5440,7 +5442,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5440,7 +5442,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5440 \\ const x = @TagType(Foo);5442 \\ const x = @TagType(Foo);
5441 \\}5443 \\}
5442 ,5444 ,
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'",
5444 );5446 );
54455447
5446 cases.add(5448 cases.add(
...@@ -5456,8 +5458,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5456,8 +5458,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5456 \\ var x = MultipleChoice { .C = {} };5458 \\ var x = MultipleChoice { .C = {} };
5457 \\}5459 \\}
5458 ,5460 ,
5459 ".tmp_source.zig:6:9: error: enum tag value 60 already taken",5461 "tmp.zig:6:9: error: enum tag value 60 already taken",
5460 ".tmp_source.zig:4:9: note: other occurrence here",5462 "tmp.zig:4:9: note: other occurrence here",
5461 );5463 );
54625464
5463 cases.add(5465 cases.add(
...@@ -5477,8 +5479,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5477,8 +5479,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5477 \\ var a = Payload {.A = 1234};5479 \\ var a = Payload {.A = 1234};
5478 \\}5480 \\}
5479 ,5481 ,
5480 ".tmp_source.zig:10:5: error: enum field not found: 'D'",5482 "tmp.zig:10:5: error: enum field not found: 'D'",
5481 ".tmp_source.zig:1:16: note: enum declared here",5483 "tmp.zig:1:16: note: enum declared here",
5482 );5484 );
54835485
5484 cases.add(5486 cases.add(
...@@ -5492,8 +5494,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5492,8 +5494,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5492 \\ var b = Letter.B;5494 \\ var b = Letter.B;
5493 \\}5495 \\}
5494 ,5496 ,
5495 ".tmp_source.zig:2:8: error: structs and unions, not enums, support field types",5497 "tmp.zig:2:8: error: structs and unions, not enums, support field types",
5496 ".tmp_source.zig:1:16: note: consider 'union(enum)' here",5498 "tmp.zig:1:16: note: consider 'union(enum)' here",
5497 );5499 );
54985500
5499 cases.add(5501 cases.add(
...@@ -5505,7 +5507,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5505,7 +5507,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5505 \\ var a = Letter { .A = {} };5507 \\ var a = Letter { .A = {} };
5506 \\}5508 \\}
5507 ,5509 ,
5508 ".tmp_source.zig:2:5: error: struct field missing type",5510 "tmp.zig:2:5: error: struct field missing type",
5509 );5511 );
55105512
5511 cases.add(5513 cases.add(
...@@ -5517,7 +5519,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5517,7 +5519,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5517 \\ var a = Letter { .A = {} };5519 \\ var a = Letter { .A = {} };
5518 \\}5520 \\}
5519 ,5521 ,
5520 ".tmp_source.zig:2:5: error: union field missing type",5522 "tmp.zig:2:5: error: union field missing type",
5521 );5523 );
55225524
5523 cases.add(5525 cases.add(
...@@ -5536,7 +5538,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5536,7 +5538,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5536 \\ var a = Payload { .A = 1234 };5538 \\ var a = Payload { .A = 1234 };
5537 \\}5539 \\}
5538 ,5540 ,
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",
5540 );5542 );
55415543
5542 cases.add(5544 cases.add(
...@@ -5555,7 +5557,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5555,7 +5557,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5555 \\ var a = Payload { .A = 1234 };5557 \\ var a = Payload { .A = 1234 };
5556 \\}5558 \\}
5557 ,5559 ,
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",
5559 );5561 );
55605562
5561 cases.add(5563 cases.add(
...@@ -5576,8 +5578,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5576,8 +5578,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5576 \\ }5578 \\ }
5577 \\}5579 \\}
5578 ,5580 ,
5579 ".tmp_source.zig:11:14: error: switch on union which has no attached enum",5581 "tmp.zig:11:14: error: switch on union which has no attached enum",
5580 ".tmp_source.zig:1:17: note: consider 'union(enum)' here",5582 "tmp.zig:1:17: note: consider 'union(enum)' here",
5581 );5583 );
55825584
5583 cases.add(5585 cases.add(
...@@ -5590,8 +5592,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5590,8 +5592,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5590 \\ var x = @intToEnum(Foo, 0);5592 \\ var x = @intToEnum(Foo, 0);
5591 \\}5593 \\}
5592 ,5594 ,
5593 ".tmp_source.zig:6:13: error: enum 'Foo' has no tag matching integer value 0",5595 "tmp.zig:6:13: error: enum 'Foo' has no tag matching integer value 0",
5594 ".tmp_source.zig:1:13: note: 'Foo' declared here",5596 "tmp.zig:1:13: note: 'Foo' declared here",
5595 );5597 );
55965598
5597 cases.add(5599 cases.add(
...@@ -5606,8 +5608,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5606,8 +5608,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5606 \\ var x: Value = Letter.A;5608 \\ var x: Value = Letter.A;
5607 \\}5609 \\}
5608 ,5610 ,
5609 ".tmp_source.zig:8:26: error: cast to union 'Value' must initialize 'i32' field 'A'",5611 "tmp.zig:8:26: error: cast to union 'Value' must initialize 'i32' field 'A'",
5610 ".tmp_source.zig:3:5: note: field 'A' declared here",5612 "tmp.zig:3:5: note: field 'A' declared here",
5611 );5613 );
56125614
5613 cases.add(5615 cases.add(
...@@ -5625,8 +5627,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5625,8 +5627,8 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5625 \\ var x: Value = l;5627 \\ var x: Value = l;
5626 \\}5628 \\}
5627 ,5629 ,
5628 ".tmp_source.zig:11:20: error: runtime cast to union 'Value' which has non-void fields",5630 "tmp.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'",5631 "tmp.zig:3:5: note: field 'A' has type 'i32'",
5630 );5632 );
56315633
5632 cases.add(5634 cases.add(
...@@ -5638,7 +5640,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5638,7 +5640,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5638 \\ const fieldOffset = @byteOffsetOf(Empty, "val",);5640 \\ const fieldOffset = @byteOffsetOf(Empty, "val",);
5639 \\}5641 \\}
5640 ,5642 ,
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",
5642 );5644 );
56435645
5644 cases.add(5646 cases.add(
...@@ -5650,7 +5652,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5650,7 +5652,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5650 \\ const fieldOffset = @bitOffsetOf(Empty, "val",);5652 \\ const fieldOffset = @bitOffsetOf(Empty, "val",);
5651 \\}5653 \\}
5652 ,5654 ,
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",
5654 );5656 );
56555657
5656 cases.add(5658 cases.add(
...@@ -5664,7 +5666,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5664,7 +5666,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5664 \\ const bar_val = foo.Bar;5666 \\ const bar_val = foo.Bar;
5665 \\}5667 \\}
5666 ,5668 ,
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",
5668 );5670 );
56695671
5670 cases.add(5672 cases.add(
...@@ -5674,7 +5676,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5674,7 +5676,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5674 \\ _ = @typeOf(generic).ReturnType;5676 \\ _ = @typeOf(generic).ReturnType;
5675 \\}5677 \\}
5676 ,5678 ,
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",
5678 );5680 );
56795681
5680 cases.add(5682 cases.add(
...@@ -5684,7 +5686,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5684,7 +5686,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5684 \\ _ = @ArgType(@typeOf(generic), 0);5686 \\ _ = @ArgType(@typeOf(generic), 0);
5685 \\}5687 \\}
5686 ,5688 ,
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",
5688 );5690 );
56895691
5690 cases.add(5692 cases.add(
...@@ -5694,7 +5696,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5694,7 +5696,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5694 \\ asm volatile ("" : [baz]"+r"(bar) : : "");5696 \\ asm volatile ("" : [baz]"+r"(bar) : : "");
5695 \\}5697 \\}
5696 ,5698 ,
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",
5698 );5700 );
56995701
5700 cases.add(5702 cases.add(
...@@ -5703,7 +5705,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5703,7 +5705,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5703 \\ asm volatile ("" : : [bar]"r"(3) : "");5705 \\ asm volatile ("" : : [bar]"r"(3) : "");
5704 \\}5706 \\}
5705 ,5707 ,
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",
5707 );5709 );
57085710
5709 cases.add(5711 cases.add(
...@@ -5712,7 +5714,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5712,7 +5714,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5712 \\ asm volatile ("" : : [bar]"r"(3.17) : "");5714 \\ asm volatile ("" : : [bar]"r"(3.17) : "");
5713 \\}5715 \\}
5714 ,5716 ,
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",
5716 );5718 );
57175719
5718 cases.add(5720 cases.add(
...@@ -5726,7 +5728,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5726,7 +5728,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5726 \\ const foo = Foo { .Bar = x, .Baz = u8 };5728 \\ const foo = Foo { .Bar = x, .Baz = u8 };
5727 \\}5729 \\}
5728 ,5730 ,
5729 ".tmp_source.zig:7:30: error: unable to evaluate constant expression",5731 "tmp.zig:7:30: error: unable to evaluate constant expression",
5730 );5732 );
57315733
5732 cases.add(5734 cases.add(
...@@ -5740,7 +5742,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5740,7 +5742,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5740 \\ const foo = Foo { .Bar = x };5742 \\ const foo = Foo { .Bar = x };
5741 \\}5743 \\}
5742 ,5744 ,
5743 ".tmp_source.zig:7:30: error: unable to evaluate constant expression",5745 "tmp.zig:7:30: error: unable to evaluate constant expression",
5744 );5746 );
57455747
5746 cases.addTest(5748 cases.addTest(
...@@ -5750,7 +5752,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5750,7 +5752,7 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5750 \\ var v: V = undefined;5752 \\ var v: V = undefined;
5751 \\}5753 \\}
5752 ,5754 ,
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",
5754 );5756 );
57555757
5756 cases.add("compileLog of tagged enum doesn't crash the compiler",5758 cases.add("compileLog of tagged enum doesn't crash the compiler",
...@@ -5765,5 +5767,5 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {...@@ -5765,5 +5767,5 @@ pub fn addCases(cases: *tests.CompileErrorContext) void {
5765 \\pub fn main () void {5767 \\pub fn main () void {
5766 \\ comptime testCompileLog(Bar{.X = 123});5768 \\ comptime testCompileLog(Bar{.X = 123});
5767 \\}5769 \\}
5768 , ".tmp_source.zig:6:5: error: found compile log statement");5770 , "tmp.zig:6:5: error: found compile log statement");
5769}5771}
test/stage1/behavior.zig+2
...@@ -18,6 +18,7 @@ comptime {...@@ -18,6 +18,7 @@ comptime {
18 _ = @import("behavior/bugs/1421.zig");18 _ = @import("behavior/bugs/1421.zig");
19 _ = @import("behavior/bugs/1442.zig");19 _ = @import("behavior/bugs/1442.zig");
20 _ = @import("behavior/bugs/1486.zig");20 _ = @import("behavior/bugs/1486.zig");
21 _ = @import("behavior/bugs/1500.zig");
21 _ = @import("behavior/bugs/1851.zig");22 _ = @import("behavior/bugs/1851.zig");
22 _ = @import("behavior/bugs/2006.zig");23 _ = @import("behavior/bugs/2006.zig");
23 _ = @import("behavior/bugs/394.zig");24 _ = @import("behavior/bugs/394.zig");
...@@ -25,6 +26,7 @@ comptime {...@@ -25,6 +26,7 @@ comptime {
25 _ = @import("behavior/bugs/529.zig");26 _ = @import("behavior/bugs/529.zig");
26 _ = @import("behavior/bugs/655.zig");27 _ = @import("behavior/bugs/655.zig");
27 _ = @import("behavior/bugs/656.zig");28 _ = @import("behavior/bugs/656.zig");
29 _ = @import("behavior/bugs/679.zig");
28 _ = @import("behavior/bugs/704.zig");30 _ = @import("behavior/bugs/704.zig");
29 _ = @import("behavior/bugs/718.zig");31 _ = @import("behavior/bugs/718.zig");
30 _ = @import("behavior/bugs/726.zig");32 _ = @import("behavior/bugs/726.zig");
test/stage1/behavior/asm.zig+5-5
...@@ -4,16 +4,16 @@ const expect = @import("std").testing.expect;...@@ -4,16 +4,16 @@ const expect = @import("std").testing.expect;
4comptime {4comptime {
5 if (config.arch == config.Arch.x86_64 and config.os == config.Os.linux) {5 if (config.arch == config.Arch.x86_64 and config.os == config.Os.linux) {
6 asm volatile (6 asm volatile (
7 \\.globl aoeu;7 \\.globl this_is_my_alias;
8 \\.type aoeu, @function;8 \\.type this_is_my_alias, @function;
9 \\.set aoeu, derp;9 \\.set this_is_my_alias, derp;
10 );10 );
11 }11 }
12}12}
1313
14test "module level assembly" {14test "module level assembly" {
15 if (config.arch == config.Arch.x86_64 and config.os == config.Os.linux) {15 if (config.arch == config.Arch.x86_64 and config.os == config.Os.linux) {
16 expect(aoeu() == 1234);16 expect(this_is_my_alias() == 1234);
17 }17 }
18}18}
1919
...@@ -85,7 +85,7 @@ test "sized integer/float in asm input" {...@@ -85,7 +85,7 @@ test "sized integer/float in asm input" {
85 );85 );
86}86}
8787
88extern fn aoeu() i32;88extern fn this_is_my_alias() i32;
8989
90export fn derp() i32 {90export fn derp() i32 {
91 return 1234;91 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 @@...@@ -1,5 +1,6 @@
1const std = @import("std");1const std = @import("std");
2const expect = std.testing.expect;2const expect = std.testing.expect;
3const expectEqualSlices = std.testing.expectEqualSlices;
3const mem = std.mem;4const mem = std.mem;
4const cstr = std.cstr;5const cstr = std.cstr;
5const builtin = @import("builtin");6const builtin = @import("builtin");
...@@ -469,7 +470,7 @@ test "@typeId" {...@@ -469,7 +470,7 @@ test "@typeId" {
469 expect(@typeId(AUnionEnum) == Tid.Union);470 expect(@typeId(AUnionEnum) == Tid.Union);
470 expect(@typeId(AUnion) == Tid.Union);471 expect(@typeId(AUnion) == Tid.Union);
471 expect(@typeId(fn () void) == Tid.Fn);472 expect(@typeId(fn () void) == Tid.Fn);
472 expect(@typeId(@typeOf(builtin)) == Tid.Namespace);473 expect(@typeId(@typeOf(builtin)) == Tid.Type);
473 // TODO bound fn474 // TODO bound fn
474 // TODO arg tuple475 // TODO arg tuple
475 // TODO opaque476 // TODO opaque
...@@ -488,7 +489,7 @@ test "@typeName" {...@@ -488,7 +489,7 @@ test "@typeName" {
488 expect(mem.eql(u8, @typeName(i64), "i64"));489 expect(mem.eql(u8, @typeName(i64), "i64"));
489 expect(mem.eql(u8, @typeName(*usize), "*usize"));490 expect(mem.eql(u8, @typeName(*usize), "*usize"));
490 // https://github.com/ziglang/zig/issues/675491 // 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)));
492 expect(mem.eql(u8, @typeName(Struct), "Struct"));493 expect(mem.eql(u8, @typeName(Struct), "Struct"));
493 expect(mem.eql(u8, @typeName(Union), "Union"));494 expect(mem.eql(u8, @typeName(Union), "Union"));
494 expect(mem.eql(u8, @typeName(Enum), "Enum"));495 expect(mem.eql(u8, @typeName(Enum), "Enum"));
test/stage1/behavior/type_info.zig+1-1
...@@ -186,7 +186,7 @@ fn testUnion() void {...@@ -186,7 +186,7 @@ fn testUnion() void {
186 expect(TypeId(typeinfo_info) == TypeId.Union);186 expect(TypeId(typeinfo_info) == TypeId.Union);
187 expect(typeinfo_info.Union.layout == TypeInfo.ContainerLayout.Auto);187 expect(typeinfo_info.Union.layout == TypeInfo.ContainerLayout.Auto);
188 expect(typeinfo_info.Union.tag_type.? == TypeId);188 expect(typeinfo_info.Union.tag_type.? == TypeId);
189 expect(typeinfo_info.Union.fields.len == 25);189 expect(typeinfo_info.Union.fields.len == 24);
190 expect(typeinfo_info.Union.fields[4].enum_field != null);190 expect(typeinfo_info.Union.fields[4].enum_field != null);
191 expect(typeinfo_info.Union.fields[4].enum_field.?.value == 4);191 expect(typeinfo_info.Union.fields[4].enum_field.?.value == 4);
192 expect(typeinfo_info.Union.fields[4].field_type == @typeOf(@typeInfo(u8).Int));192 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 {...@@ -569,7 +569,7 @@ pub const CompileErrorContext = struct {
569 const ErrLineIter = struct {569 const ErrLineIter = struct {
570 lines: mem.SplitIterator,570 lines: mem.SplitIterator,
571571
572 const source_file = ".tmp_source.zig";572 const source_file = "tmp.zig";
573573
574 fn init(input: []const u8) ErrLineIter {574 fn init(input: []const u8) ErrLineIter {
575 return ErrLineIter{ .lines = mem.separate(input, "\n") };575 return ErrLineIter{ .lines = mem.separate(input, "\n") };
...@@ -759,7 +759,7 @@ pub const CompileErrorContext = struct {...@@ -759,7 +759,7 @@ pub const CompileErrorContext = struct {
759 .is_test = false,759 .is_test = false,
760 };760 };
761761
762 tc.addSourceFile(".tmp_source.zig", source);762 tc.addSourceFile("tmp.zig", source);
763 comptime var arg_i = 0;763 comptime var arg_i = 0;
764 inline while (arg_i < expected_lines.len) : (arg_i += 1) {764 inline while (arg_i < expected_lines.len) : (arg_i += 1) {
765 tc.addExpectedError(expected_lines[arg_i]);765 tc.addExpectedError(expected_lines[arg_i]);
...@@ -980,15 +980,18 @@ pub const TranslateCContext = struct {...@@ -980,15 +980,18 @@ pub const TranslateCContext = struct {
980 Term.Exited => |code| {980 Term.Exited => |code| {
981 if (code != 0) {981 if (code != 0) {
982 warn("Compilation failed with exit code {}\n", code);982 warn("Compilation failed with exit code {}\n", code);
983 printInvocation(zig_args.toSliceConst());
983 return error.TestFailed;984 return error.TestFailed;
984 }985 }
985 },986 },
986 Term.Signal => |code| {987 Term.Signal => |code| {
987 warn("Compilation failed with signal {}\n", code);988 warn("Compilation failed with signal {}\n", code);
989 printInvocation(zig_args.toSliceConst());
988 return error.TestFailed;990 return error.TestFailed;
989 },991 },
990 else => {992 else => {
991 warn("Compilation terminated unexpectedly\n");993 warn("Compilation terminated unexpectedly\n");
994 printInvocation(zig_args.toSliceConst());
992 return error.TestFailed;995 return error.TestFailed;
993 },996 },
994 }997 }