diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2019-03-11 10:26:08 -0400 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2019-03-11 10:26:08 -0400 |
| commit | 3a6f19de48366a616eaffd9dd6c4d4712e0b6c27 (patch) | |
| tree | 60e0f7451f1dc6ac03153e0b3471f171825f35e3 /src/codegen.cpp | |
| parent | fec4555476e38d2eeb1dfb02572404b243acd0b2 (diff) | |
| download | zig-3a6f19de48366a616eaffd9dd6c4d4712e0b6c27.tar.gz zig-3a6f19de48366a616eaffd9dd6c4d4712e0b6c27.zip | |
stage1 caching system: detect problematic mtimes
closes #2045
Diffstat (limited to 'src/codegen.cpp')
| -rw-r--r-- | src/codegen.cpp | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/src/codegen.cpp b/src/codegen.cpp index 71f9f0217b..332080c2f5 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -7724,8 +7724,11 @@ static Error define_builtin_compile_vars(CodeGen *g) { Buf digest = BUF_INIT; buf_resize(&digest, 0); - if ((err = cache_hit(&cache_hash, &digest))) - return err; + if ((err = cache_hit(&cache_hash, &digest))) { + // Treat an invalid format error as a cache miss. + if (err != ErrorInvalidFormat) + return err; + } // We should always get a cache hit because there are no // files in the input hash. @@ -8342,12 +8345,14 @@ static void gen_c_object(CodeGen *g, Buf *self_exe_path, CFile *c_file) { Buf digest = BUF_INIT; buf_resize(&digest, 0); if ((err = cache_hit(cache_hash, &digest))) { - if (err == ErrorCacheUnavailable) { - // already printed error - } else { - fprintf(stderr, "unable to check cache when compiling C object: %s\n", err_str(err)); + if (err != ErrorInvalidFormat) { + if (err == ErrorCacheUnavailable) { + // already printed error + } else { + fprintf(stderr, "unable to check cache when compiling C object: %s\n", err_str(err)); + } + exit(1); } - exit(1); } bool is_cache_miss = (buf_len(&digest) == 0); if (is_cache_miss) { @@ -8993,7 +8998,10 @@ void codegen_print_timing_report(CodeGen *g, FILE *f) { } void codegen_add_time_event(CodeGen *g, const char *name) { - g->timing_events.append({os_get_time(), name}); + OsTimeStamp timestamp = os_timestamp_monotonic(); + double seconds = (double)timestamp.sec; + seconds += ((double)timestamp.nsec) / 1000000000.0; + g->timing_events.append({seconds, name}); } static void add_cache_pkg(CodeGen *g, CacheHash *ch, ZigPackage *pkg) { @@ -9090,8 +9098,10 @@ static Error check_cache(CodeGen *g, Buf *manifest_dir, Buf *digest) { cache_list_of_file(ch, g->link_objects.items, g->link_objects.length); buf_resize(digest, 0); - if ((err = cache_hit(ch, digest))) - return err; + if ((err = cache_hit(ch, digest))) { + if (err != ErrorInvalidFormat) + return err; + } if (ch->manifest_file_path != nullptr) { g->caches_to_release.append(ch); |
