diff options
| author | jason <jkercher@rlcsystems.com> | 2024-06-19 12:33:13 -0400 |
|---|---|---|
| committer | jason <jkercher@rlcsystems.com> | 2024-06-19 12:33:13 -0400 |
| commit | e6d84d18d30517ab6c7e8559c18b4271bbff9d61 (patch) | |
| tree | aad03230914fe6541ed6a939864856a16af8c268 /src | |
| parent | a9b6d282914e2a63292e59a4839995ccdc881f52 (diff) | |
| parent | 2797dc6452bfd5c20d47271d52647ef40cce74fc (diff) | |
Merge remote-tracking branch 'origin/master' into more-windows-comm
Diffstat (limited to 'src')
| -rw-r--r-- | src/check_decl.cpp | 2 | ||||
| -rw-r--r-- | src/check_expr.cpp | 4 | ||||
| -rw-r--r-- | src/checker.cpp | 8 | ||||
| -rw-r--r-- | src/linker.cpp | 8 | ||||
| -rw-r--r-- | src/main.cpp | 3 |
5 files changed, 20 insertions, 5 deletions
diff --git a/src/check_decl.cpp b/src/check_decl.cpp index 02445cbc6..818556951 100644 --- a/src/check_decl.cpp +++ b/src/check_decl.cpp @@ -1077,7 +1077,7 @@ gb_internal void check_proc_decl(CheckerContext *ctx, Entity *e, DeclInfo *d) { } - if (e->pkg != nullptr && e->token.string == "main") { + if (e->pkg != nullptr && e->token.string == "main" && !build_context.no_entry_point) { if (e->pkg->kind != Package_Runtime) { if (pt->param_count != 0 || pt->result_count != 0) { diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 359b30276..e548eac88 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -9819,7 +9819,9 @@ gb_internal ExprKind check_compound_literal(CheckerContext *c, Operand *o, Ast * if (tav.mode != Addressing_Constant) { continue; } - GB_ASSERT(tav.value.kind == ExactValue_Integer); + if (tav.value.kind != ExactValue_Integer) { + continue; + } i64 v = big_int_to_i64(&tav.value.value_integer); i64 lower = bt->BitSet.lower; u64 index = cast(u64)(v-lower); diff --git a/src/checker.cpp b/src/checker.cpp index 852fb89bb..49726c090 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -4110,6 +4110,7 @@ gb_internal void check_collect_value_decl(CheckerContext *c, Ast *decl) { bool is_test = false; bool is_init = false; bool is_fini = false; + bool is_priv = false; for_array(i, vd->attributes) { Ast *attr = vd->attributes[i]; @@ -4154,6 +4155,8 @@ gb_internal void check_collect_value_decl(CheckerContext *c, Ast *decl) { } if (!success) { error(value, "'%.*s' expects no parameter, or a string literal containing \"file\" or \"package\"", LIT(name)); + } else { + is_priv = true; } @@ -4175,6 +4178,11 @@ gb_internal void check_collect_value_decl(CheckerContext *c, Ast *decl) { } } + if (is_priv && is_test) { + error(decl, "Attribute 'private' is not allowed on a test case"); + return; + } + if (entity_visibility_kind == EntityVisiblity_Public && (c->scope->flags&ScopeFlag_File) && c->scope->file) { diff --git a/src/linker.cpp b/src/linker.cpp index 25c54a6ab..9eed14ea9 100644 --- a/src/linker.cpp +++ b/src/linker.cpp @@ -265,16 +265,20 @@ gb_internal i32 linker_stage(LinkerData *gen) { if (!build_context.use_lld) { // msvc String res_path = {}; defer (gb_free(heap_allocator(), res_path.text)); + + // TODO(Jeroen): Add ability to reuse .res file instead of recompiling, if `-resource:file.res` is given. if (build_context.has_resource) { String temp_res_path = path_to_string(heap_allocator(), build_context.build_paths[BuildPath_RES]); res_path = concatenate3_strings(heap_allocator(), str_lit("\""), temp_res_path, str_lit("\"")); gb_free(heap_allocator(), temp_res_path.text); - String rc_path = path_to_string(heap_allocator(), build_context.build_paths[BuildPath_RC]); + String temp_rc_path = path_to_string(heap_allocator(), build_context.build_paths[BuildPath_RC]); + String rc_path = concatenate3_strings(heap_allocator(), str_lit("\""), temp_rc_path, str_lit("\"")); + gb_free(heap_allocator(), temp_rc_path.text); defer (gb_free(heap_allocator(), rc_path.text)); result = system_exec_command_line_app("msvc-link", - "\"%.*src.exe\" /nologo /fo \"%.*s\" \"%.*s\"", + "\"%.*src.exe\" /nologo /fo %.*s %.*s", LIT(windows_sdk_bin_path), LIT(res_path), LIT(rc_path) diff --git a/src/main.cpp b/src/main.cpp index 70def5802..f4cd40fe9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2934,7 +2934,8 @@ int main(int arg_count, char const **arg_ptr) { // TODO(jeroen): Remove the `init_filename` param. // Let's put that on `build_context.build_paths[0]` instead. if (parse_packages(parser, init_filename) != ParseFile_None) { - return 1; + GB_ASSERT_MSG(any_errors(), "parse_packages failed but no error was reported."); + // We depend on the next conditional block to return 1, after printing errors. } if (any_errors()) { |