diff options
| author | gingerBill <bill@gingerbill.org> | 2021-08-02 18:32:17 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2021-08-02 18:32:17 +0100 |
| commit | 9e6e769141ea444f8f17255d319cb3a448f23fe5 (patch) | |
| tree | 600dd241df58d88d6c736ce9fce4682154f93728 | |
| parent | c0f746a251e5bc433acec710aa1824b2220f4da1 (diff) | |
Add sanity checks to checkerdev-2021-08
| -rw-r--r-- | src/check_decl.cpp | 3 | ||||
| -rw-r--r-- | src/checker.cpp | 33 |
2 files changed, 21 insertions, 15 deletions
diff --git a/src/check_decl.cpp b/src/check_decl.cpp index a87a29193..2bf21c676 100644 --- a/src/check_decl.cpp +++ b/src/check_decl.cpp @@ -1171,9 +1171,6 @@ end:; // NOTE(bill): Add it to the list of checked entities if (e->flags & EntityFlag_Lazy) { array_add(&ctx->info->entities, e); - } - - if (e->flags & EntityFlag_Lazy) { mutex_unlock(&ctx->info->lazy_mutex); } } diff --git a/src/checker.cpp b/src/checker.cpp index 19577ef70..7e56f281e 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -5014,23 +5014,23 @@ void check_unique_package_names(Checker *c) { } void check_add_entities_from_queues(Checker *c) { - { - isize cap = c->info.entities.count + c->info.entity_queue.count.load(std::memory_order_relaxed); - array_reserve(&c->info.entities, cap); - for (Entity *e; mpmc_dequeue(&c->info.entity_queue, &e); /**/) { - array_add(&c->info.entities, e); - } + isize cap = c->info.entities.count + c->info.entity_queue.count.load(std::memory_order_relaxed); + array_reserve(&c->info.entities, cap); + for (Entity *e; mpmc_dequeue(&c->info.entity_queue, &e); /**/) { + array_add(&c->info.entities, e); } - { - isize cap = c->info.definitions.count + c->info.definition_queue.count.load(std::memory_order_relaxed); - array_reserve(&c->info.definitions, cap); - for (Entity *e; mpmc_dequeue(&c->info.definition_queue, &e); /**/) { - array_add(&c->info.definitions, e); - } +} + +void check_add_definitions_from_queues(Checker *c) { + isize cap = c->info.definitions.count + c->info.definition_queue.count.load(std::memory_order_relaxed); + array_reserve(&c->info.definitions, cap); + for (Entity *e; mpmc_dequeue(&c->info.definition_queue, &e); /**/) { + array_add(&c->info.definitions, e); } } + void check_parsed_files(Checker *c) { #define TIME_SECTION(str) do { debugf("[Section] %s\n", str); if (build_context.show_more_timings) timings_start_section(&global_timings, str_lit(str)); } while (0) @@ -5071,6 +5071,7 @@ void check_parsed_files(Checker *c) { TIME_SECTION("add entities from packages"); check_add_entities_from_queues(c); + check_add_definitions_from_queues(c); TIME_SECTION("check all global entities"); check_all_global_entities(c); @@ -5090,6 +5091,7 @@ void check_parsed_files(Checker *c) { TIME_SECTION("add entities from procedure bodies"); check_add_entities_from_queues(c); + check_add_definitions_from_queues(c); TIME_SECTION("check scope usage"); for_array(i, c->info.files.entries) { @@ -5132,6 +5134,8 @@ void check_parsed_files(Checker *c) { } TIME_SECTION("check for type cycles and inline cycles"); + check_add_definitions_from_queues(c); + // NOTE(bill): Check for illegal cyclic type declarations for_array(i, c->info.definitions) { Entity *e = c->info.definitions[i]; @@ -5190,6 +5194,11 @@ void check_parsed_files(Checker *c) { TIME_SECTION("check unique package names"); check_unique_package_names(c); + + TIME_SECTION("sanity checks"); + GB_ASSERT(c->info.entity_queue.count.load(std::memory_order_relaxed) == 0); + GB_ASSERT(c->info.definition_queue.count.load(std::memory_order_relaxed) == 0); + TIME_SECTION("type check finish"); #undef TIME_SECTION |